Przez ostatni tydzień próbuję rozgryźć kodowanie pakietów w pewnej grze, ta gra to Endless-Online Remake. Na początek nagrałem trochę pakietów, gdy postać atakuje. Nagrałem 15 pakietów ataku i każdy pakiet był inny. Po analizie pakietu połączenia (zapytanie i odpowiedź) zebrałem następujące informacje:
W pakiecie zapytania klient gry wysyła czas systemowy w 3 bajtach (integer), wydaje mi się, że to jest czas w sekundach. Serwer pobiera ten numer i używa go jako klucz kodowania do pierwszego pakietu - odpowiedzi na połączenie. W tym pakiecie też wysyłany jest jakiś numer, który służy jako klucz kodowania dla następnych pakietów. Kolejne pakiety wysyłane przez klient są inne, co oznacza, że może on używać czasu systemowego lub poprostu zwiększać wcześniej zainicjowany klucz kodowania.
Serwer napewno używa numeru wysłanego przez klient jako klucz kodowania do pierwszego pakietu, sprawdziłem to przez proste proxy zmieniając ten numer na jakis stały, kolejne odpowiedzi serwera na połączenie były takie same (oprócz tego numeru, który jest chyba losowy). Dodam jeszcze, że pierwszy pakiet klienta jest zawsze taki sam (używa stałego algorytmu szyfrowania), w związku z tym, że 2 pierwsze bajty pakietu to jego długość, to dla pierwszego bajtu po odkodowaniu powinno wyjść 23 lub 25 :P
Wie ktoś jakie to może być szyfrowanie ? Wydaje mi się, że to XOR'owanie ale nie jestem pewien, próbowałem coś z XOR'owaniem ale nie wychodziło.
Posługuję się C++ i mam na celu napisanie emulatora serwera :P
Jeśli chciałby ktoś zerknąc na pakiety to tutaj jest link do klienta gry: http://eoinfo.no-ip.org/EO36.zip
Dzięki z góry za wszelką pomoc.