天龙查找人物状态及遇到的问题
本人菜鸟一枚,最近学着分析做 ,其中查找人物状态的时候遇到了些问题,求大神给点帮助~。。。下面简单写下我的查找顺序~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~分割线~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~1.利用CE查找人物当前的状态名,最终确定一个地址63FE33FB 于是在OD里进行断点 然后断到了这里。
005EA1BD|.E8 2EE01F00 CALL Game.007E81F0 ;人物状态入口
005EA1C2|.8BF8 MOV EDI,EAX
005EA1C4|.85FF TEST EDI,EDI
005EA1C6|.0F84 AB000000 JE Game.005EA277
005EA1CC|.8B57 40 MOV EDX,DWORD PTR DS:
005EA1XF|.8BC2 MOV EAX,EDX
005EA1D1|.53 PUSH EBX
005EA1D2|.8D58 01 LEA EBX,DWORD PTR DS:
005EA1D5|>8A08 /MOV CL,BYTE PTR DS:
005EA1D7|.40 |INC EAX
005EA1D8|.84C9 |TEST CL,CL
005EA1DA|.^ 75 F9 \JNZ SHORT Game.005EA1D5
此时得出当前状态的值为:
2.进入005EA1BD内部
007E81F0 $8B49 04 MOV ECX,DWORD PTR DS:
007E81F3 .8B01 MOV EAX,DWORD PTR DS:
007E81F5 .FF20 JMP DWORD PTR DS: ;6D9D5DA0
跳转到了这里
007C6150 .51 PUSH ECX ;人物状态入口
007C6151 .56 PUSH ESI
007C6152 .8BF1 MOV ESI,ECX
007C6154 .8D4424 0C LEA EAX,DWORD PTR SS:
007C6158 .50 PUSH EAX
007C6159 .8D4C24 08 LEA ECX,DWORD PTR SS:
007C615D .51 PUSH ECX
007C615E .8D4E 38 LEA ECX,DWORD PTR DS:
007C6161 .E8 0AFXFFFF CALL Game.007C5D70 ;ecx=6D9D5DD8
007C6166 .8B4E 40 MOV ECX,DWORD PTR DS:
007C6169 .8B4424 04 MOV EAX,DWORD PTR SS: ;64AFC710,64AFC1F0
007C616D .3BC1 CMP EAX,ECX
007C616F .5E POP ESI
007C6170 .75 06 JNZ SHORT Game.007C6178 ;1
007C6172 .33C0 XOR EAX,EAX
007C6174 .59 POP ECX
007C6175 .C2 0400 RETN 4
007C6178 >8B40 0C MOV EAX,DWORD PTR DS: ;这里返回EAX的值
007C617B .59 POP ECX
007C617C .C2 0400 RETN 4
此时EAX=, esp+4 这个数据从哪里找? 我没有搞明白,跟进007C6161发现 其值与 那里是一样的 也不知道我有没有找错~
下面是007C6161的内部
007C5D70/$51 PUSH ECX ;人物状态入口
007C5D71|.8B4424 0C MOV EAX,DWORD PTR SS: ;这个是最困扰我的 不知从何入手
007C5D75|.8B51 20 MOV EDX,DWORD PTR DS:
007C5D78|.56 PUSH ESI
007C5D79|.8B30 MOV ESI,DWORD PTR DS:
007C5D7B|.8BC6 MOV EAX,ESI ;mov eax,
007C5D7D|.35 EFBEADDE XOR EAX,DEADBEEF
007C5D82|.57 PUSH EDI
007C5D83|.8B79 24 MOV EDI,DWORD PTR DS:
007C5D86|.23C2 AND EAX,EDX ;EDX也是需要ECX
007C5D88|.3BF8 CMP EDI,EAX ;这里要找EDI与EAX比较,即找ECX
007C5D8A|.77 09 JA SHORT Game.007C5D95 ;1
007C5D8C|.D1EA SHR EDX,1
007C5D8E|.83XF FF OR EDI,FFFFFFFF
007C5D91|.2BFA SUB EDI,EDX
007C5D93|.03C7 ADD EAX,EDI
007C5D95|>8B51 14 MOV EDX,DWORD PTR DS: ;目前找到这里:[[[+EAX*4] + 0C] + 40]
007C5D98|.8B7C82 04 MOV EDI,DWORD PTR DS: ;zhuangtai
007C5D9C|.8D1482 LEA EDX,DWORD PTR DS:
007C5D9F|.8B02 MOV EAX,DWORD PTR DS: ;发现与的值是一样的
007C5DA1|.3BC7 CMP EAX,EDI
007C5DA3|.894424 14 MOV DWORD PTR SS:,EAX
007C5DA7|.74 16 JE SHORT Game.007C5DBF ;0
007C5DA9|.8BD7 MOV EDX,EDI
007C5DAB|.EB 03 JMP SHORT Game.007C5DB0
007C5DAD| 8D49 00 LEA ECX,DWORD PTR DS:
007C5DB0|>3970 08 /CMP DWORD PTR DS:,ESI
007C5DB3|.7D 19 |JGE SHORT Game.007C5DCE ;1
007C5DB5|.8B00 |MOV EAX,DWORD PTR DS:
007C5DB7|.3BC2 |CMP EAX,EDX
007C5DB9|.^ 75 F5 \JNZ SHORT Game.007C5DB0
007C5DBB|.894424 14 MOV DWORD PTR SS:,EAX
007C5DBF|>8B51 08 MOV EDX,DWORD PTR DS:
007C5DC2|.8B4424 10 MOV EAX,DWORD PTR SS:
007C5DC6|.5F POP EDI
007C5DC7|.8910 MOV DWORD PTR DS:,EDX
007C5DC9|.5E POP ESI
007C5DCA|.59 POP ECX
007C5DCB|.C2 0800 RETN 8
007C5DCE|>3B70 08 CMP ESI,DWORD PTR DS: ;here
007C5DD1|.894424 14 MOV DWORD PTR SS:,EAX
007C5DD5|.7D 19 JGE SHORT Game.007C5DF0 ;1
007C5DD7|.8B41 08 MOV EAX,DWORD PTR DS:
007C5DDA|.894424 08 MOV DWORD PTR SS:,EAX
007C5DDE|.8D4424 08 LEA EAX,DWORD PTR SS:
007C5DE2|.8B08 MOV ECX,DWORD PTR DS:
007C5DE4|.8B4424 10 MOV EAX,DWORD PTR SS:
007C5DE8|.5F POP EDI
007C5DE9|.8908 MOV DWORD PTR DS:,ECX
007C5DEB|.5E POP ESI
007C5DEC|.59 POP ECX
007C5DED|.C2 0800 RETN 8
007C5DF0|>8D4424 14 LEA EAX,DWORD PTR SS: ;here
007C5DF4|.8B08 MOV ECX,DWORD PTR DS:
007C5DF6|.8B4424 10 MOV EAX,DWORD PTR SS:
007C5DFA|.5F POP EDI
007C5DFB|.8908 MOV DWORD PTR DS:,ECX
007C5DFD|.5E POP ESI
007C5DFE|.59 POP ECX
007C5DFF\.C2 0800 RETN 8
找ECX的数据很简单
ECX= [ + 4] + 38
但是EAX要从何入手呢?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~分割线~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
下面是我自己瞎猜的EAX的找法。。。。最后我是没有找出来。。。。
返回上一级调用
007C6150 .51 PUSH ECX ;人物状态入口
007C6151 .56 PUSH ESI
007C6152 .8BF1 MOV ESI,ECX
007C6154 .8D4424 0C LEA EAX,DWORD PTR SS: ;
007C6158 .50 PUSH EAX
007C6159 .8D4C24 08 LEA ECX,DWORD PTR SS:
007C615D .51 PUSH ECX
007C615E .8D4E 38 LEA ECX,DWORD PTR DS:
007C6161 .E8 0AFXFFFF CALL Game.007C5D70 ;ecx=6D9D5DD8
007C6166 .8B4E 40 MOV ECX,DWORD PTR DS:
007C6169 .8B4424 04 MOV EAX,DWORD PTR SS: ;64AFC710,64AFC1F0
007C616D .3BC1 CMP EAX,ECX
发现上一级有一个 然后继续往上找?
跟入第二个call 这个是很长的片段
发现 eax 与 是一样的于是找ESI的来源
找到这里感觉很近了 听大神说 是上一个Call最后一个push的值 于是来到上一个Call 看下最后push的是什么
发现压入的是ESI 于是找ESI的来源
这次跟上面是一样的 ,继续往上找
这次压入的是EDI
继续往上跟
到这发现错了。。。。除了打坐状态会断外 其它都断不下。。。。。。。。是上面哪一步找错了吗?
给楼主打气 加加油!继续 刘润东 发表于 2015-11-27 21:36
给楼主打气 加加油!继续
{:sad:}再找找看,我跟buff数量跟出来并没有什么用。。。~ 给楼主打气 加加油!继续 难得给力的好帖子,顶楼主。 打酱油的啦,飘过赚点海币而已。 感谢楼主,支持楼主-支持 海。 谢谢分享,好贴! 论坛里面有这种教程的 淡定一下吧,不要太鸡冻呵,要淡定!
页:
[1]
2