• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

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

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
论坛放出地址搜索器,有些会员问如何在不开游戏的情况下找出我们所需的地址,以前因为懒得分析,所以也没有寻根问题,于是去写了一下.原来竟如何简单.
下面是我分析的思路.希望给初级的写挂着一点帮助.

工具的准备:
16进制分析工具,大名鼎鼎WinHex,可以在下面地址下载到
http://www.ghoffice.com/bbs/read.php?tid-54655.html

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




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

2.特征码,学过汇编的朋友会知道,每一条汇编指令都对应着相应的CPU指令,我们叫他机器码
以打坐为例,下断找打坐的CALL,这个大都应该都会了吧.以下是49版的打坐与停止打坐CALL




分析一下
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进制数值,填入我们要找的值




会搜到如下图:

 


于是我们也知道了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  是在




$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的源码,本论坛就有.我就不贴了.
我把我做的搜索器贴出来,大家可以下载,不过我没有找所有的特征码.
如果大家有兴趣,可以自己把我这个半成品完成的更多一点.



附件: 基址搜索器.rar (必须允许开新窗口) (173 K) 下载次数:79

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
DELPHI组件制作方法发布时间:2022-07-18
下一篇:
delphi替换bmp图片中的颜色发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap