发布于: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) |
最新评论
发表评论