RXJH_我的信息
1、
我找到的 存放选中怪ID的基址有3个...:
Client.exe+2E20B54 ==> 0x400000 + 0x2E20B54 ==> 0x3220B54
Client.exe+2E257C4 ==> 0x400000 + 0x2E257C4 ==> 0x32257C4
Client.exe+4236EB0 ==> 0x400000 + 0x4236EB0 ==> 0x4636EB0
得到当前选中怪对象在数组中的序号的计算方式,也就有3个:(数组序号 计算方式)
[[0x3220B54]+0x014e4]
[[0x32257C4]+0x014e4]
[[0x4636EB0]+0x014e4]
[0x3220B58 + 数组序号*4] --> 某一个类型的对象
2、怪物对象:
+0x320 ==> 怪物名字(ANSI)
+0x31c ==> 怪物与玩家的距离
+0x5B8 ==> 怪物等级
3、选中怪,并显示血值
对 地址[0x3220B54]+0x014e4 下断(内存写入),选怪时 断在这里(干别的事情都不会断下):
004FE8DA . /EB 55 JMP SHORT Client.004FE931 // ZC: 上面判断,跳走
004FE8DC > |8B06 MOV EAX,DWORD PTR DS:[ESI]
004FE8DE . |8B50 04 MOV EDX,DWORD PTR DS:[EAX+0x4]
004FE8E1 . |6A 01 PUSH 0x1
004FE8E3 . |68 50040000 PUSH 0x450
004FE8E8 . |8BCE MOV ECX,ESI // ZC: 猜测,此时 ESI里面方式的是 人物对象地址
004FE8EA . |FFD2 CALL EDX
004FE8EC > |8B46 0C MOV EAX,DWORD PTR DS:[ESI+0xC]
004FE8EF . |8B0D 540B2203 MOV ECX,DWORD PTR DS:[0x3220B54]
004FE8F5 . |8981 E4140000 MOV DWORD PTR DS:[ECX+0x14E4],EAX // ZC: 断在这里
004FE8FB . |EB 34 JMP SHORT Client.004FE931
004FE8FD > |C785 74D4FFFF>MOV DWORD PTR SS:[EBP-0x2B8C],0xFFFF
004FE907 . |3987 381D0000 CMP DWORD PTR DS:[EDI+0x1D38],EAX
004FE90D . |74 0F JE SHORT Client.004FE91E
004FE90F . |83BF 00150000>CMP DWORD PTR DS:[EDI+0x1500],0x1
004FE916 . |74 06 JE SHORT Client.004FE91E
004FE918 . |8987 00150000 MOV DWORD PTR DS:[EDI+0x1500],EAX
004FE91E > |8B15 00E6F900 MOV EDX,DWORD PTR DS:[0xF9E600]
004FE924 . |8B82 98020000 MOV EAX,DWORD PTR DS:[EDX+0x298]
004FE92A . |C680 28020000>MOV BYTE PTR DS:[EAX+0x228],0x0
004FE931 > \803D E7D6FB02>CMP BYTE PTR DS:[0x2FBD6E7],0x0
004FE938 . 8BB5 74D4FFFF MOV ESI,DWORD PTR SS:[EBP-0x2B8C]
004FE93E . 74 06 JE SHORT Client.004FE946
004FE940 . 89B5 A8FEFFFF MOV DWORD PTR SS:[EBP-0x158],ESI
004FE946 > 81FE FFFF0000 CMP ESI,0xFFFF // ZC: 判断是否是未选中怪
004FE94C . 74 47 JE SHORT Client.004FE995 // ZC: 跳走
ZC: 用CE查找 0x300360E0,找到两个 绿色基址:
(1)、Client.exe+0x2E25960 ==> 0x3225960
(2)、Client.exe+0x4236EBC ==> 0x4636EBC
游戏重选角色,验证一下,应该是对的。(不管是不是 人物的基址,反正是一个基址,找到基址 就好弄多了)
4、
5、
6、
7、