1、本日记写给对外挂有极大兴趣,苦于学习又无从入手的人,由浅入深,循序渐进,本人不是高手,不足之处希望高人多多指教。 废话不多说,我们开始吧 首先,你需要下一个 CE(如果你连 CE 都不知道是什么我实在无语了,可以再百度搜下,下载一个中文版) 武林外传游戏,之所以选择这个游戏是因为他没有 NP 之类的保护,比较容易分析,方便我们用 CE,OD 之类的动态分析工具调试。 好了,游戏我已经打开了,我们把 CE 也打开,点左上角的小电脑,选中武林外传游戏的进程,点打 开 我们已经把进程打开了,然后在 CE 里,数值的后面写 80,(问:为什么要写 80,答:因为我们的血是80,问:为什么要搜索血,答:
2、因为血值比较容易找出,问:为什么。答:滚你妈,听我讲完-_-!) 然后点首次扫描 好了搜索出来那么多个,我们去找个怪打下,让血值变动一下,当你开始掉血的时候,在 CE 里点减少的数值,然后选再次扫描。 好了我们扫描之后发现了一个动态会变动的数值,然后我们双击它点击下来图片 10 我们点右键,点查找访问此地址的代码,(注意:有的中文版 CE 不同有可能翻译为查找所有操作此地址的代码) 如果框框里没出地址那我们就点下游戏然后在点 CE 好了出来了 我们记录一下 mov edx,esi+25c esi=0AEED8E0 我们点新扫描,然后选中 HEX,这里一定要选中,因为我们要搜索 ESI 的值是
3、16 进制的 好了,出来了这么多个 我们选第一个吧,双击第一个,点下来,点右键,选 查找访问此地址的代码 出来了很多个哦 这里我说下,EBP 的不能选 mov eax,eax+24 这种的,也不能选,至于为什么我们以后讲 好了我们选第一个就好了 记录下 mov edi,ecx+24 ecx=03036D68 我们来搜索下 ECX 的值,这里的 HEX 一定选中 又出来了这么多个 我们选第一个吧 双击点下来,右键选 查找所有访问此地址的代码 又出来很多个,我们选第一个 记录下 mov eax,edx+1c edx=0097F020 我们来搜索下 EDX 的值,出来了这么多个 我们选第一个吧,重复
4、刚才的操作,双击点下来,右键选 查找所有访问此地址的代码 好,出来了这么多个,我们就选第一个吧 记录下 mov eax,0097b55c 好了这个很像基址哦,我们来搜索一下他吧 扫描之后是 0 个哦,说明他应该是基址了 我们把刚才所记录的汇总一下 mov edx,esi+25c esi=0AEED8E0mov edi,ecx+24 ecx=03036D68 mov eax,edx+1c edx=0097F020 mov eax,0097b55c好了我来说一下,这里esi+25c的 esi 的值=下面的ecx+24,ecx=下面的edx+1c, edx=下面的 0097b55c 则那么 0097
5、b55c+1c+24+25c 我们来试验下 在 CE 里,右边有手动添加地址,我们点他 然后点指针后面的方框,让他出对勾,然后添加两个指针 指针地址添加我们找到的基址 0097b55c 第一個偏移 1c(一级偏移),第二個偏移 24(二级偏移),第三個偏移 25c(血的偏移) 順序不要搞錯哦 好了,我们在下面看到 数值 80 了 我们小退一下刷新一下内存地址 大家可以看到了 第一个地址数值 80 会变成? 而我们添加的那个不会变,最起码在游戏更新之前不会变,因为游戏更新,就有可能变动基址。 话不多说,今天累了,就写到这 未完待續。 上节课大家知道怎样查找血 这节我教大家用遍历工具把其他的人物的
6、数值遍历出来 废话不多说,我们开始 游戏已经开好了,我们今天用到的工具是内存查看器,我一会放到附件里 工具我也打开了 在进程这里选中武林外传的进程 0097b55c+1c+24+25c 上节课的基址,一级基址,二级基址,血偏移 图 1然后我们把上节课的基址添加到里面,然后点加入地址 图 2在开始值那里写入 1C,后面的偏移一定要点上对勾,选中我们刚才添加的基址,然后点加入地址 图 3在开始值那里写入第二个偏移 24,选中刚才添加的 1C,然后点加入地址 图 4我们在开始值里写 0,偏移个数 100,选中刚才添加的 24,点加入地址 出来了很多个 图 5好了我们现在来分析下 ,我们知道血的偏移是
7、 25C,我们来到 25C 的位置 我们可以再说明里添加我们的注释 图 6我们又找到了很多人物属性哦 图 7对比下游戏 图 8金钱也找到了,你们可以建一个小号扔 1 钱,看看这个监视器会不会变动 图 9好了,我们今天这节课到这了,有点累 你们在回去找找,可以找到人物的坐标哦,应该是在上面的, 我想,下节课我教大家把人物的名字找出来 先到这里,掰掰。 大家好,我们又见面了,这节课篇幅很短,但是很有必要掌握。 废话不多说,我们开始进入正题,这节课教大家怎样找出自己的名字 上节课我们已经掌握了一种遍历工具,这节课我们用到另外一种。 工具在附件里下载,或者你们到网上去自己找。 准备好了吗?LETS G
8、O 游戏我已经开好了,我们把工具也打开,把进程也打开 图 1好了,我们把以前找到的基址,一级偏移,二级偏移都添加进去 三级偏移写 0,四级偏移写 0,下面一级遍历循环次数 500,循环递增 4, 递增 3 级偏移。 二级遍历循环 50,循环递增 2,递增 4 级偏移,注意看我的设置 好了,然后点开始遍历 图 2很慢哦,要有耐心,等下吧。 出来了很多个哦 图 3我们这里的设置,点文本型-U,等于,搜索范围:入门学挂。 (注意:这里我的名字是入门学挂,你们是什么名字就写什么就好了) 开始过滤吧。 图 4我们要的名字偏移出来了,是 3AC+0 让我们打开 CE 验证下,手动添加地址,把基址,一级偏移
9、,二级偏移,名字偏移,都写进去,顺序不要错。 图 5点完确定之后,我们发现这个数值是一个整数,不要急,我们还没有转换成文本型。 在 CE 下面类型里双击,选择文本,后面的 UNICODE 要选中哦 点完确定之后 图 6哈哈,我们可以小退,重新建一个人物,在上,也是能显示出来的哦 这节课就到这,谢谢大家。 大家好,我们又见面了,这几天有人说我的不是原创, 我解释一下啊,我这里面所用到的工具不是原创,但是我发的这种 图文并茂的教程是原创的,我的目的就是为了让那些迷惑不解,徘徊在门外的 零基础初学者指一条路,如果大家觉得不好,我以后也就不做了,我水平也有限,其实比较菜了。 废话不多说,进入正题。 今
10、天我教大家,怎样把以前学到的游戏数据,在易语言中读取出来。 这里,我用到了外挂作坊的模块,这个模块是收费的,而且比较贵, 初学者的话不用买,可以在外挂作坊的论坛注册一个 ID 然后登陆他的论坛, 下载它的模块,可以调试,但是不能编译出来,我们初学,只需要调试就够了 如果你们非常感兴趣,也可以购买。 易语言的话 在百度搜索有破解版下载,我用的是外挂海的破解版。 首先打开易语言,选择 Windows 窗口程序,点确定 图 1好了窗体开好了 图 2在窗体上添加三个标签,一个时钟,在右边的基本组件里可以找到这个“字” ,还有时钟 图 3图 4我已经添加好了哦,从上到下三个标签分别是标签 1,标签 2,
11、标签 3 图 5我们双击窗体,进入代码编辑区 我们在窗口程序集 1 下面添加几个变量 图 6在启动窗口下面写代码 图 7我解释一下这几句代码 第一句,窗口句柄 取窗体句柄 (“”, “element client”) 我们想读取游戏数据的内存,首先要知道是哪个窗口,要知道这个窗口的句柄, 新人会问,什么是句柄,这个比较抽象,我的感觉,这个句柄好比是门的手柄, 你知道了这个门的手柄,你才能推门进入,然后你才能看见东西。 这里“窗口句柄” ,是我们设置的变量,所谓变量,学过初中数学的人应该知道方程式,设 X,Y。明白了吧。因为窗口句柄不是一个固定的数值,并且是唯一的, 所以我们先要搞到他。 “=”
12、后面的,“取窗体句柄”是外挂作坊的模块里封装的一个子程序,这个子程序让我们取得我们想要窗体的句柄。 这个“取窗体句柄”里面有 2 个参数,这两个参数第一个是 窗口的类名,第二个是窗口的标题,一般情况下,写窗口的标题就可以了。 这就好比,你想要吃面条,必须要有筷子,和碗。这个“筷子” 就好比是类名,这个 “碗”,好比是窗口的标题。 这样,我们就能“吃”到“ 窗口句柄” 了 武林外传的窗口标题见下图。 有的游戏,可能你不知道窗口标题,或者你看不到,这里我们就借助工具了。见附件。 图 8窗口句柄我们已经找出来了,然后我们用这个窗口句柄找到进程 ID 第二句,进程 ID 取窗口进程 ID (窗口句柄)
13、 要知道,我们想获得这个窗口进程 ID ,就要我们刚才找到的窗口句柄 这里的“取窗口进程 ID”,也是模块里的一个子程序。 实际上,这些子程序,就是把 API 函数封装起来,在写外挂时,直接调用这些子程序,方便。 在末尾,我会把相关调用的 API 函数给大家写出来。 第三句,进程句柄=进程_ 打开进程(进程 ID) 这是最后一步了,想要打开游戏进程,就要知道进程 ID,我们已经在第二句的代码获取到了进程的 ID,直接调用就可以啦。 最后我们获取了这个游戏的进程句柄,这非常关键,有了他我们就可以开始读写内存了。 我们回到窗口控件界面,单击这个时钟,在左边会出现这个时钟的很多属性, 我们只需要修改
14、一个,就是“时钟周期 ”,这里我们设置成 500,单位是毫秒 也就是 0.5 秒, 图 9然后我们双击窗体上的时钟,再次进入代码编辑区 好了,我们出现了一个子程序名,_时钟 1_周期时间 在这个程序下的代码,都会每隔 500 毫秒刷新一次。 我们开始写代码。 首先我们先加入一个判断。 图 10这个判断,是判断游戏有没有开启,并且进程有没有成功打开。如果没有开启, 进程句柄会返回为 0,当为 0 时,那么就是没有开启游戏了。(好啰嗦) 为了读取游戏内存,我们还要添加几个变量。 基址,一级基址,二级基址。方便我们保存这些数据。 图 12我们开始读取游戏内存,先吧基址读出来,代码我已经写好了。 图 11