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
x64 dbg
Cortador (Radare2)
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)
Obtemos o endereço da função via GetModuleBaseAddress + RVA
Funções de emenda
Resultado
Injetar dll no processo do jogo (usei CE).
Nós autorizamos o jogo e aproveite.