Análise do protocolo do World of Tanks

Olá, hoje vamos analisar o protocolo dos tanques (móvel)

O autor não se responsabiliza pelo material disponibilizado neste artigo, tudo que você leu ou viu foi um sonho. As ferramentas escritas durante o processo de análise do protocolo nunca serão divulgadas ao público.





As ferramentas de que precisamos

  1. x64 dbg





  2. Cortador (Radare2)





  3. C ++ 4. WireShark





Iniciar (protocolo)

Iniciei a análise definindo o protocolo que o jogo usa para comunicação (TCP / UDP).





Abrimos o procmon (tentamos autorizar no cliente do jogo).





UDP ( ) 12 ( ping / pong), , 273 30 . "loginapp_wot.pubkey" - RSA-2048 ( )





 ( )

WireShark - UDP .









( ) (273 ) . , :









(  1-2 ) :





HEADER => [0x01, 0x00, 0x00, 0x04, 0x01, 0x31, 0x98, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x02]
BODY => [? ? ? ? ?]
FOOTER => [0x02, 0x00]
      
      







 256  * 8 = 2048  ( RSA-2048)





x64dbg 2 ws2_32 [send / sendTo]





( ) . call stack,  0x100:





Json .







body .





?

(RSA-2048) .





.





 ( )

, .













 (caller)

.





Splice  é um método de interceptar funções de API alterando o código da função de destino. Em vez disso, uma transição é inserida em uma função que o programador define.





Primeiro, precisamos chamar a função de descriptografia original.

Então leia [ptr * dest]





Decidi escrever minha DLL em C ++ para fazer um trampolim da função

Não se esqueça de observar a convenção ao chamar (__cdecl / __fastcall / __thiscall)





  1. Obtemos o endereço da função via GetModuleBaseAddress + RVA





  2. Funções de emenda





Resultado

Injetar dll no processo do jogo (usei CE).

Nós autorizamos o jogo e aproveite.












All Articles