CE+X64dbg外挂制作教程 [提高篇]
人造指针&基址
实验目标:通过向游戏注入一段特殊汇编代码,实现自动获取动态地址.省略找基址的麻烦
为什么会出现人造指针 ?
1.基址偏移层数太多,很难找
2.有些游戏根本找不到基址
人造指针有什么优缺点?
1.人造指针就算游戏更新也无需去重复找基址
2.缺点是,需要注入代码,获取钩子
1.打开并附加游戏进程,老样子找到阳光的动态地址,这里我们不去找基址,而是人造一个基址
选择mov eax,[esi+00005560]这一行
显示反汇编程序,选择工具->自动汇编
选择模板->点击CT表框架代码
选择模板->代码注入->点击确定按钮
写入以下汇编代码,意思是取出动态地址,赋值给指定内存地址,这个内存地址先空着
上面窗口不要关闭->在内存浏览器->选择视图->内存区域
在下面找出具有读写权限的空地址,并且属于映像的,(这里不要选择系统领空的资源,注入错了会完犊子的)双击会跳转到指定区域
我们记下这个地址
返回自动汇编框架,然后单击文件->分配到当前的CT表
填入刚才的人造基址 00722000
此时,修改人造基址就等于修改了游戏的参数
注释:alloc(00722000,4)函数(4表示/4字节)可以将一个只读地址转换成可读写地址,一般情况下用不到!
拓展:特征码Hook一个内部Call
CE+X64dbg寻找本地Call
实验目标:通过遍历阳光产生的时间,寻找阳光产生的本地Call,使用代码注入器注入,自定义生成阳光
阳光遍历技巧:
进入植物大战僵尸-> 当出现阳光后->马上搜索未知初始数值
返回游戏-> 马上切回CE-> 搜索减少的数值 -> 掉一点搜一点
最后排查出它的掉落地址-> 锁定1即可实现无限掉落
首先你要经过上面的步骤找到这个动态地址,锁定1后出现如下效果说明成功
在指定地址上右键 -> 选择 -> 找出是什么访问了这个地址
当出现阳光后,地址栏会多出一条指令,我们记下这条指令,关闭CE即可,CE的历史使命已经结束了
接下来:打开X64dbg调试器,附加植物大战僵尸进程
附加后点击运行,让程序跑起来
使用 ctrl+G输入刚才得到的那个动态地址
此时往上找,有一个跳转指令,我们双击在此处下断点
上图这个跳转控制阳光的生成,可以看到这里有两个call 而且两个call的地址是相同的,我们尽量排除这样的结果,继续往下找
上图可知,在ret之前的最后一个call了,猜测可能是阳光生成的call于是乎,在push上下断点
上图经过不断跟踪确定,只要阳光生成这里就会断下,说明我们断对了
此处我们通过不断跟踪,找出了它的隐藏参数,记下这些隐藏参数,后期注入用
关闭x64dbg,这里选择脱离进程,打开代码注入器附加进程
上图,每次点击注入代码,就会出现一个阳光。此时我们已经找到了,结束,教程完犊子。
特征码定位技术
实验目标:通过遍历找到植物的冷却时间,通过特征码定位指定位置,将指令修改成无冷却状态,从而实现无冷却效果.
特征码一般用在:
1.通杀版本(不同游戏版本的通杀)
2.游戏的更新(一键基址获取器)
3.动态地址的查找(比如网页游戏)
特征码查找:变化尽量比较小的,尽量具有唯一性(在这里还是必须唯一的好,因为如果定位的不准确可能影响修改效果)
特征码匹配规则:
mov [eax+4],ebx 可以(偏移+4较小)
mov [eax+431],ebx 不可以(中间+431偏移太大,不适合作为特征码)
mov [eax+4],10000 不可以(操作数过大)
je 0x321234 可以(注:小跳转可以,但大跳转不能作为特征码)
call 0x0031731C 不可以(一般call是函数调用,由于每次装入地址不确定,所以不能作为特征码)
push 可以
#这里说明一下,像是call 或者大跳转,一般而言我们不能用它作为特征码字段,如果非要作为特征码,当然也可以,只是在某些情况下会出现错误!
无冷却遍历技巧:
打开CE-> 搜索类型选择字节类型-> 在植物亮的状态时搜索1
拿起植物-> 搜0 -> 放下植物搜1 ->拿起植物搜0-> 一直重复-> 地址一般在最后面
首先你要经过上面的步骤找到这个动态地址,锁定1后出现如下效果说明成功
汇编代码分析:
@当我们放下植物后这里会出现这条汇编代码 1代表没有拿起来
0040CDEA - C6 44 08 70 01 - mov byte ptr [eax+ecx+70],01 { 1 }
@当我们拿起来是这里会变成0说明我们拿起来了
00488E73 - C6 45 48 00 - mov byte ptr [ebp+48],00 { 0 }
那么问题来了? 怎样实现无冷却?
答:将拿起来时的00改成01就能实现无冷却了,这里我们通过特征码定位到这段代码然后修改它.
这里要选是什么改写了它
首先我们点击00488E73 - C6 45 48 00 - mov byte ptr [ebp+48],00 { 0 }这条指令,查看反汇编代码,我们提取在它之上的作为特征码
这里选取:83 f8 1c 75 08 6a 1e
点击搜索后发现,能搜索到,只不过是在他之前,没关系我们可以加上偏移数
这里我们83F81C75086A1E这段特征码加上F(也就是十进制的15)就等于我们想要的地址
定位模块已给大家写好,打成模块了,下载地址:https://files-cdn.cnblogs.com/files/LyShark/易语言定位模块.zip
易语言写入以下内容,调用模块
点击注入按钮就会实现技能无冷却的啦啦啦啦
(多级指针)通过动态地址找到基址
实验目标:通过遍历动态地址,找到基址,根据基址+偏移计算出当前动态地址,最后编写一个简单的修改器.
为什么要找基址? 偏移又是什么鬼?
答案:
1.我们通过一些遍历技巧找到了一些动态地址,但下次进入游戏就要重新查找.
2.偏移是汇编语言的一种内存管理方式,其通过地址加偏移的方式构建寻址空间.
查找遍历技巧:
1.查找基址,时尽量查找与 mov 相关的指令
2.应该尽量排除 ebp esp eip 等相关指令
1.采用传统方式查找
打开CE附件游戏进程
按照老方法,找到游戏阳光的动态地址。
在地址列表,右击,找出是什么改写了它
这里说明一下:为什么要找改写不着访问,因为改写我们可以更准且的筛选,后期其他的就可以只用访问啦
指针基址可能是 =18245638
00430A0B - and ecx,32
00430A0E - mov eax,[esi+04]
>>>>>00430A11 - add [eax+00005560],ecx #把ecx也就是获得的阳光数给了eax+5560 这里我们不知道eax的值,所有我们要找到他。
00430A17 - mov ecx,[eax+00005560]
00430A1D - cmp ecx,00002706
这里我们只需要关心:指针基址可能是 =183C2008 和它的偏移地址5560即可
CE这边扫瞄18245638 这个动态地址,会看到很多,一般是前三个,这边如果是连续的地址就不要选择了。
在026EA5A8这里找出是什么访问了这个地址。
这里要说明一下,我们现在要找的是eax是由谁给的,所以我们要尽量找 复制语句,像是 esi cmp 之类的不用考虑
指针基址可能是 =026E9E40
0045B6F9 - call eax
0045B6FB - mov ecx,[esi]
>>>>>0045B6FD - mov eax,[ecx+00000768] #这里可以看到,eax的值是ecx+768给的,这里我们就干他一炮,继续找ecx
0045B703 - test eax,eax
0045B705 - je 0045B710
继续找026E9E40搜索这个地址看看反应。
看到了绿色的,在CE中绿色的就是静态地址啦,说明我们已经找到了。在确认一下
指针基址可能是 =006A9EC0
00467AFE - int 3
00467AFF - int 3
>>>>>00467B00 - mov ecx,[006A9EC0] #这里可以看到,ecx=的值来自于一个静态地址 ,这就是基地址。
00467B06 - mov ecx,[ecx+000007F8]
00467B0C - cmp ecx,14
整理一下思路
首先我们找到阳光的动态地址
ecx的值就是阳光,他把这个数值复制给了eax+5560这个地址我们就得到了阳光 那么,问题来了,eax是多少?
00430A11 - add [eax+00005560],ecx
eax的值来自于ecx+768这个地址,我们这是要搜索ecx地址是谁给的?
0045B6FD - mov eax,[ecx+00000768]
最后得到了006A9EC0这个内存地址,完犊子,结束了!
00467B00 - mov ecx,[006A9EC0]
公式: 006A9EC0+768+5560=动态地址
用CE添加一个指针确认一下,这里读取到了0,说明正确了!它正是我们的阳光!
编写一个简单的辅助
这个是读取阳光的,按钮1被单机,读取阳光值
按钮2被单机,修改阳光值
点击改变阳光,看看
返回游戏看最终结果
2.使用CE的自带工具自动遍历(遍历时间长,慢不推荐使用)
在动态地址上点击 ->指针扫描器
配置相应的参数,最大允许偏移改成20470点击确定等待
开始扫描
结果出来啦有我们的阳光数
3.通过公式手动计算(有些游戏比如CF,只要查找改写地址游戏就崩溃,这时我们就需要手动计算啦)
要从当前地址D,搜索指针Z
我们可以用D - 偏移得到的内存数据
搜索内存数据 得到Z
------------------------------------------------------------------
搜索阳光的动态地址:18664588
00430A11 - 01 88 60550000 - add [eax+00005560],ecx <<
通过动态地址 - 偏移地址 =eax的地址
18664588 - 5560 = 1865F028
------------------------------------------------------------------
继续搜索:1865F028
0045B6FD - 8B 81 68070000 - mov eax,[ecx+00000768] <<
通过动态地址 - 偏移地址 =eax的地址
025B9E18 - 768 = 025B9E18
------------------------------------------------------------------
基址(绿了说明到头了):025B9E18
PlantsVsZombies.exe+2A9EC0
------------------------------------------------------------------
总结:
025B9E18 + 768 + 5560 = 阳光
------------------------------------------------------------------
写教程不容易,转载请加出处!谢谢
CE+X64dbg外挂制作教程 [提高篇]的更多相关文章
- CE修改器使用教程 [基础篇]
Cheat Engine 是一款内存修改编辑工具 ,它允许你修改你的游戏或软件内存数据,以得到一些其他功能.它包括16进制编辑,反汇编程序,内存查找工具.与同类修改工具相比,它具有强大的反汇编功能, ...
- CE修改器使用教程 [入门篇]
Cheat Engine 一般简称CE,是一个开放源代码的作弊软件,其功能包括:内存扫描.十六进制编辑器.调试工具,Cheat Engine 自身附带了外挂制作工具,可以用它直接生成外挂工具,CE可以 ...
- ROS Learning-027 (提高篇-005 A Mobile Base-03) 控制移动平台 --- Twist 消息
ROS 提高篇 之 A Mobile Base-03 - 控制移动平台 - Twist 消息 我使用的虚拟机软件:VMware Workstation 11 使用的Ubuntu系统:Ubuntu 14 ...
- ROS Learning-026 (提高篇-004 A Mobile Base-02) 控制移动平台 --- “分封制”
ROS 提高篇 之 A Mobile Base-02 - 控制移动平台 - "分封制" 我使用的虚拟机软件:VMware Workstation 11 使用的Ubuntu系统:Ub ...
- ROS Learning-025 (提高篇-003 A Mobile Base-01) 控制移动平台
ROS 提高篇 A Mobile Base-01 - 控制移动平台 - 基本知识 我使用的虚拟机软件:VMware Workstation 11 使用的Ubuntu系统:Ubuntu 14.04.4 ...
- NSIS安装制作基础教程[初级篇], 献给对NSIS有兴趣的初学者
NSIS安装制作基础教程[初级篇], 献给对NSIS有兴趣的初学者 作者: raindy 来源:http://bbs.hanzify.org/index.php?showtopic=30029 时间: ...
- BAT脚本编写教程入门提高篇
BAT脚本编写教程入门提高篇 批处理文件的参数 批处理文件还可以像C语言的函数一样使用参数(相当于DOS命令的命令行参数),这需要用到一个参数表示符“%”. %[1-9]表示参数,参数是指在运行批处理 ...
- 20个漂亮 CSS3 按钮效果及优秀的制作教程
在这篇文章中,我们编译了一组有用的 CSS3 动画按钮教程和引人注目的实验.正如我们都知道的,CSS3在网页设计方面是最重要和最关键的,可以使您的网站对访客更具吸引力和互动性.你可以学习这些教程和试验 ...
- WordPress插件制作教程概述
接下来的一段时间里,开始为大家讲解WordPress插件制作系列教程,这篇主要是对WordPress插件的一些介绍和说明,还有一些我们需要注意的地方,以及需要掌握的知识. WordPress插件允许你 ...
随机推荐
- Silverlight保存大数据到WCF出现Not Found问题
Silveright调用WCF保存大数据时,直接在客户端报“ 远程服务器返回了错误:Not Found ”问题,少量是没问题,如下图: 后面在这个文章中找到解决办法: http://www.cnblo ...
- JDBC连接MySql,配置url报错
使用JDBC连接MySql时出现:The server time zone value '�й���ʱ��' is unrecognized or represents more than one ...
- 使用kbmmw smart service 属性时的一个注意事项
kbmmw 5.0 以后支持smart service, 这个用起来非常方便,kbmmw 通过 定制属性来简化编程,可以参考我以前的文章.但是这个意味着使用单元引用一定要小心, 否则出了问题,都不知道 ...
- 初识kbmmw 5 中httpsys的支持
前两天kbmmw 发布了5.0 版.里面一个非常令人兴奋的特性就是原生内部支持http.sys. 有关http.sys 的介绍及优势,我就在这里不多说了,大家可以参照一下我以前的文章. 关于http. ...
- markdown中自己偶尔需要的小技巧
慢慢积累,需要时搜索,并记录与此. 1.写文章时,由于markdown不负责首行缩进,所以“空格”需要特殊的方法去实现,最简单方便的是--输入全角空格(切换全角输入,点空格) 2.markdown中注 ...
- 2018.12.15 hdu4641 K-string(后缀自动机)
传送门 后缀自动机基础题. 题意简述:支持动态在串尾插入字符,查询在串中出现超过kkk次的子串的个数. 动态修改samsamsam,每次增量构造好了之后在parentparentparent树上从新建 ...
- vue 开发系列(六) 企业微信整合
概述 手机端程序可以和企业微信进行整合,我们也可以使用企业微信JSSDK功能,实现一些原生的功能. 整合步骤 在整合之前需要阅读 整合步骤. http://work.weixin.qq.com/api ...
- CAS 单点登录 服务器整合
概述 现在企业内部的系统越来越多,如果各个应用都有自己的用户系统,那么用户将不得不要记住不同系统的用户名密码,因此独立的用户系统应运而生,各个系统之间通过单点登录的方式,这样内部只需要记住一个用户名和 ...
- c++关键字extern的作用
1.用extern修饰变量 使用在别的在源文件定义的非静态外部变量时,需要使用extern进行说明 2.用extern修饰函数 使用在别的在源文件定义的函数时,需要使用extern进行说明 3.用ex ...
- 20155205 2016-2017-2 《Java程序设计》第3周学习总结
20155205 2016-2017-2 <Java程序设计>第3周学习总结 教材学习内容总结 第四章 定义类的两种方法(new和this的用法) 只要有一个类定义,编译程序就会产生一个. ...