こんにちは、今日は戦車(モバイル)のプロトコルを分析します
著者はこの記事で提供された資料に対して責任を負いません。あなたが読んだり見たりしたものはすべて夢の中にありました。プロトコル分析プロセス中に作成されたツールは、一般に公開されることはありません。
必要なツール
x64 dbg
カッター(Radare2)
C ++ 4。WireShark
開始(プロトコル)
ゲームが通信に使用するプロトコル(TCP / UDP)を定義することから分析を開始しました。
procmonを開きます(ゲームクライアントで承認しようとします)。
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)
.
スプライス は、ターゲット関数コードを変更することによってAPI関数をインターセプトする方法です。代わりに、プログラマーが定義する関数に遷移が挿入されます。
まず、元の復号化関数を呼び出す必要があります。
次に、[ptr * dest]を読みます
関数のトランポリンを作成するために、DLLをC ++で作成することにしました。
(__ cdecl / __fastcall / __thiscall)を呼び出すときは、規則に従うことを忘れないでください。
GetModuleBaseAddress + RVAを介して関数のアドレスを取得します
スプライシング機能
結果
ゲームプロセスにdllを挿入します(私はCEを使用しました)。
私たちはゲームを承認して楽しんでいます。