Bonjour, aujourd'hui nous allons analyser le protocole des réservoirs (mobiles)
L'auteur n'est pas responsable du matériel fourni dans cet article, tout ce que vous avez lu ou vu était dans un rêve. Les outils écrits pendant le processus d'analyse du protocole ne seront jamais rendus publics.
Les outils dont nous avons besoin
x64 dbg
Cutter (Radare2)
C ++ 4. WireShark
Démarrer (protocole)
J'ai commencé l'analyse en définissant le protocole utilisé par le jeu pour la communication (TCP / UDP).
Nous ouvrons procmon (nous essayons d'autoriser dans le client du jeu).
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 est une méthode d'interception des fonctions API en modifiant le code de fonction cible. Au lieu de cela, une transition est insérée vers une fonction définie par le programmeur.
Tout d'abord, nous devons appeler la fonction de décryptage d'origine.
Puis lisez [ptr * dest]
J'ai décidé d'écrire ma Dll en C ++ pour faire un trampoline de la fonction
N'oubliez pas de respecter la convention lors de l'appel (__cdecl / __fastcall / __thiscall)
Nous obtenons l'adresse de la fonction via GetModuleBaseAddress + RVA
Fonctions d'épissage
Résultat
Injectez dll dans le processus de jeu (j'ai utilisé CE).
Nous autorisons le jeu et en profitons.