注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

风雨夜归人

专业收集资料,个人爱好!

 
 
 

日志

 
 

地址搜索器工作原理分析与源码(delphi)   

2009-03-06 20:41:20|  分类: 外挂学习 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

论坛放出地址搜索器,有些会员问如何在不开游戏的情况下找出我们所需的地址,以前因为懒得分析,所以也没有寻根问题,于是去写了一下.原来竟如何简单.

下面是我分析的思路.希望给初级的写挂着一点帮助.

工具的准备:

16进制分析工具,大名鼎鼎WinHex,可以在下面地址下载到

http://www.fyw6.cn/thread-1962-1-1.html

1.用WinHex打开elementclient.exe,可以看到下面的结果

地址搜索器工作原理分析与源码(delphi)  - 白云飘飘 - 白云飘飘的博客

观察了一下,自然看不懂.

2.特征码,学过汇编的朋友会知道,每一条汇编指令都对应着相应的CPU指令,我们叫他机器码

以打坐为例,下断找打坐的CALL,这个大都应该都会了吧.以下是49版的打坐与停止打坐CALL

地址搜索器工作原理分析与源码(delphi)  - 白云飘飘 - 白云飘飘的博客

分析一下

0045960E    8A4424 04      mov    al, byte ptr [esp+4]

00459612    84C0            test    al, al

00459614    74 0A          je      short 00459620

00459616    E8 45611800    call    005DF760              //CALL指令,下次更新就会改变.

0045961B    B0 01          mov    al, 1

0045961D    C2 0400        retn    4

00459620    E8 7B611800    call    005DF7A0              //CALL指令,下次更新就会改变.

00459625    B0 01          mov    al, 1

00459627    C2 0400        retn    4

0045962A    90              nop

0045962B    90              nop

0045962C    90              nop

0045962D    90              nop

0045962E    90              nop

0045962F    90              nop

00459630    A1 40DA9800    mov    eax, dword ptr [98DA40]

那我们怎么来确定要选用哪条指令的机器码呢?

00459616    E8 45611800    call    005DF760          这两样CALL是会改变的,也是我们要找的,所以不可能将它作为特征码来寻找.

0045961B    B0 01          mov    al, 1                              //这条句语雷同的很多

0045961D    C2 0400        retn    4                                  这两条雷同性太多.又太短.

于是我们选择下面的几行.

00459625    B0 01          mov    al, 1

00459627    C2 0400        retn    4

0045962A    90              nop

0045962B    90              nop

0045962C    90              nop

0045962D    90              nop

0045962E    90              nop

0045962F    90              nop

00459630    A1 40DA9800    mov    eax, dword ptr [98DA40]

假设这一段在每次更新时,都不会改变,好,将机器码按顺序取出.如下

B0 01 C2 0400    90 90 90 90 90 90  A1  40DA9800 最后一个地址省去,因为下次会改变.

3.寻找这段机器码在elementclient.exe的位置.WinHex工具栏---搜索----查找16进制数值,填入我们要找的值

地址搜索器工作原理分析与源码(delphi)  - 白云飘飘 - 白云飘飘的博客

会搜到如下图:

  

地址搜索器工作原理分析与源码(delphi)  - 白云飘飘 - 白云飘飘的博客

于是我们也知道了EXE里存放的机器指令,都对应着一条条的汇编指令.呵呵,也就是我们编译后的能让CPU执行的指令.^_^

4.下面就是我们如何取出CALL地址了.

00459616    E8 45611800    call    005DF760

E8=CALL

45611800 =005DF760

这是机器识别的,为什么45611800 =005DF760 ??

对,看这条指令的在winHex的偏移.

如前面的图,我们可以知道B0 01 C2 0400    90 90 90 90 90 90  A1  是在

地址搜索器工作原理分析与源码(delphi)  - 白云飘飘 - 白云飘飘的博客

$59625这个地址,实际地址我们得从EXE文件的起始地址开始算.为什么每个EXE的起始地址为$400000,所以elementclient.exe+$59625=$400000+$59625=$459625  而这个地址就是

00459625    B0 01          mov    al, 1 的起始地址.

那么00459620    E8 7B611800    call    005DF7A0  这里的005DF7A0 是如何得到的呢?

算一下差值:005DF7A0  - 459625  =18617B 这个值,不就是

E8 7B611800  中的值吗?

原来,E8 7B611800这条指令所变成汇编语句的CALL地址,是该地址在EXE的偏移值+7B611800而得到,那说明7B611800本就是一个偏移值,回忆了一下上学时老师曾经讲过,所有的函数,一经编译,都不会存在函数名,一切都只是地址.那么我们就可以清楚的知道,原来这个7B611800就是一个函数,函数的入口地址就是本条指令的地址加上这个偏移值而得.哈哈.你也可以理解成这个函数其实在内存中就是放在这条指令偏移7B611800的地址.CALL 005DF7A0  这个地址,就是由此而来.

基本上,分析到这里,我们就可以写出代码来实现读取CALL地址的函数了.

总结一下,其实不开游戏找CALL地址比较容易.第一,下断找到CALL地址,然后分析哪此指令是不会常变,而且最好是唯一的.

再则写代码开始搜过文件.

delphi的源码,本论坛就有.我就不贴了.

我把我做的搜索器贴出来,大家可以下载,不过我没有找所有的特征码.

如果大家有兴趣,可以自己把我这个半成品完成的更多一点.

地址搜索器工作原理分析与源码(delphi)  - 白云飘飘 - 白云飘飘的博客

  评论这张
 
阅读(479)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018