New byte deciphered

This commit is contained in:
Amazed 2019-01-22 15:11:47 +01:00
parent cef43f545c
commit 0ad02a046c
2 changed files with 23 additions and 8 deletions

View File

@ -213,7 +213,7 @@ class Netserver:
return return
def handle_game_packet(self, session, payload): def handle_game_packet(self, session, payload):
logger.debug("Payload: %s", payload) #logger.debug("Payload: %s", payload)
if payload[0] == 0xc1: if payload[0] == 0xc1:
# connect frame? # connect frame?
_ = payload[0:4] _ = payload[0:4]
@ -246,11 +246,12 @@ class Netserver:
payload.putLong(0x41) # unknown - 65 payload.putLong(0x41) # unknown - 65
payload.putLong(0x14) # max players payload.putLong(0x14) # max players
payload.putLong(0x02) # current players payload.putLong(0x02) # current players
payload.write(b'\x0e\x01\x00\x00') # unknown - 3585 - or \x16\x01\x00\x00 payload.putByte(len((name + "\x00").encode("utf-16-le"))) # player name length FUN FACT: setting it to a bad value makes the client crash on connect
payload.write(b'\x01\x00\x00') # unknown - 3585 - or \x16\x01\x00\x00
payload.putLong(len((self.server.name + "\x00").encode("utf-16-le"))) # SERVERNAME LENGTH payload.putLong(len((self.server.name + "\x00").encode("utf-16-le"))) # SERVERNAME LENGTH
for _ in range(4): for _ in range(4):
payload.putLong(0) # unknown payload.putLong(0) # unknown
payload.putLong(0xda) # unknown - 218 - or 0xe2 payload.putLong(204+len((name+"\x00").encode("utf-16-le"))) # 204+playerlen
payload.putLong(0x34) # unknown - 52 payload.putLong(0x34) # unknown - 52
payload.write(self.guid) # instance guid payload.write(self.guid) # instance guid
payload.write( payload.write(
@ -275,13 +276,12 @@ class Netserver:
payload.putLong(0x00) # unknown - 0 payload.putLong(0x00) # unknown - 0
payload.putLong(0x07) # unknown - 7 payload.putLong(0x07) # unknown - 7
payload.putLong(0xcc) # unknown - 204 payload.putLong(0xcc) # unknown - 204
payload.putLong(0x0e) # unknown - 6 payload.putLong(len((name + "\x00").encode("utf-16-le"))) # player name length
for _ in range(4): for _ in range(4):
payload.putLong(0) # unknown payload.putLong(0) # unknown
payload.write((name + "\x00").encode("utf-16-le")) payload.write((name + "\x00").encode("utf-16-le"))
payload.write(b'\xff') # map ID payload.write(b'\xff') # map ID
payload.write(b'\x01\x01\x00') payload.write(b'\x01\x01\x00')
#payload.write(b'\x00\x04\x00')
payload.write(b'\xd9\x05') # game version payload.write(b'\xd9\x05') # game version
payload.write(b'\x02\x92') # unknown payload.write(b'\x02\x92') # unknown
payload.write(b'\x05\x00\x01\x00\x00\x00\x00\x00') # Unknown payload.write(b'\x05\x00\x01\x00\x00\x00\x00\x00') # Unknown
@ -296,10 +296,14 @@ class Netserver:
elif payload[0] == 0xc3: elif payload[0] == 0xc3:
player = self.get_player(session) player = self.get_player(session)
self.server.broadcast_message("%s: you should never have joined... Sorry bro." % player.name) if not player:
return
player.session.send_cframe_sack()
self.server.broadcast_message("%s: sorry bro, you're fucked." % player.name)
player.session.send_gamedata(b'\x3c\x56\xab\x31\x96\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') player.session.send_gamedata(b'\x3c\x56\xab\x31\x96\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
player.session.send_gamedata(b'\x01\x02\x57\xab\xa1\x96\x56\xab\x31\x96\x0e\x01\x00\x00\x00') player.session.send_gamedata(b'\x01\x02\x57\xab\xa1\x96\x56\xab\x31\x96\x0e\x01\x00\x00\x00')
player.session.send_gamedata(b'\x3d\x00\x5b\x53\x65\x72\x76\x65\x72\x5d') # [SERVER] """player.session.send_gamedata(b'\x3d\x00\x5b\x53\x65\x72\x76\x65\x72\x5d') # [SERVER]
player.session.send_gamedata(b'\x3d\x01'+player.name.encode("ascii")+b"\x00") # playername player.session.send_gamedata(b'\x3d\x01'+player.name.encode("ascii")+b"\x00") # playername
player.session.send_gamedata(b'\x0f\x56\xab\x31\x96\x06\x00\x00\x00\x00\x00\x00\x00\x00') # unknown player.session.send_gamedata(b'\x0f\x56\xab\x31\x96\x06\x00\x00\x00\x00\x00\x00\x00\x00') # unknown
player.session.send_gamedata(b'\x10\x02\x56\xab\x31\x96\x00\x00\x00\x00\x00\x00\x00\x00') # unknown player.session.send_gamedata(b'\x10\x02\x56\xab\x31\x96\x00\x00\x00\x00\x00\x00\x00\x00') # unknown
@ -310,7 +314,17 @@ class Netserver:
player.session.send_gamedata(b'\x0a\x12\x00\x00\x00\x00\x28\x10\x03\x10\x12\x00\x00\x00\xc1\xff\x41\xff\x00', acknow=True) # unknown player.session.send_gamedata(b'\x0a\x12\x00\x00\x00\x00\x28\x10\x03\x10\x12\x00\x00\x00\xc1\xff\x41\xff\x00', acknow=True) # unknown
player.session.send_gamedata(b'\x0f\x56\xab\x31\x96\x08\x00\x00\x00\x00\x00\x00\x00\x00', acknow=True) # unknown player.session.send_gamedata(b'\x0f\x56\xab\x31\x96\x08\x00\x00\x00\x00\x00\x00\x00\x00', acknow=True) # unknown
player.session.send_gamedata(b'\x0a\x12\x00\x00\x00\x00\x2c\x10\x03\x10\x12\x00\x00\x00\x08\x00\xb6\x01\x0a\x14\x00\x00\x00\x00\x2d\x10\x03\x01\x12\x00\x00\x00\xd4\xfc\x9b\xfd\x00\x00\x00', acknow=True) # unknown
#\x00
player.session.send_gamedata(b'\x2f\x02\x00\x00\xbe\x00\x00\x00\x00\x00\x00\x00\x00\x00', acknow=True) # unknown
player.session.send_gamedata(b'\x0a\x12\x00\x00\x00\x00\x2e\x10\x03\x10\x12\x00\x00\x00\xa8\xfd\x2d\x03\x0a\x14\x00\x00\x00\x00\x2e\x10\x03\x01\x12\x00\x00\x00\x60\xfd\x14\x03\x00\x00\x00', acknow=True) # unknown
player.session.send_gamedata(b'\x0a\x14\x00\x00\x00\x00\x28\x10\x03\x01\x12\x00\x00\x00\xbf\xff\x3f\xff\x00\x00\x00', acknow=True) # unknown
player.session.send_gamedata(b'\x0a\x12\x00\x00\x00\x00\x2a\x10\x03\x10\x12\x00\x00\x00\x73\x01\x42\x02\x0a\x14\x00\x00\x00\x00\x2a\x10\x03\x01\x12\x00\x00\x00\xbe\x01\x8c\x02\x00\x00\x00', acknow=True) # unknown
player.session.send_gamedata(b'\x2f\x02\x00\x00\xc2\x00\x00\x00\x00\x00\x00\x00\x00\x00',acknow=True) # unknown
player.session.send_gamedata(b'\x0a\x14\x00\x00\x00\x00\x2c\x10\x03\x01\x12\x00\x00\x00\x06\x00\xb5\x01\x00\x00\x00', acknow=True) # unknown
player.session.send_gamedata(b'\x0a\x12\x00\x00\x00\x00\x2e\x10\x03\x10\x12\x00\x00\x00\xa4\xfd\x2c\x03\x00',acknow=True) # unknown
player.session.send_gamedata(b'\x2f\x02\x00\x00\xc2\x00\x00\x00\x00\x00\x00\x00\x00\x00', acknow=True) # unknown
"""
def send_packet(self, addr, packet): def send_packet(self, addr, packet):

View File

@ -18,6 +18,7 @@ class Server:
self.maxplayers = kwargs.get("maxplayers", 20) self.maxplayers = kwargs.get("maxplayers", 20)
self.name = kwargs.get("name", "Default Server Name") self.name = kwargs.get("name", "Default Server Name")
self.accept_new_players = True self.accept_new_players = True
self.register_with_ms = False
# events # events
self._on_new_player = [] self._on_new_player = []