《巨人》打开npc对话框call(含npc数组分析)简易教程
不能算是教程,因为时间仓促,没详细写。希望对大家有帮助。1、下bp send断点,断下后按alt+k,复制整个列表如下:
调用堆栈: 主线程
地址 堆栈 函数过程 调用来自
0012F86C00544E67 包含WS2_32.send HugemanC.00544E65
0012F890 00544EAF HugemanC.00544E40 HugemanC.00544EAA
0012F89C 0057DEE7 包含HugemanC.00544EAF HugemanC.0057DEE5
0012FA10 0057D132 ? HugemanC.0057DCC0 HugemanC.0057D12D
0012FA1C 0057D86D 包含HugemanC.0057D132 HugemanC.0057D86B
0012FA28 0077B5B9 HugemanC.0057D820 HugemanC.0077B5B4
0012FA58 0077BC46 ? HugemanC.0077B410 HugemanC.0077BC41
0012FA98 007750D5 ? HugemanC.0077B8F0 HugemanC.007750D0
2、007750D5最后一个成功打开NPC对话框
代码分析
(1)007750CDPUSH EBP
EBP=0A591CC8,db EBP发现里面有npc的名字。EBp为npc对象地址。需要找出NPC数组
(2)007750CEMOV ECX,EBX
EBX =03FF1008,db EBX发现里面有当前玩家的名字。EBX为玩家对象地址。
玩家对象地址为=03FF1008
(3)007749F0 E8 2B680000 CALL HugemanC.0077B220
3、找npc数组:
(1)db EBP
(2)在偏移+20及NPC名字处下硬件访问断点。来到NPC数组处。
NPC数组简单分析
MOV ECX,DWORD PTR DS:
;NPC数组DS:=0B252FF8 DS:=0B164328 [+1c]
需要找ESI =0199D268 04C05AC8的来源
ADD ECX,1C ;ecx=ecx+1cECX=0B258650
CMP DWORD PTR DS:,10 ; DS:= 0F 或1F[+1c]+ n*4]+34JB SHORT HugemanC.007461C6
MOV ECX,DWORD PTR DS: ;DS:=04BE9728
JMP SHORT HugemanC.007461C9
ADD ECX,4 ;ECX=0B25866C
MOV EDX,EBP ;EBP=0099BA54 (HugemanC.0099BA54)
JMP SHORT HugemanC.007461D0
LEA ECX,DWORD PTR DS:
MOV BL,BYTE PTR DS:
CMP BL,BYTE PTR DS:
JNZ SHORT HugemanC.007461F0
TEST BL,BL
JE SHORT HugemanC.007461EC
MOV BL,BYTE PTR DS:
CMP BL,BYTE PTR DS:
JNZ SHORT HugemanC.007461F0
ADD ECX,2
ADD EDX,2
TEST BL,BL
JNZ SHORT HugemanC.007461D0
XOR ECX,ECX
JMP SHORT HugemanC.007461F5
SBB ECX,ECX
SBB ECX,-1
TEST ECX,ECX
JE SHORT HugemanC.00746207
ADD ESI,4 ;递增4[+1c]+n*4
CMP ESI,EDI
JNZ SHORT HugemanC.007461B6
用ce找数组第一句esi的来源
查找访问此地址的代码,再选中某个NPC
0065a08e - mov ecx,
EDX=01F31E08
Probable base pointer =01F31E08
再搜01F31E08
找到=[+1c]
4、附人物和NPC部分属性的偏移
+21名称
+3cx坐标
+40y坐标
[[+1c]+n*4]
+20名称
+3cx坐标
+40y坐标
楼主 有想法 不错,感谢无私和分享精神! 没啥说的先顶在下!!!!!!!!!! 谢谢楼主分享/。 帮你顶下哈!! 没啥说的先顶在下!!!!!!!!!! 这个论谈是不是刚新开啊,感觉贴子都很有质量呀,希望越办越好 希望多一些分析帖子 纯粹路过,没任何兴趣,仅仅是看在老用户份上回复一下
页:
[1]
2