悬念 发表于 2014-5-24 10:52:44

《巨人》打开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坐标




robot 发表于 2014-7-1 15:51:16

楼主 有想法

|自然ォ美| 发表于 2014-7-12 14:06:09

不错,感谢无私和分享精神!

凌亦然 发表于 2014-7-14 08:48:49

没啥说的先顶在下!!!!!!!!!!

红颜祸水ing 发表于 2014-7-15 12:38:55

谢谢楼主分享/。

烟誮濄后… 发表于 2014-7-17 05:06:41

帮你顶下哈!!

Fovever 发表于 2014-7-18 10:48:46

没啥说的先顶在下!!!!!!!!!!

miaozss 发表于 2014-7-20 20:44:26

这个论谈是不是刚新开啊,感觉贴子都很有质量呀,希望越办越好

Two-Bear 发表于 2014-12-7 00:25:21

希望多一些分析帖子

╰堕落的青春 发表于 2014-12-29 05:15:58

纯粹路过,没任何兴趣,仅仅是看在老用户份上回复一下
页: [1] 2
查看完整版本: 《巨人》打开npc对话框call(含npc数组分析)简易教程