/*
使用F1-F8 CALL
*/
MOV ECX,[924E0C]
MOV ECX,[ECX+1C]
MOV ECX,[ECX+20]
MOV ECX,[ECX+0BAC]
MOV ECX,[ECX+0C]
MOV ECX,[ECX+0] //使用F1快捷键CALL 使用Fn的快捷键CALL=(fn-1)*4
MOV EDX,[ECX]
CALL [EDX+8]
CE开始
094A6888
1253A0E0
1253A1B4
F1上面不放技能 搜索= 0
放个技能在F1键上 搜索 > 0
换个技能搜索 数值改变的
最后找到2个地址
把这个地址dd 这个地址看看结果 和快捷键上的比较
od 找F1的数组 注意不要求换技能 只用普通攻击切换
dd 154B88B0
硬件写入
选测试地址是否正确 看特征
下断后,回到游戏里 把普通攻击拖到第1格子上
按F9 删除硬件断点
回到游戏里拖动技能
OD断下来
ECX=[EAX+EDI*4]
EAX=[ESI+0C]
EDI=0 //F1=0 f2=1,...,
ESI=[[0A94464]+1c]+20
ECX=[EAX+EDI*4]
ECX=[[ESI+0C]+1*4]
ECX=[[[[0A94464]+1c]+20]+0C]+1*4
测试 F1的内存 154F8728
dd [[[[0A94464]+1C]+20]+0C]+0*4
测试结果不不指向任何地方
继续往下找
EAX=[ESI+EAX*4+C38]
EAX=[ESI+1*4+0C38]
4+0C38=C3C
EAX=[ESI+0C3C]
完整的代码
ECX=[[ESI+0C]+1*4]
ECX=[[[[[0A94464]+1C]+20]+0C3C]+0C]+0*4
测试
dd [[[[[0A94464]+1C]+20]+0C3C]+0C]+0*4 =154F8728
和CE的地址一样 结果正确
F1数组=[[[[[0A94464]+1C]+20]+0C3C]+0C]+0*4 //F1=0,F2=1,..,Fn=Fn-1
技能放在F1上面
查找数据
按F1键 使用技能
00518673 - 8B 03 - mov eax,[ebx]
00518726 - 8B 13 - mov edx,[ebx]
005A8A81 - 8B 10 - mov edx,[eax]
004A5501 - 8B 07 - mov eax,[edi]
Ctrl+G 005A8A81
//EAX=10D8CDA8=dd [[[[[0A94464]+1C]+20]+0C3C]+0C]+0*4
MOV EDX,[EAX]
MOV ECX,EAX
CALL [EDX+8]
MOV EAX,[0A94464]
MOV EAX,[EAX+1C]
MOV EAX,[EAX+20]
MOV EAX,[EAX+0C3C]
MOV EAX,[EAX+0C]
MOV EAX,[EAX+0] // 0=F1, 4=F2 ,8=F3,12=F4,...,+4
MOV EDX,[EAX]
MOV ECX,EAX
CALL [EDX+8]
正确
OD Ctrl+S定位码
//上面的JMP
ADD EBX,-3D
PUSH 0
PUSH EBX
//////////////////////////////////////
用CE找到这个地址 094169A0
每次用其他技能往快捷键F1上拖
OD dd 094169A0
mov [eax+edi*4],ecx, edi=0
mov eax,[esi+0c]
mov ecx,[eax+ebx*4+0BA8],ebx=1
mov ecx,[ecx+20]
mov ecx,[eax+1c]
mov ecx,[0924e0c]
dd [[[[[924E0C]+1C]+20]+1*4+0BA8]+C]+0*4
1*4+0BA8=BAC
找F1的功能CALL
主要思路
F1~F8 1~6功能CALL
dd [[[[[924E0C]+1C]+20]+1*4+0BA8]+C]+0*4
//1~6
dd [[[[[924E0C]+1C]+20]+1*4+0B9C]+C]+0*4
F1 =[[[[[924E0C]+1C]+20]+1*4+0BA8]+C]+0*4
在CE中添加地址
16进制显示结果
把数值复制1个添加手动添加地址
004F514F - 8B 55 00 - mov edx,[ebp+00]
004F51FF - 8B 55 00 - mov edx,[ebp+00]
0054EB1B - 8B 10 - mov edx,[eax]
00492E21 - 8B 07 - mov eax,[edi]
按F1找到的 ,用CE查找到了一个数值
0054EB1B - 8B 07 - mov eax,[edi]
ctrl+g 004BDC21
通过查询 F1 =[[[[[924E0C]+1C]+20]+1*4+0BA8]+C]+0*4 这个数值刚好等于 EAX的值
//获得EAX的值 给EDX下个断然后 OD断下时的值就是EAX的值
//如果快捷杠上没有技能的话直接使用游戏崩溃
写代码测试
//[[[[[924E0C]+1C]+20]+1*4+0BA8]+C]+0*4
MOV EDX,[EAX]
MOV ECX,EAX
CALL [EDX+8]
F1完整代码为
MOV EAX,[924E0C]
MOV EAX,[EAX+1C]
MOV EAX,[EAX+20]
MOV EAX,[EAX+0BAC]
MOV EAX,[EAX+0C]
MOV EAX,[EAX+0] //0 fn = (fn-1)*4
MOV EDX,[EAX]
MOV ECX,EAX
CALL [EDX+8]
//F1数组+基本CALL
下面这个CALL不是的
////
MOV EDI,[924E0C]
MOV EDI,[EDI+1C]
MOV EDI,[EDI+20]
MOV EDI,[EDI+0BAC]
MOV EDI,[EDI+0C]
MOV EDI,[EDI+0]
MOV EAX,[EDI]
PUSH 0
MOV ECX,EDI
CALL [EAX+14]这个CALL也断但测试代码无效
这个CALL下过断后用代码注入 OD也会断 上面 的CALL不会断的