Analisis protokol World of Tanks

Halo, hari ini kami akan menganalisis protokol tank (seluler)

Penulis tidak bertanggung jawab atas materi yang diberikan dalam artikel ini, semua yang Anda baca atau lihat ada dalam mimpi. Alat yang ditulis selama proses analisis protokol tidak akan pernah dirilis ke publik.





Alat yang kami butuhkan

  1. x64 dbg





  2. Pemotong (Radare2)





  3. C ++ 4. WireShark





Mulai (Protokol)

Saya memulai analisis dengan menentukan protokol yang digunakan game untuk komunikasi (TCP / UDP).





Kami membuka procmon (kami mencoba memberi otorisasi di klien game).





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  adalah metode untuk mencegat fungsi API dengan mengubah kode fungsi target. Sebaliknya, transisi dimasukkan ke fungsi yang didefinisikan oleh programmer.





Pertama, kita perlu memanggil fungsi dekripsi asli.

Kemudian baca [ptr * dest]





Saya memutuskan untuk menulis Dll saya di C ++ untuk membuat trampolin fungsi

Jangan lupa tentang mengamati konvensi saat memanggil (__cdecl / __fastcall / __thiscall)





  1. Kami mendapatkan alamat fungsi melalui GetModuleBaseAddress + RVA





  2. Fungsi penyambungan





Hasil

Masukkan dll ke dalam proses game (saya menggunakan CE).

Kami mengotorisasi permainan dan menikmati.












All Articles