游戏安全实验室 首页 游戏漏洞 查看内容

【游戏漏洞】RPG类型游戏明文发包函数分析

发布于:2018-7-9 17:19   |    127233次阅读 作者: 外部投稿    |   原作者: 通化程序员

QQ西游是线程发包

我们通过追踪包内容的来源

包内容下写入断断到的位置

包内容给来源于ESI

SEND的位置我们发现包是加密的

但是现在发现  ESI 和EDI 的结构体里都是明文结构体

那么说明是明文拷贝以后再进行加密的

我们F8往下找

 

找到了加密CALL

如果要实现自己加密然后SEND发包的话可以调用这里

 

 

我们继续追踪明文封包的来源

 

此时的EBP不是栈底指针

 

得出结论

明文封包是上一层【第一个参数+C】

 

 

004EEDC0    53              push    ebx

004EEDC1    55              push    ebp

004EEDC2    8B6C24 0C       mov     ebp, dword ptr [esp+C]                                 ; [第一个参数+C]

004EEDC6    8B45 00         mov     eax, dword ptr [ebp]                                   ; 此处下断是有明文封包的

004EEDC9    8BD9            mov     ebx, ecx

004EEDCB    8BCD            mov     ecx, ebp

004EEDCD    FF50 08         call    dword ptr [eax+8]

004EEDD0    83C0 08         add     eax, 8

004EEDD3    837B 0C 02      cmp     dword ptr [ebx+C], 2

004EEDD7    0F85 CF000000   jnz     004EEEAC

004EEDDD    8B8B 2C000200   mov     ecx, dword ptr [ebx+2002C]

004EEDE3    8D5401 02       lea     edx, dword ptr [ecx+eax+2]

004EEDE7    81FA 00000100   cmp     edx, 10000

004EEDED    72 30           jb      short 004EEE1F

004EEDEF    8B43 24         mov     eax, dword ptr [ebx+24]

004EEDF2    83F8 FF         cmp     eax, -1

004EEDF5    74 1A           je      short 004EEE11

004EEDF7    6A 02           push    2

004EEDF9    50              push    eax

004EEDFA    FF15 70A37C00   call    dword ptr [<&WS2_32.#22>]                              ; WS2_32.shutdown

004EEE00    8B43 24         mov     eax, dword ptr [ebx+24]

004EEE03    50              push    eax

004EEE04    FF15 78A37C00   call    dword ptr [<&WS2_32.#3>]                               ; WS2_32.closesocket

004EEE0A    C743 24 FFFFFFF>mov     dword ptr [ebx+24], -1

004EEE11    8B13            mov     edx, dword ptr [ebx]

004EEE13    8BCB            mov     ecx, ebx

004EEE15    C743 0C 0000000>mov     dword ptr [ebx+C], 0

004EEE1C    FF52 10         call    dword ptr [edx+10]

004EEE1F    8B45 00         mov     eax, dword ptr [ebp]

004EEE22    56              push    esi                                                    ; 来源[ebp+C]

004EEE23    8B75 0C         mov     esi, dword ptr [ebp+C]                                 ; 此处的EBP 不是栈底指针

004EEE26    57              push    edi

004EEE27    8BCD            mov     ecx, ebp

004EEE29    FF50 08         call    dword ptr [eax+8]

004EEE2C    8B93 2C000200   mov     edx, dword ptr [ebx+2002C]

004EEE32    8BC8            mov     ecx, eax

004EEE34    C1E9 02         shr     ecx, 2

004EEE37    8DBC1A 2E000100 lea     edi, dword ptr [edx+ebx+1002E]                         ; 包内容来源于 esi

004EEE3E    F3:A5           rep     movs dword ptr es:[edi], dword ptr [esi]               ; 断下的位置   明文拷贝

004EEE40    8BC8            mov     ecx, eax

004EEE42    83E1 03         and     ecx, 3

004EEE45    F3:A4           rep     movs byte ptr es:[edi], byte ptr [esi]

004EEE47    8B8B 30000200   mov     ecx, dword ptr [ebx+20030]

004EEE4D    8B31            mov     esi, dword ptr [ecx]

004EEE4F    8B55 00         mov     edx, dword ptr [ebp]

004EEE52    6A 00           push    0

004EEE54    6A 01           push    1

004EEE56    8BCD            mov     ecx, ebp

004EEE58    FF52 08         call    dword ptr [edx+8]

004EEE5B    50              push    eax

004EEE5C    8B83 2C000200   mov     eax, dword ptr [ebx+2002C]

004EEE62    8D8C18 2E000100 lea     ecx, dword ptr [eax+ebx+1002E]

004EEE69    51              push    ecx

004EEE6A    8B8B 30000200   mov     ecx, dword ptr [ebx+20030]

004EEE70    FF56 04         call    dword ptr [esi+4]                                      ; 加密CALL

004EEE73    8B93 2C000200   mov     edx, dword ptr [ebx+2002C]

004EEE79    8BF0            mov     esi, eax

004EEE7B    66:89B41A 2C000>mov     word ptr [edx+ebx+1002C], si

004EEE83    8B83 2C000200   mov     eax, dword ptr [ebx+2002C]

004EEE89    8D8C18 2C000100 lea     ecx, dword ptr [eax+ebx+1002C]

004EEE90    6A 02           push    2

004EEE92    51              push    ecx

004EEE93    8B8B 30000200   mov     ecx, dword ptr [ebx+20030]

004EEE99    E8 02F3FFFF     call    004EE1A0

004EEE9E    0FB7D6          movzx   edx, si

004EEEA1    83C2 02         add     edx, 2

004EEEA4    0193 2C000200   add     dword ptr [ebx+2002C], edx

004EEEAA    5F              pop     edi

004EEEAB    5E              pop     esi

004EEEAC    5D              pop     ebp

004EEEAD    5B              pop     ebx

004EEEAE    C2 0400         retn    4

 

 

返回分析上层CALL

 

 

 

ECX的值很容易追到[8DAC28]+13D4 不过多说

eax是一个结构体

我们知道+C的位置放的是明文封包

通过喊话来分析一下结构

 

喊话6个1

 

喊话8个1

 

喊话10个1

 

 

很容易确定了结构体的构造

有了明文封包我们可以调用游戏里所有的功能了

 

也可以构造明文封包然后调用上面找的加密CALL通过send发送

这样的好处是绕过了游戏里所有的代码

 

 

 

 

 来源:通化程序员-公众号投稿

GSLAB网站投稿文章仅代表作者本人的观点,与本网站立场无关。

*转载请注明来自游戏安全实验室(GSLAB.QQ.COM)

分享到:
踩0 赞0

收藏

上一篇:【游戏漏洞】RPG游戏喊话封包 本地与服务器的处理关系

下一篇:【游戏漏洞】RPG类型游戏数据关联名称库加密算法

最新评论
B Color Image Link Quote Code Smilies

发表评论

top 问题反馈

返回顶部