一个游戏我们拿来以后第一件事肯定是要去分析发包函数。
因为发包函数可以给我们很多有用的信息。
第一,所有的功能都可以通过发包实现。
第二,发包中的参数可以获悉游戏中的数据形式,例如某些参数是类型,ID是什么样的值。
第三,通过发包可以得知游戏的通讯方式是否存在漏洞,例如怪物如果死亡的时候发包,那么就有秒怪封包,秒怪功能。
首先我们分别到send,sendto,WSASend 三个发包函数上下断,看是否是发包函数。
send
sendto
WSASend
分别下断以后,发现都不断
偶尔会断下,经过分析以后发现和我们做的发包动作无关。
那么不是这3个发包函数发的包,这个游戏自己实现了发包函数。
通过其他send发包的游戏
我们在send内部调用更内层发包函数WSPSend的位置下断
找到更内层的发包函数
WSPSend
71384405 6A 44 push 44
71384407 68 80453871 push 71384580
7138440C E8 7FCFFFFF call 71381390
71384411 33FF xor edi, edi
71384413 897D E0 mov dword ptr [ebp-20], edi
71384416 803D B8643B71 0>cmp byte ptr [713B64B8], 0
7138441D 0F85 04240000 jnz 71386827
71384423 393D 5C603B71 cmp dword ptr [713B605C], edi
71384429 0F86 F8230000 jbe 71386827
7138442F FF35 88603B71 push dword ptr [713B6088]
71384435 FF15 D0123871 call dword ptr [<&API-MS-Win-Core-Pro>; kernel32.TlsGetValue
7138443B 8945 D4 mov dword ptr [ebp-2C], eax
7138443E 3BC7 cmp eax, edi
71384440 0F84 E1230000 je 71386827
当然每台电脑的地址是不同的
只有在本台电脑是相同的
我们重新附加灵山奇缘,跳到该地址下断
CTRL+F9返回到真正的发包函数
通过分析
根据参数的 性质我们分析出来
这是重新实现的WSASend
此时再做任何发包动作都会断下了,当然也有心跳包。