- 注册时间
 - 2010-6-12
 
- 最后登录
 - 2019-9-29
 
- 在线时间
 - 53 小时
 
 
 
 
 
终身VIP会员 
    
	- 魔鬼币
 - 55183 
 
 
 
 | 
 
 
经过第二节的分析我们继续对 血量计算函数进行深入的分析,最终得到了它的解密算法: 
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次数据比对算是对数据的真伪检测。其实算法在这里不是很重要,重要的是我们透过分析代码得到了血量的原始存储地址和数值这就足够了,如果服务器不对玩家血量做验证的话,这里完全可以实现锁血锁蓝了。 
 
 |   
 
 
 
 |