|
|
| | 网站首页 | 初级教材 | 中级教程 | 高级教程 | 模块文档1.8 | 资源下载 | 外挂海论坛 | 加入外挂作坊 | | ||
|
||
|
|||||
|
|
|||||
| 04-内存定位 | |||||
|
本节将是内存定位的最后一节教材了,同时也对第三节的一些内容进行更正与补充 在本章的第一节起,就提到了原外挂作坊模块中的 内存搜索() 区域内存搜索() 这两个功能进行了合并.并且上面也给出了合并后的 内存搜索() 参数结构,但在写第三节的教材时,发生了一个新的问题,我在外挂作坊1.8第四版改动了模块里的内存搜索功能.所以,原外挂作坊的1.8第三版编译第三节的例子源代码出来的程序,将无法正确定位第三节的那个测程程序.exe
改动后的外挂作坊第四版 内存搜索() 参数见下
看上面的参数结构,第四版模块相对于第三版模块多出了一个 虚拟保护 这个参数.有关这个虚拟保护的一些说明可参考第四章第三节的内存读写与本章的第一节都分别有提到过.
前面第一节曾介绍说,使用这个虚拟内存的保护属性来进行判断,可以跳过一些不需要的数据段,这样找我们要的数据就快很多.在第三节的例里子,那个数据结构中关健的游戏帐号所在的虚拟内存保护属性是 64 ,而之前的模块里的内存搜索只搜保护属性为 4 的内存段.所以才会造成第三版模块编那个例子出来定位无效. 为此,第四版模块公开了这个 虚拟保护 的参数,用户可以自已指定要搜索的数据所在的那段内存的保护属性了. 在第三节的例子里的原这条搜游戏帐号的代码改成如下形式即可. 内存搜索 (进程ID, 65536, 0, 到字节集 (“外挂作坊”), 64, 父级地址, 2)
点击下载修改过的第三节例子 修改过的例子与原三版的例子在定位时的速度快了N多.
下面开始本节的重点内容 前面的第二三节都是介绍通过游戏帐号这个不变的数据做为关健数据,查找这个关健数据再进行定位那些其它的会非固定值数据所在的内存位置。假如我们没有像前面那种游戏帐号的情况下时,要去定位的数据全部都是会变化的,失去了可用的关健数据时如何去定位呢?这就是本节要讨论的并且需要去解决的一个问题。
本节例子包里的测试程序的数据类型结构如下
看上面的结构与第二三节教材里的已经不同了,没有像帐号与人物名称这类的固定不变的值。 本节的教材仍然是内存定位这个技术,面对像上面的这种没有固定的值可去定位时,不得不另找其它的数据来做关健数据再进行定位了。
我们假设,在程序运行时,上面的这个结构动态分配在内存里,但在内存的另一处可能会有另外的数据始终与它有着某种神秘的联系,比如那个数据正好与这个结构在内存里的距离始终保持一致,不管你是重启了电脑,或换另一种操作系统下,那段数据一直与他保持着这种不离不弃的距离,并且,那段数据的值是固定不变的,就像游戏帐号的那般,在游戏运行过程中一直不变,最好那段数据在游戏整个内存空间里都是唯一的,不会有第二个数据出现在另一处的最佳. 我们这里要做的就是,找出这段与我们要定位的数据类型结构始尽保持一定距离的数据,之后就可以用内存搜索找到这个数据的内存地址,再加上他与这个数据结构的距离不就可以达到我们要定位的目的。 上面说了一大堆,原理也基本上已清析了,就是找一段与这个结构有这种缘份的数据做为关健数据,通过先找到它再+偏移量得到最终的这个数据结构的内存地址,只要有了这个跳板一切万事大吉。
下面再介绍该如何去找到那段比较有缘份的数据了。这里我给大家编了个简单的软件,可以用来辅助分析用,找出可用的关健数据。
这是本节所用的测试程序,为了方便大家学习分析后面有提示了这个内存结构所在的内存地址。 然后我们对这个结构的起始地址 1361392 处开始向上或向下读取一定量的内存数据保存下来,我们称这个过程为内存数据采样。
上图提示了,在采样数据时应该在多系统下进行采样,因为这样采样来的数据分析出来的关健数据适合跨平台使用。
上图是对采样的数据进行分析后的结果,这次我只得到一处,呵呵,当然啦,别以为得到的越多才是好事,事实上我们只需要一两个好用的关健数据即可,上面的还给出了数据的长度与偏移量。不错吧!想要更多更好的游戏分析工具快加入外挂作坊吧!广告了一下。 有了一个可用的数据时,下面就该进行代码的编写进行实际操作验证的时候了。
这个是本节例子里的内存定位程序最终执行效果图。下面是两个重要的代码片段分析
上面的代码大致流程就是,先搜到那个 { 0, 0, 0, 3, 0 } 的数据,事实上内存里有这个数据的到处都是。然后进行判断以排除掉那些不需要的地址 下面的排除方法是根据测程程序这个数据类型中的数据值不大于某值并且不小去另一个值进行判断,凡是不符合这些要求的一律排除掉。 事实上如果你的游戏你分析出来了多处关健内存数据的话,那是好事,你可以在这里同时使用多个关健数据进行更加精确的排除。 当遇到符合所有要求的内存地址时,就可以启动时钟去读取这处内存中的值了。
时钟里的代码就是这么简单,重点是在上面的定位功能只要不出错,这里一切都会如意的。。
现在让我们来回忆一下本节的几大要领, 首先你使用别的内存分析软件得到游戏中血的地址,看准了要哪个地址,然后使用上面的工具进行数据采样,采样时要尽量长点。完成后,换另一个不同的操作系统再次去取那个血的地址再次采样。接着又是换操作系统重复上面的方式(靠,看来得来个windows全家福了。)当有采样了好几份数据后就可以进行比较分析了,在分析出有结果时就可以编写代码进行实际验证。外挂代码里一定要做好对那些不需要的内存进行进行排除,若没做好这关的话,定位到别的内存了就麻烦了。
一切完成后别忘了到各种操作系统上多试试。确实都无误才可以发布外挂出去。
注意,本节的例子可能在有些操作系统里不能成功定位,我上面的五份采样的内存数据有三份是在会员的系统里采来的,但大家所用的都是在XP.sp2操作系统,还未验证过2000与2003系统是否无误。
到了本节时,如果你能够完全理解了内存定位这个概念,并且能灵活应用了的时候,相信游戏中有80%的动态内存都能被你搞定。另外的20%可就难点,需要动用汇编修改游戏中的指令代码,将在本章下半部份会有介绍的。
|
|||||
| 文章录入:admin 责任编辑:admin | |||||
| 【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 | |||||
|
|||||||||||
| | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 网站公告 | 管理登录 | | |||
|