Mess with tokens

This commit is contained in:
ChillerDragon 2022-11-11 14:37:41 +01:00
parent 45d1361408
commit cf57146260
6 changed files with 71 additions and 6 deletions

20
.github/workflows/bad_code.yml vendored Normal file
View file

@ -0,0 +1,20 @@
name: Bad code
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
jobs:
check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Ruby 3.1
uses: actions/setup-ruby@v1
with:
ruby-version: 3.1.x
- name: Check code
run: ./scripts/bad_code.sh

View file

@ -40,7 +40,7 @@ class Map
@sha256_arr = @sha256
@sha256 = @sha256.pack('C*')
@sha256_str = @sha256.map { |b| b.to_s(16) }.join
@sha256_str = @sha256.map { |b| b.to_s(16).rjust(2, '0') }.join
end
end
end

View file

@ -14,7 +14,7 @@ class NetBase
@port = nil
@s = nil
@ack = 0
@peer_token = [0xFF, 0xFF, 0xFF, 0xFF].map { |b| b.to_s(16) }.join
@peer_token = [0xFF, 0xFF, 0xFF, 0xFF].map { |b| b.to_s(16).rjust(2, '0') }.join
end
def bind(socket)

View file

@ -104,7 +104,7 @@ class TeeworldsClient
@game_client = GameClient.new(self)
# me trying to write cool code
@client_token = (1..4).to_a.map { |_| rand(0..255) }
@client_token = @client_token.map { |b| b.to_s(16) }.join
@client_token = @client_token.map { |b| b.to_s(16).rjust(2, '0') }.join
puts "client token #{@client_token}"
@netbase = NetBase.new(verbose: @verbose)
NetChunk.reset

8
lib/teeworlds_server.rb Executable file → Normal file
View file

@ -34,7 +34,7 @@ class TeeworldsServer
def run(ip, port)
@server_token = (1..4).to_a.map { |_| rand(0..255) }
@server_token = @server_token.map { |b| b.to_s(16) }.join
@server_token = @server_token.map { |b| b.to_s(16).rjust(2, '0') }.join
puts "server token #{@server_token}"
@netbase = NetBase.new(verbose: @verbose)
NetChunk.reset
@ -107,8 +107,10 @@ class TeeworldsServer
end
def send_ctrl_with_token(addr, token)
msg = [NET_CTRLMSG_TOKEN] + token
msg = [NET_CTRLMSG_TOKEN] + str_bytes(@server_token)
@netbase.peer_token = token.pack('C*')
@netbase.send_packet(msg, 0, control: true, addr:)
# @netbase.peer_token = @server_token
end
def send_map(addr)
@ -154,7 +156,7 @@ class TeeworldsServer
def on_ctrl_token(packet)
u = Unpacker.new(packet.payload[1..])
token = u.get_raw(4)
# puts "got token #{token.map { |b| b.to_s(16) }.join('')}"
# puts "got token #{token.map { |b| b.to_s(16).rjust(2, '0') }.join('')}"
send_ctrl_with_token(packet.addr, token)
end

43
scripts/bad_code.sh Executable file
View file

@ -0,0 +1,43 @@
#!/bin/bash
arg_fix=0
if [ "$1" == "--fix" ]
then
arg_fix=1
fi
if [ "$arg_fix" == "1" ]
then
while read -r bad_file
do
echo "[*] fixing '$bad_file' ..."
for del in ';' '$' ' '
do
del_end="$del"
[[ "$del" == '$' ]] && del_end=''
sed "s/.to_s(16)$del/.to_s(16).rjust(2, '0')$del_end/g" "$bad_file" > "$bad_file".tmp
done
mv "$bad_file".tmp "$bad_file"
done < <(grep -nri "to_s(16)" --exclude=bad_code.sh |
grep -v "to_s(16).rjust(2, '0')" |
cut -d':' -f1)
fi
if grep -nri "to_s(16)" --exclude=bad_code.sh | grep -v "to_s(16).rjust(2, '0')"
then
if [ "$arg_fix" == "1" ]
then
echo "[-] Error: could not fix those ^"
exit 1
fi
echo "[-] Error: found usage of 'to_s(16)' without 'rjust(2, '0')'"
echo "[-] all hexadecimal string bytes have to be zero padded!"
echo "[-]"
echo "[-] bad: FAF"
echo "[-] good: 0FAF"
echo "[-]"
echo "[-] run ./scripts/bad_code.sh --fix to fix"
echo "[-]"
exit 1
fi