- 注册时间
- 2010-6-12
- 最后登录
- 2019-9-29
- 在线时间
- 53 小时
终身VIP会员
- 魔鬼币
- 55135
|
经过第二节的分析我们继续对 血量计算函数进行深入的分析,最终得到了它的解密算法:
PUSH EBX
MOV EBX,[00F5F11C] //[00F5F11C]=9cdeef02
PUSH ESI
PUSH EDI
MOV EDI,ECX //ECX=4F61228 (上层函数由基址计算得来)
MOV EAX,[EDI] //98240fec
MOV ECX,[EDI+4] //[4F6122C]=4CEC6
XOR EAX,EBX //EAX=4fae0ee(运算后)
SUB EAX,EDI //EAX=4CEC6(运算后)
CMP EAX,ECX //相等
JZ 00A626EC //跳转实现
MOV ECX,[00F5F118]
PUSH 3F
PUSH EDI
CALL 00A630A0 //可能是个错误处理函数,也有可能是辅助检测和报告函数
MOV EBX,[00F5F11C]
MOV ECX,[00F5F118] //跳转至此 64f3e58
MOV EAX,[EDI+4] //[4f6122c]=4CEC6
MOV EDX,[ECX+44] //[64f3e9c]=243b0000
SHL EAX,2 //EAX=133b18 (运算后)
MOV ESI,[EDX+EAX] //[244e3b18]=b890d7ee
ADD EDX,EAX //EAX=133b18 EDX=243b0000 运算后EDX=244e3b18
XOR ESI,EDX //ESI=9cdeecf6(运算后)
MOV EDX,[ECX+48] //[64f3ea0]=4c050000
ADD EAX,EDX //EAX=4c183b18(运算后)
MOV EDX,[EAX] //d0c6d7ee
XOR EDX,EAX //edx=9cdeecf6(运算后)
XOR ESI,EBX //esi=3f4(运算后)(至此我们的血量数值也就计算出来了)
XOR EDX,EBX //edx=3f4(运算后)(同样也是血量数值)
CMP ESI,EDX //相等
JZ 00A6271B //跳转实现
PUSH 40
PUSH EDI
CALL 00A630A0
POP EDI //跳转至此
MOV EAX,ESI //esi=3f4(为函数返回值赋值)
POP ESI
POP EBX
RET
上面的解密算法很简单多数都是异或,2次数据比对算是对数据的真伪检测。其实算法在这里不是很重要,重要的是我们透过分析代码得到了血量的原始存储地址和数值这就足够了,如果服务器不对玩家血量做验证的话,这里完全可以实现锁血锁蓝了。
|
|