World ofTanksプロトコルの分析

こんにちは、今日は戦車(モバイル)のプロトコルを分析します

著者はこの記事で提供された資料に対して責任を負いません。あなたが読んだり見たりしたものはすべて夢の中にありました。プロトコル分析プロセス中に作成されたツールは、一般に公開されることはありません。





必要なツール

  1. x64 dbg





  2. カッター(Radare2)





  3. 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)を呼び出すときは、規則に従うことを忘れないでください。





  1. GetModuleBaseAddress + RVAを介して関数のアドレスを取得します





  2. スプライシング機能





結果

ゲームプロセスにdllを挿入します(私はCEを使用しました)。

私たちはゲームを承認して楽しんでいます。












All Articles