基本概念
1、 进程:每一个应用程序/游戏启动,都会产生至少一个进程Process,在任务管理器里可以看到进程名称和进程PID。
2、 句柄:英文HANDLE,一个整数值。数据的地址需要变动,变动以后就需要有人来记录管理变动,就好像户籍管理一样,因此系统用句柄来记载数据地址的变更。肉眼看到的一个个文件夹,窗口,按钮,图标,应用程序能够通过句柄访问相应的对象的信息
3、 数据类型:游戏中的血量、蓝、生命值,我们将他们称之为变量,变量包含了变量名称和数据类型,那么它的名字就是”血量、生命值”等等,而它的数据类型决定了数值以何种方式存储到计算机的内存中,想要找到自身需要的变量,如果可以确定这个变量的数据类型或者有根据的推测来缩小变量的数据类型范围,那么对于快速定位该变量是具有帮助性的。以下是几种常见的变量类型:
整数型:游戏中比如血量、法力可能用到这种类型。
字节型:根据不同的编辑器,1个整形占用N个字节(N>1),一般很早之前出产的GBA游戏为了节省开销会用到这种类型。
浮点型:带有小数点的数字,如果金币或者伤害值带有小数点,那很可能是这种数据类型保存的。
文本型:比如世界喊话,人物命名,一般采用文本型保存这类数据。
4、 **钩子:**钩子(Hook),是Windows消息处理机制的一个平台,应用程序可以在上面设置子程序以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的。当消息到达后,在目标窗口处理函数之前处理它。钩子机制允许应用程序截获处理window消息或特定事件。
外挂现在大体上来讲分为三种,分别是模拟按键,WPE封包和内存挂
- 模拟键盘的,鼠标的,这种就叫做按键模拟,也叫脚本精灵
- 修改数据包的,这种就叫做WPE封包外挂,这种外挂相对而言比较稳定,但是对于技术要求难度也比较高,因为修改WPE封包,你需要知道和了解加密解密算法等等一系列的知识
- 修改本地内存的,这种相对而言比较常见,市场上面比较常见的也是这种游戏外挂,相对而言技术要求也不是太高,资料也比较齐全,比较大众
修改服务器内存的比较少见,技术太高一般人没有办法入手
基本流程
- 找到游戏进程
- 然后找到游戏窗口的句柄
- 找到存储变量的内存地址
- 利用编程语言建立工具修改变量的数值
软件
CE
WPE
OD
内存挂
其实,制作内存挂也不是很难,步骤就这么几步
- 找游戏数据内存地址,偏移地址
- 修改内存地址的值,达到外挂的目的
- 用编程语言写出一个程序,使得外挂方便于携带传输,同时也方便于下次玩游戏直接使用
其实第三步主要是方便使用,方便贩卖等等,很多时候对于一个高手而言,根本不需要写出来,记录下内存地址,偏移地址以后,下次上游戏直接工具里面修改就是了。但是如果经常玩某个游戏,可以写出来,用不着每次玩游戏都去修改。(Cheat engine)
内存基址和物理地址
物理地址 动态,每次启动应用程序附加到内存时的位置是不同的,但是基址是不变的。
物理地址 = 一级偏移地址 + 偏移地址
一级偏移地址 = 二级偏移地址 + 偏移地址
二级偏移地址 = 三级偏移地址 + 偏移地址
三级偏移地址 = 游戏技能基址 + 偏移地址
在CE工具中,绿色代表静态地址,红色代表上一次操作改变的地址,黑色代表动态地址但上一次操作没有改变。而要找的基址就是静态基址。
模块:pywin32 ctypes
请认准窗口名称:Plants vs. Zombies 1.2.0.1073 RELEASE
以下均为16进制
基址: 007794f8
阳光:+868+5578 (两次偏移)
金钱: +950+50 (两次偏移)
实战——植物大战僵尸PVZ
进入游戏,查找阳光数值 -> 变动后再次查找,直到剩下一个
有时会发现有两个数值的情况,这个时候去检查一下每个地址的操作码执行情况,一般数值修改就是add和mov指令
找到这个地址后,用快捷键F6或者右键选中“找出是什么修改了这个地址”,回到游戏让数值发生变动(例如拾取阳光,放置植物等),就可以看到有操作码执行了。
基本概念
1、 进程:每一个应用程序/游戏启动,都会产生至少一个进程Process,在任务管理器里可以看到进程名称和进程PID。
2、 句柄:英文HANDLE,一个整数值。数据的地址需要变动,变动以后就需要有人来记录管理变动,就好像户籍管理一样,因此系统用句柄来记载数据地址的变更。肉眼看到的一个个文件夹,窗口,按钮,图标,应用程序能够通过句柄访问相应的对象的信息
3、 数据类型:游戏中的血量、蓝、生命值,我们将他们称之为变量,变量包含了变量名称和数据类型,那么它的名字就是”血量、生命值”等等,而它的数据类型决定了数值以何种方式存储到计算机的内存中,想要找到自身需要的变量,如果可以确定这个变量的数据类型或者有根据的推测来缩小变量的数据类型范围,那么对于快速定位该变量是具有帮助性的。以下是几种常见的变量类型:
整数型:游戏中比如血量、法力可能用到这种类型。
字节型:根据不同的编辑器,1个整形占用N个字节(N>1),一般很早之前出产的GBA游戏为了节省开销会用到这种类型。
浮点型:带有小数点的数字,如果金币或者伤害值带有小数点,那很可能是这种数据类型保存的。
文本型:比如世界喊话,人物命名,一般采用文本型保存这类数据。
4、 **钩子:**钩子(Hook),是Windows消息处理机制的一个平台,应用程序可以在上面设置子程序以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的。当消息到达后,在目标窗口处理函数之前处理它。钩子机制允许应用程序截获处理window消息或特定事件。
外挂现在大体上来讲分为三种,分别是模拟按键,WPE封包和内存挂
- 模拟键盘的,鼠标的,这种就叫做按键模拟,也叫脚本精灵
- 修改数据包的,这种就叫做WPE封包外挂,这种外挂相对而言比较稳定,但是对于技术要求难度也比较高,因为修改WPE封包,你需要知道和了解加密解密算法等等一系列的知识
- 修改本地内存的,这种相对而言比较常见,市场上面比较常见的也是这种游戏外挂,相对而言技术要求也不是太高,资料也比较齐全,比较大众
修改服务器内存的比较少见,技术太高一般人没有办法入手
基本流程
- 找到游戏进程
- 然后找到游戏窗口的句柄
- 找到存储变量的内存地址
- 利用编程语言建立工具修改变量的数值
软件
CE
WPE
OD
内存挂
其实,制作内存挂也不是很难,步骤就这么几步
- 找游戏数据内存地址,偏移地址
- 修改内存地址的值,达到外挂的目的
- 用编程语言写出一个程序,使得外挂方便于携带传输,同时也方便于下次玩游戏直接使用
其实第三步主要是方便使用,方便贩卖等等,很多时候对于一个高手而言,根本不需要写出来,记录下内存地址,偏移地址以后,下次上游戏直接工具里面修改就是了。但是如果经常玩某个游戏,可以写出来,用不着每次玩游戏都去修改。(Cheat engine)
内存基址和物理地址
物理地址 动态,每次启动应用程序附加到内存时的位置是不同的,但是基址是不变的。
物理地址 = 一级偏移地址 + 偏移地址
一级偏移地址 = 二级偏移地址 + 偏移地址
二级偏移地址 = 三级偏移地址 + 偏移地址
三级偏移地址 = 游戏技能基址 + 偏移地址
在CE工具中,绿色代表静态地址,红色代表上一次操作改变的地址,黑色代表动态地址但上一次操作没有改变。而要找的基址就是静态基址。
模块:pywin32 ctypes
请认准窗口名称:Plants vs. Zombies 1.2.0.1073 RELEASE
以下均为16进制
基址: 007794f8
阳光:+868+5578 (两次偏移)
金钱: +950+50 (两次偏移)
实战——植物大战僵尸PVZ
进入游戏,查找阳光数值 -> 变动后再次查找,直到剩下一个
有时会发现有两个数值的情况,这个时候去检查一下每个地址的操作码执行情况,一般数值修改就是add和mov指令
找到这个地址后,用快捷键F6或者右键选中“找出是什么修改了这个地址”,回到游戏让数值发生变动(例如拾取阳光,放置植物等),就可以看到有操作码执行了。

- 首先分析一下
mov [edi+00005578],esi这条指令,我们在详细信息中看见,寄存器esi中的代码是0000039D这个值换算成十进制刚好是925,发现什么了吗,对了,这个925就是当前的阳光值。这条指令mov mov [edi+00005578],esi就是把寄存器esi的925的值放入edi+00005578这个地址中去,这个地址是谁呢?这个地址就是刚刚找出来的物理地址,刚好满足前面的公式:物理地址 = 阳光基址地址 + 偏移地址 - 接下看看
add [eax+00005578],ecx这条指令,add指令是相加的意思,前面的mov是赋值或者移动的意思,这条代码的意思就是,把ecx寄存器中的值加入[eax+00005578]这个地址中的值当中去,再看看寄存器eax的地址是多少?刚好又是23560070这个指针数值,那么,我们就可以确定一个事情,那就是23560070这个指针数值,肯定是上一级的地址的指针数值,那么上一级要么是基址,要么还是一个偏移地址,这个需要进一步来确认 - 把
23560070这个指针数值,再次放到CE中搜索一波,看看这个值对应的地址是多少,看看出来的是一个动态地址还是静态地址(在CE中,黑色的地址表示动态地址,绿色的表示静态地址),这里这个值是十六进制的,所以在搜索的时候,需要勾选搜索框前面的hex,这里填好以后点击新的扫描,首次扫描如图所示:

这里搜索出来的值有很多,要怎么确认呢?
多次点击再次扫描以后发现不管怎么点击都剩下来了52个结果,然后看了一下这些结果中并没有绿色的静态地址,说明至少有二级偏移。其他地址开头几位都比较相似,唯独有几个地址比较特殊,这可能就是我们需要的地址了
百度了一波,结果所说的是这种开头比较像的是数组,也就是说,遇到这种,基本都不是我们需要的地址,直接放弃,把这两个特殊的拉进下边的地址列表,开始分析,双击地址这一栏,在出来的更改地址窗口中复制下这个地址,然后再勾选指针选项,在出来的内容框中填写入刚刚复制的地址,在上面的内容框中写入刚刚找到的00005560这个偏移地址,得到的结果刚好是阳光的物理地址,最后的阳光值也正好和当前的阳光值一样,并且,这两个地址都是一样的,而且都是动态地址
如上图所示,这两个地址加上偏移地址都可以得到阳光物理地址,右键-找出是什么访问了这个地址,也就是快捷键的F5

进去以后也是和前面一样出来一个窗口,但是这两个窗口里面的内容就不一样了,第一个地址028BBA80在窗口中会出现内容,但是第二个地址0956BD3C在出现的窗口里面是一片空白,所以,这两个地址中,028BBA80才是我们要找的真正的一级偏移地址,如图所示:

如上第二幅图所示,找到了真正的一级偏移地址028BBA80后,访问这个地址的窗口中看这些代码指令,通过对比,发现这些代码都指向同一个指针数值028BBA80且都有偏移地址00000868,如图所示:


有四个怎么办?试一试


对了。
1 | import win32gui |

CD修改:
rule:
当植物处于可使用状态时,内存值为1
当植物处于CD状态时,内存值为0
植物种植后,内存值由0开始增加,这个增加的过程就是CD,当内存值到达一定数值后,就会自动归零,此时CD结束
- 首先分析一下
mov [edi+00005578],esi这条指令,我们在详细信息中看见,寄存器esi中的代码是0000039D这个值换算成十进制刚好是925,发现什么了吗,对了,这个925就是当前的阳光值。这条指令mov mov [edi+00005578],esi就是把寄存器esi的925的值放入edi+00005578这个地址中去,这个地址是谁呢?这个地址就是刚刚找出来的物理地址,刚好满足前面的公式:物理地址 = 阳光基址地址 + 偏移地址 - 接下看看
add [eax+00005578],ecx这条指令,add指令是相加的意思,前面的mov是赋值或者移动的意思,这条代码的意思就是,把ecx寄存器中的值加入[eax+00005578]这个地址中的值当中去,再看看寄存器eax的地址是多少?刚好又是23560070这个指针数值,那么,我们就可以确定一个事情,那就是23560070这个指针数值,肯定是上一级的地址的指针数值,那么上一级要么是基址,要么还是一个偏移地址,这个需要进一步来确认 - 把
23560070这个指针数值,再次放到CE中搜索一波,看看这个值对应的地址是多少,看看出来的是一个动态地址还是静态地址(在CE中,黑色的地址表示动态地址,绿色的表示静态地址),这里这个值是十六进制的,所以在搜索的时候,需要勾选搜索框前面的hex,这里填好以后点击新的扫描,首次扫描如图所示:
基本概念
1、 进程:每一个应用程序/游戏启动,都会产生至少一个进程Process,在任务管理器里可以看到进程名称和进程PID。
2、 句柄:英文HANDLE,一个整数值。数据的地址需要变动,变动以后就需要有人来记录管理变动,就好像户籍管理一样,因此系统用句柄来记载数据地址的变更。肉眼看到的一个个文件夹,窗口,按钮,图标,应用程序能够通过句柄访问相应的对象的信息
3、 数据类型:游戏中的血量、蓝、生命值,我们将他们称之为变量,变量包含了变量名称和数据类型,那么它的名字就是”血量、生命值”等等,而它的数据类型决定了数值以何种方式存储到计算机的内存中,想要找到自身需要的变量,如果可以确定这个变量的数据类型或者有根据的推测来缩小变量的数据类型范围,那么对于快速定位该变量是具有帮助性的。以下是几种常见的变量类型:
整数型:游戏中比如血量、法力可能用到这种类型。
字节型:根据不同的编辑器,1个整形占用N个字节(N>1),一般很早之前出产的GBA游戏为了节省开销会用到这种类型。
浮点型:带有小数点的数字,如果金币或者伤害值带有小数点,那很可能是这种数据类型保存的。
文本型:比如世界喊话,人物命名,一般采用文本型保存这类数据。
4、 **钩子:**钩子(Hook),是Windows消息处理机制的一个平台,应用程序可以在上面设置子程序以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的。当消息到达后,在目标窗口处理函数之前处理它。钩子机制允许应用程序截获处理window消息或特定事件。
外挂现在大体上来讲分为三种,分别是模拟按键,WPE封包和内存挂
- 模拟键盘的,鼠标的,这种就叫做按键模拟,也叫脚本精灵
- 修改数据包的,这种就叫做WPE封包外挂,这种外挂相对而言比较稳定,但是对于技术要求难度也比较高,因为修改WPE封包,你需要知道和了解加密解密算法等等一系列的知识
- 修改本地内存的,这种相对而言比较常见,市场上面比较常见的也是这种游戏外挂,相对而言技术要求也不是太高,资料也比较齐全,比较大众
修改服务器内存的比较少见,技术太高一般人没有办法入手
基本流程
- 找到游戏进程
- 然后找到游戏窗口的句柄
- 找到存储变量的内存地址
- 利用编程语言建立工具修改变量的数值
软件
CE
WPE
OD
内存挂
其实,制作内存挂也不是很难,步骤就这么几步
- 找游戏数据内存地址,偏移地址
- 修改内存地址的值,达到外挂的目的
- 用编程语言写出一个程序,使得外挂方便于携带传输,同时也方便于下次玩游戏直接使用
其实第三步主要是方便使用,方便贩卖等等,很多时候对于一个高手而言,根本不需要写出来,记录下内存地址,偏移地址以后,下次上游戏直接工具里面修改就是了。但是如果经常玩某个游戏,可以写出来,用不着每次玩游戏都去修改。(Cheat engine)
内存基址和物理地址
物理地址 动态,每次启动应用程序附加到内存时的位置是不同的,但是基址是不变的。
物理地址 = 一级偏移地址 + 偏移地址
一级偏移地址 = 二级偏移地址 + 偏移地址
二级偏移地址 = 三级偏移地址 + 偏移地址
三级偏移地址 = 游戏技能基址 + 偏移地址
在CE工具中,绿色代表静态地址,红色代表上一次操作改变的地址,黑色代表动态地址但上一次操作没有改变。而要找的基址就是静态基址。
模块:pywin32 ctypes
请认准窗口名称:Plants vs. Zombies 1.2.0.1073 RELEASE
以下均为16进制
基址: 007794f8
阳光:+868+5578 (两次偏移)
金钱: +950+50 (两次偏移)
实战——植物大战僵尸PVZ
进入游戏,查找阳光数值 -> 变动后再次查找,直到剩下一个
有时会发现有两个数值的情况,这个时候去检查一下每个地址的操作码执行情况,一般数值修改就是add和mov指令
找到这个地址后,用快捷键F6或者右键选中“找出是什么修改了这个地址”,回到游戏让数值发生变动(例如拾取阳光,放置植物等),就可以看到有操作码执行了。

- 首先分析一下
mov [edi+00005578],esi这条指令,我们在详细信息中看见,寄存器esi中的代码是0000039D这个值换算成十进制刚好是925,发现什么了吗,对了,这个925就是当前的阳光值。这条指令mov mov [edi+00005578],esi就是把寄存器esi的925的值放入edi+00005578这个地址中去,这个地址是谁呢?这个地址就是刚刚找出来的物理地址,刚好满足前面的公式:物理地址 = 阳光基址地址 + 偏移地址 - 接下看看
add [eax+00005578],ecx这条指令,add指令是相加的意思,前面的mov是赋值或者移动的意思,这条代码的意思就是,把ecx寄存器中的值加入[eax+00005578]这个地址中的值当中去,再看看寄存器eax的地址是多少?刚好又是23560070这个指针数值,那么,我们就可以确定一个事情,那就是23560070这个指针数值,肯定是上一级的地址的指针数值,那么上一级要么是基址,要么还是一个偏移地址,这个需要进一步来确认 - 把
23560070这个指针数值,再次放到CE中搜索一波,看看这个值对应的地址是多少,看看出来的是一个动态地址还是静态地址(在CE中,黑色的地址表示动态地址,绿色的表示静态地址),这里这个值是十六进制的,所以在搜索的时候,需要勾选搜索框前面的hex,这里填好以后点击新的扫描,首次扫描如图所示:

这里搜索出来的值有很多,要怎么确认呢?
多次点击再次扫描以后发现不管怎么点击都剩下来了52个结果,然后看了一下这些结果中并没有绿色的静态地址,说明至少有二级偏移。其他地址开头几位都比较相似,唯独有几个地址比较特殊,这可能就是我们需要的地址了
百度了一波,结果所说的是这种开头比较像的是数组,也就是说,遇到这种,基本都不是我们需要的地址,直接放弃,把这两个特殊的拉进下边的地址列表,开始分析,双击地址这一栏,在出来的更改地址窗口中复制下这个地址,然后再勾选指针选项,在出来的内容框中填写入刚刚复制的地址,在上面的内容框中写入刚刚找到的00005560这个偏移地址,得到的结果刚好是阳光的物理地址,最后的阳光值也正好和当前的阳光值一样,并且,这两个地址都是一样的,而且都是动态地址
如上图所示,这两个地址加上偏移地址都可以得到阳光物理地址,右键-找出是什么访问了这个地址,也就是快捷键的F5

进去以后也是和前面一样出来一个窗口,但是这两个窗口里面的内容就不一样了,第一个地址028BBA80在窗口中会出现内容,但是第二个地址0956BD3C在出现的窗口里面是一片空白,所以,这两个地址中,028BBA80才是我们要找的真正的一级偏移地址,如图所示:

如上第二幅图所示,找到了真正的一级偏移地址028BBA80后,访问这个地址的窗口中看这些代码指令,通过对比,发现这些代码都指向同一个指针数值028BBA80且都有偏移地址00000868,如图所示:


有四个怎么办?试一试


对了。
1 | import win32gui |

CD修改:
rule:
当植物处于可使用状态时,内存值为1
当植物处于CD状态时,内存值为0
植物种植后,内存值由0开始增加,这个增加的过程就是CD,当内存值到达一定数值后,就会自动归零,此时CD结束
这里搜索出来的值有很多,要怎么确认呢?
多次点击再次扫描以后发现不管怎么点击都剩下来了52个结果,然后看了一下这些结果中并没有绿色的静态地址,说明至少有二级偏移。其他地址开头几位都比较相似,唯独有几个地址比较特殊,这可能就是我们需要的地址了
百度了一波,结果所说的是这种开头比较像的是数组,也就是说,遇到这种,基本都不是我们需要的地址,直接放弃,把这两个特殊的拉进下边的地址列表,开始分析,双击地址这一栏,在出来的更改地址窗口中复制下这个地址,然后再勾选指针选项,在出来的内容框中填写入刚刚复制的地址,在上面的内容框中写入刚刚找到的00005560这个偏移地址,得到的结果刚好是阳光的物理地址,最后的阳光值也正好和当前的阳光值一样,并且,这两个地址都是一样的,而且都是动态地址
如上图所示,这两个地址加上偏移地址都可以得到阳光物理地址,右键-找出是什么访问了这个地址,也就是快捷键的F5
基本概念
1、 进程:每一个应用程序/游戏启动,都会产生至少一个进程Process,在任务管理器里可以看到进程名称和进程PID。
2、 句柄:英文HANDLE,一个整数值。数据的地址需要变动,变动以后就需要有人来记录管理变动,就好像户籍管理一样,因此系统用句柄来记载数据地址的变更。肉眼看到的一个个文件夹,窗口,按钮,图标,应用程序能够通过句柄访问相应的对象的信息
3、 数据类型:游戏中的血量、蓝、生命值,我们将他们称之为变量,变量包含了变量名称和数据类型,那么它的名字就是”血量、生命值”等等,而它的数据类型决定了数值以何种方式存储到计算机的内存中,想要找到自身需要的变量,如果可以确定这个变量的数据类型或者有根据的推测来缩小变量的数据类型范围,那么对于快速定位该变量是具有帮助性的。以下是几种常见的变量类型:
整数型:游戏中比如血量、法力可能用到这种类型。
字节型:根据不同的编辑器,1个整形占用N个字节(N>1),一般很早之前出产的GBA游戏为了节省开销会用到这种类型。
浮点型:带有小数点的数字,如果金币或者伤害值带有小数点,那很可能是这种数据类型保存的。
文本型:比如世界喊话,人物命名,一般采用文本型保存这类数据。
4、 **钩子:**钩子(Hook),是Windows消息处理机制的一个平台,应用程序可以在上面设置子程序以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的。当消息到达后,在目标窗口处理函数之前处理它。钩子机制允许应用程序截获处理window消息或特定事件。
外挂现在大体上来讲分为三种,分别是模拟按键,WPE封包和内存挂
- 模拟键盘的,鼠标的,这种就叫做按键模拟,也叫脚本精灵
- 修改数据包的,这种就叫做WPE封包外挂,这种外挂相对而言比较稳定,但是对于技术要求难度也比较高,因为修改WPE封包,你需要知道和了解加密解密算法等等一系列的知识
- 修改本地内存的,这种相对而言比较常见,市场上面比较常见的也是这种游戏外挂,相对而言技术要求也不是太高,资料也比较齐全,比较大众
修改服务器内存的比较少见,技术太高一般人没有办法入手
基本流程
- 找到游戏进程
- 然后找到游戏窗口的句柄
- 找到存储变量的内存地址
- 利用编程语言建立工具修改变量的数值
软件
CE
WPE
OD
内存挂
其实,制作内存挂也不是很难,步骤就这么几步
- 找游戏数据内存地址,偏移地址
- 修改内存地址的值,达到外挂的目的
- 用编程语言写出一个程序,使得外挂方便于携带传输,同时也方便于下次玩游戏直接使用
其实第三步主要是方便使用,方便贩卖等等,很多时候对于一个高手而言,根本不需要写出来,记录下内存地址,偏移地址以后,下次上游戏直接工具里面修改就是了。但是如果经常玩某个游戏,可以写出来,用不着每次玩游戏都去修改。(Cheat engine)
内存基址和物理地址
物理地址 动态,每次启动应用程序附加到内存时的位置是不同的,但是基址是不变的。
物理地址 = 一级偏移地址 + 偏移地址
一级偏移地址 = 二级偏移地址 + 偏移地址
二级偏移地址 = 三级偏移地址 + 偏移地址
三级偏移地址 = 游戏技能基址 + 偏移地址
在CE工具中,绿色代表静态地址,红色代表上一次操作改变的地址,黑色代表动态地址但上一次操作没有改变。而要找的基址就是静态基址。
模块:pywin32 ctypes
请认准窗口名称:Plants vs. Zombies 1.2.0.1073 RELEASE
以下均为16进制
基址: 007794f8
阳光:+868+5578 (两次偏移)
金钱: +950+50 (两次偏移)
实战——植物大战僵尸PVZ
进入游戏,查找阳光数值 -> 变动后再次查找,直到剩下一个
有时会发现有两个数值的情况,这个时候去检查一下每个地址的操作码执行情况,一般数值修改就是add和mov指令
找到这个地址后,用快捷键F6或者右键选中“找出是什么修改了这个地址”,回到游戏让数值发生变动(例如拾取阳光,放置植物等),就可以看到有操作码执行了。

- 首先分析一下
mov [edi+00005578],esi这条指令,我们在详细信息中看见,寄存器esi中的代码是0000039D这个值换算成十进制刚好是925,发现什么了吗,对了,这个925就是当前的阳光值。这条指令mov mov [edi+00005578],esi就是把寄存器esi的925的值放入edi+00005578这个地址中去,这个地址是谁呢?这个地址就是刚刚找出来的物理地址,刚好满足前面的公式:物理地址 = 阳光基址地址 + 偏移地址 - 接下看看
add [eax+00005578],ecx这条指令,add指令是相加的意思,前面的mov是赋值或者移动的意思,这条代码的意思就是,把ecx寄存器中的值加入[eax+00005578]这个地址中的值当中去,再看看寄存器eax的地址是多少?刚好又是23560070这个指针数值,那么,我们就可以确定一个事情,那就是23560070这个指针数值,肯定是上一级的地址的指针数值,那么上一级要么是基址,要么还是一个偏移地址,这个需要进一步来确认 - 把
23560070这个指针数值,再次放到CE中搜索一波,看看这个值对应的地址是多少,看看出来的是一个动态地址还是静态地址(在CE中,黑色的地址表示动态地址,绿色的表示静态地址),这里这个值是十六进制的,所以在搜索的时候,需要勾选搜索框前面的hex,这里填好以后点击新的扫描,首次扫描如图所示:

这里搜索出来的值有很多,要怎么确认呢?
多次点击再次扫描以后发现不管怎么点击都剩下来了52个结果,然后看了一下这些结果中并没有绿色的静态地址,说明至少有二级偏移。其他地址开头几位都比较相似,唯独有几个地址比较特殊,这可能就是我们需要的地址了
百度了一波,结果所说的是这种开头比较像的是数组,也就是说,遇到这种,基本都不是我们需要的地址,直接放弃,把这两个特殊的拉进下边的地址列表,开始分析,双击地址这一栏,在出来的更改地址窗口中复制下这个地址,然后再勾选指针选项,在出来的内容框中填写入刚刚复制的地址,在上面的内容框中写入刚刚找到的00005560这个偏移地址,得到的结果刚好是阳光的物理地址,最后的阳光值也正好和当前的阳光值一样,并且,这两个地址都是一样的,而且都是动态地址
如上图所示,这两个地址加上偏移地址都可以得到阳光物理地址,右键-找出是什么访问了这个地址,也就是快捷键的F5

进去以后也是和前面一样出来一个窗口,但是这两个窗口里面的内容就不一样了,第一个地址028BBA80在窗口中会出现内容,但是第二个地址0956BD3C在出现的窗口里面是一片空白,所以,这两个地址中,028BBA80才是我们要找的真正的一级偏移地址,如图所示:

如上第二幅图所示,找到了真正的一级偏移地址028BBA80后,访问这个地址的窗口中看这些代码指令,通过对比,发现这些代码都指向同一个指针数值028BBA80且都有偏移地址00000868,如图所示:


有四个怎么办?试一试


对了。
1 | import win32gui |

CD修改:
rule:
当植物处于可使用状态时,内存值为1
当植物处于CD状态时,内存值为0
植物种植后,内存值由0开始增加,这个增加的过程就是CD,当内存值到达一定数值后,就会自动归零,此时CD结束
进去以后也是和前面一样出来一个窗口,但是这两个窗口里面的内容就不一样了,第一个地址028BBA80在窗口中会出现内容,但是第二个地址0956BD3C在出现的窗口里面是一片空白,所以,这两个地址中,028BBA80才是我们要找的真正的一级偏移地址,如图所示:
基本概念
1、 进程:每一个应用程序/游戏启动,都会产生至少一个进程Process,在任务管理器里可以看到进程名称和进程PID。
2、 句柄:英文HANDLE,一个整数值。数据的地址需要变动,变动以后就需要有人来记录管理变动,就好像户籍管理一样,因此系统用句柄来记载数据地址的变更。肉眼看到的一个个文件夹,窗口,按钮,图标,应用程序能够通过句柄访问相应的对象的信息
3、 数据类型:游戏中的血量、蓝、生命值,我们将他们称之为变量,变量包含了变量名称和数据类型,那么它的名字就是”血量、生命值”等等,而它的数据类型决定了数值以何种方式存储到计算机的内存中,想要找到自身需要的变量,如果可以确定这个变量的数据类型或者有根据的推测来缩小变量的数据类型范围,那么对于快速定位该变量是具有帮助性的。以下是几种常见的变量类型:
整数型:游戏中比如血量、法力可能用到这种类型。
字节型:根据不同的编辑器,1个整形占用N个字节(N>1),一般很早之前出产的GBA游戏为了节省开销会用到这种类型。
浮点型:带有小数点的数字,如果金币或者伤害值带有小数点,那很可能是这种数据类型保存的。
文本型:比如世界喊话,人物命名,一般采用文本型保存这类数据。
4、 **钩子:**钩子(Hook),是Windows消息处理机制的一个平台,应用程序可以在上面设置子程序以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的。当消息到达后,在目标窗口处理函数之前处理它。钩子机制允许应用程序截获处理window消息或特定事件。
外挂现在大体上来讲分为三种,分别是模拟按键,WPE封包和内存挂
- 模拟键盘的,鼠标的,这种就叫做按键模拟,也叫脚本精灵
- 修改数据包的,这种就叫做WPE封包外挂,这种外挂相对而言比较稳定,但是对于技术要求难度也比较高,因为修改WPE封包,你需要知道和了解加密解密算法等等一系列的知识
- 修改本地内存的,这种相对而言比较常见,市场上面比较常见的也是这种游戏外挂,相对而言技术要求也不是太高,资料也比较齐全,比较大众
修改服务器内存的比较少见,技术太高一般人没有办法入手
基本流程
- 找到游戏进程
- 然后找到游戏窗口的句柄
- 找到存储变量的内存地址
- 利用编程语言建立工具修改变量的数值
软件
CE
WPE
OD
内存挂
其实,制作内存挂也不是很难,步骤就这么几步
- 找游戏数据内存地址,偏移地址
- 修改内存地址的值,达到外挂的目的
- 用编程语言写出一个程序,使得外挂方便于携带传输,同时也方便于下次玩游戏直接使用
其实第三步主要是方便使用,方便贩卖等等,很多时候对于一个高手而言,根本不需要写出来,记录下内存地址,偏移地址以后,下次上游戏直接工具里面修改就是了。但是如果经常玩某个游戏,可以写出来,用不着每次玩游戏都去修改。(Cheat engine)
内存基址和物理地址
物理地址 动态,每次启动应用程序附加到内存时的位置是不同的,但是基址是不变的。
物理地址 = 一级偏移地址 + 偏移地址
一级偏移地址 = 二级偏移地址 + 偏移地址
二级偏移地址 = 三级偏移地址 + 偏移地址
三级偏移地址 = 游戏技能基址 + 偏移地址
在CE工具中,绿色代表静态地址,红色代表上一次操作改变的地址,黑色代表动态地址但上一次操作没有改变。而要找的基址就是静态基址。
模块:pywin32 ctypes
请认准窗口名称:Plants vs. Zombies 1.2.0.1073 RELEASE
以下均为16进制
基址: 007794f8
阳光:+868+5578 (两次偏移)
金钱: +950+50 (两次偏移)
实战——植物大战僵尸PVZ
进入游戏,查找阳光数值 -> 变动后再次查找,直到剩下一个
有时会发现有两个数值的情况,这个时候去检查一下每个地址的操作码执行情况,一般数值修改就是add和mov指令
找到这个地址后,用快捷键F6或者右键选中“找出是什么修改了这个地址”,回到游戏让数值发生变动(例如拾取阳光,放置植物等),就可以看到有操作码执行了。

- 首先分析一下
mov [edi+00005578],esi这条指令,我们在详细信息中看见,寄存器esi中的代码是0000039D这个值换算成十进制刚好是925,发现什么了吗,对了,这个925就是当前的阳光值。这条指令mov mov [edi+00005578],esi就是把寄存器esi的925的值放入edi+00005578这个地址中去,这个地址是谁呢?这个地址就是刚刚找出来的物理地址,刚好满足前面的公式:物理地址 = 阳光基址地址 + 偏移地址 - 接下看看
add [eax+00005578],ecx这条指令,add指令是相加的意思,前面的mov是赋值或者移动的意思,这条代码的意思就是,把ecx寄存器中的值加入[eax+00005578]这个地址中的值当中去,再看看寄存器eax的地址是多少?刚好又是23560070这个指针数值,那么,我们就可以确定一个事情,那就是23560070这个指针数值,肯定是上一级的地址的指针数值,那么上一级要么是基址,要么还是一个偏移地址,这个需要进一步来确认 - 把
23560070这个指针数值,再次放到CE中搜索一波,看看这个值对应的地址是多少,看看出来的是一个动态地址还是静态地址(在CE中,黑色的地址表示动态地址,绿色的表示静态地址),这里这个值是十六进制的,所以在搜索的时候,需要勾选搜索框前面的hex,这里填好以后点击新的扫描,首次扫描如图所示:

这里搜索出来的值有很多,要怎么确认呢?
多次点击再次扫描以后发现不管怎么点击都剩下来了52个结果,然后看了一下这些结果中并没有绿色的静态地址,说明至少有二级偏移。其他地址开头几位都比较相似,唯独有几个地址比较特殊,这可能就是我们需要的地址了
百度了一波,结果所说的是这种开头比较像的是数组,也就是说,遇到这种,基本都不是我们需要的地址,直接放弃,把这两个特殊的拉进下边的地址列表,开始分析,双击地址这一栏,在出来的更改地址窗口中复制下这个地址,然后再勾选指针选项,在出来的内容框中填写入刚刚复制的地址,在上面的内容框中写入刚刚找到的00005560这个偏移地址,得到的结果刚好是阳光的物理地址,最后的阳光值也正好和当前的阳光值一样,并且,这两个地址都是一样的,而且都是动态地址
如上图所示,这两个地址加上偏移地址都可以得到阳光物理地址,右键-找出是什么访问了这个地址,也就是快捷键的F5

进去以后也是和前面一样出来一个窗口,但是这两个窗口里面的内容就不一样了,第一个地址028BBA80在窗口中会出现内容,但是第二个地址0956BD3C在出现的窗口里面是一片空白,所以,这两个地址中,028BBA80才是我们要找的真正的一级偏移地址,如图所示:

如上第二幅图所示,找到了真正的一级偏移地址028BBA80后,访问这个地址的窗口中看这些代码指令,通过对比,发现这些代码都指向同一个指针数值028BBA80且都有偏移地址00000868,如图所示:


有四个怎么办?试一试


对了。
1 | import win32gui |

CD修改:
rule:
当植物处于可使用状态时,内存值为1
当植物处于CD状态时,内存值为0
植物种植后,内存值由0开始增加,这个增加的过程就是CD,当内存值到达一定数值后,就会自动归零,此时CD结束
如上第二幅图所示,找到了真正的一级偏移地址028BBA80后,访问这个地址的窗口中看这些代码指令,通过对比,发现这些代码都指向同一个指针数值028BBA80且都有偏移地址00000868,如图所示:
基本概念
1、 进程:每一个应用程序/游戏启动,都会产生至少一个进程Process,在任务管理器里可以看到进程名称和进程PID。
2、 句柄:英文HANDLE,一个整数值。数据的地址需要变动,变动以后就需要有人来记录管理变动,就好像户籍管理一样,因此系统用句柄来记载数据地址的变更。肉眼看到的一个个文件夹,窗口,按钮,图标,应用程序能够通过句柄访问相应的对象的信息
3、 数据类型:游戏中的血量、蓝、生命值,我们将他们称之为变量,变量包含了变量名称和数据类型,那么它的名字就是”血量、生命值”等等,而它的数据类型决定了数值以何种方式存储到计算机的内存中,想要找到自身需要的变量,如果可以确定这个变量的数据类型或者有根据的推测来缩小变量的数据类型范围,那么对于快速定位该变量是具有帮助性的。以下是几种常见的变量类型:
整数型:游戏中比如血量、法力可能用到这种类型。
字节型:根据不同的编辑器,1个整形占用N个字节(N>1),一般很早之前出产的GBA游戏为了节省开销会用到这种类型。
浮点型:带有小数点的数字,如果金币或者伤害值带有小数点,那很可能是这种数据类型保存的。
文本型:比如世界喊话,人物命名,一般采用文本型保存这类数据。
4、 **钩子:**钩子(Hook),是Windows消息处理机制的一个平台,应用程序可以在上面设置子程序以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的。当消息到达后,在目标窗口处理函数之前处理它。钩子机制允许应用程序截获处理window消息或特定事件。
外挂现在大体上来讲分为三种,分别是模拟按键,WPE封包和内存挂
- 模拟键盘的,鼠标的,这种就叫做按键模拟,也叫脚本精灵
- 修改数据包的,这种就叫做WPE封包外挂,这种外挂相对而言比较稳定,但是对于技术要求难度也比较高,因为修改WPE封包,你需要知道和了解加密解密算法等等一系列的知识
- 修改本地内存的,这种相对而言比较常见,市场上面比较常见的也是这种游戏外挂,相对而言技术要求也不是太高,资料也比较齐全,比较大众
修改服务器内存的比较少见,技术太高一般人没有办法入手
基本流程
- 找到游戏进程
- 然后找到游戏窗口的句柄
- 找到存储变量的内存地址
- 利用编程语言建立工具修改变量的数值
软件
CE
WPE
OD
内存挂
其实,制作内存挂也不是很难,步骤就这么几步
- 找游戏数据内存地址,偏移地址
- 修改内存地址的值,达到外挂的目的
- 用编程语言写出一个程序,使得外挂方便于携带传输,同时也方便于下次玩游戏直接使用
其实第三步主要是方便使用,方便贩卖等等,很多时候对于一个高手而言,根本不需要写出来,记录下内存地址,偏移地址以后,下次上游戏直接工具里面修改就是了。但是如果经常玩某个游戏,可以写出来,用不着每次玩游戏都去修改。(Cheat engine)
内存基址和物理地址
物理地址 动态,每次启动应用程序附加到内存时的位置是不同的,但是基址是不变的。
物理地址 = 一级偏移地址 + 偏移地址
一级偏移地址 = 二级偏移地址 + 偏移地址
二级偏移地址 = 三级偏移地址 + 偏移地址
三级偏移地址 = 游戏技能基址 + 偏移地址
在CE工具中,绿色代表静态地址,红色代表上一次操作改变的地址,黑色代表动态地址但上一次操作没有改变。而要找的基址就是静态基址。
模块:pywin32 ctypes
请认准窗口名称:Plants vs. Zombies 1.2.0.1073 RELEASE
以下均为16进制
基址: 007794f8
阳光:+868+5578 (两次偏移)
金钱: +950+50 (两次偏移)
实战——植物大战僵尸PVZ
进入游戏,查找阳光数值 -> 变动后再次查找,直到剩下一个
有时会发现有两个数值的情况,这个时候去检查一下每个地址的操作码执行情况,一般数值修改就是add和mov指令
找到这个地址后,用快捷键F6或者右键选中“找出是什么修改了这个地址”,回到游戏让数值发生变动(例如拾取阳光,放置植物等),就可以看到有操作码执行了。

- 首先分析一下
mov [edi+00005578],esi这条指令,我们在详细信息中看见,寄存器esi中的代码是0000039D这个值换算成十进制刚好是925,发现什么了吗,对了,这个925就是当前的阳光值。这条指令mov mov [edi+00005578],esi就是把寄存器esi的925的值放入edi+00005578这个地址中去,这个地址是谁呢?这个地址就是刚刚找出来的物理地址,刚好满足前面的公式:物理地址 = 阳光基址地址 + 偏移地址 - 接下看看
add [eax+00005578],ecx这条指令,add指令是相加的意思,前面的mov是赋值或者移动的意思,这条代码的意思就是,把ecx寄存器中的值加入[eax+00005578]这个地址中的值当中去,再看看寄存器eax的地址是多少?刚好又是23560070这个指针数值,那么,我们就可以确定一个事情,那就是23560070这个指针数值,肯定是上一级的地址的指针数值,那么上一级要么是基址,要么还是一个偏移地址,这个需要进一步来确认 - 把
23560070这个指针数值,再次放到CE中搜索一波,看看这个值对应的地址是多少,看看出来的是一个动态地址还是静态地址(在CE中,黑色的地址表示动态地址,绿色的表示静态地址),这里这个值是十六进制的,所以在搜索的时候,需要勾选搜索框前面的hex,这里填好以后点击新的扫描,首次扫描如图所示:

这里搜索出来的值有很多,要怎么确认呢?
多次点击再次扫描以后发现不管怎么点击都剩下来了52个结果,然后看了一下这些结果中并没有绿色的静态地址,说明至少有二级偏移。其他地址开头几位都比较相似,唯独有几个地址比较特殊,这可能就是我们需要的地址了
百度了一波,结果所说的是这种开头比较像的是数组,也就是说,遇到这种,基本都不是我们需要的地址,直接放弃,把这两个特殊的拉进下边的地址列表,开始分析,双击地址这一栏,在出来的更改地址窗口中复制下这个地址,然后再勾选指针选项,在出来的内容框中填写入刚刚复制的地址,在上面的内容框中写入刚刚找到的00005560这个偏移地址,得到的结果刚好是阳光的物理地址,最后的阳光值也正好和当前的阳光值一样,并且,这两个地址都是一样的,而且都是动态地址
如上图所示,这两个地址加上偏移地址都可以得到阳光物理地址,右键-找出是什么访问了这个地址,也就是快捷键的F5

进去以后也是和前面一样出来一个窗口,但是这两个窗口里面的内容就不一样了,第一个地址028BBA80在窗口中会出现内容,但是第二个地址0956BD3C在出现的窗口里面是一片空白,所以,这两个地址中,028BBA80才是我们要找的真正的一级偏移地址,如图所示:

如上第二幅图所示,找到了真正的一级偏移地址028BBA80后,访问这个地址的窗口中看这些代码指令,通过对比,发现这些代码都指向同一个指针数值028BBA80且都有偏移地址00000868,如图所示:


有四个怎么办?试一试


对了。
1 | import win32gui |

CD修改:
rule:
当植物处于可使用状态时,内存值为1
当植物处于CD状态时,内存值为0
植物种植后,内存值由0开始增加,这个增加的过程就是CD,当内存值到达一定数值后,就会自动归零,此时CD结束
基本概念
1、 进程:每一个应用程序/游戏启动,都会产生至少一个进程Process,在任务管理器里可以看到进程名称和进程PID。
2、 句柄:英文HANDLE,一个整数值。数据的地址需要变动,变动以后就需要有人来记录管理变动,就好像户籍管理一样,因此系统用句柄来记载数据地址的变更。肉眼看到的一个个文件夹,窗口,按钮,图标,应用程序能够通过句柄访问相应的对象的信息
3、 数据类型:游戏中的血量、蓝、生命值,我们将他们称之为变量,变量包含了变量名称和数据类型,那么它的名字就是”血量、生命值”等等,而它的数据类型决定了数值以何种方式存储到计算机的内存中,想要找到自身需要的变量,如果可以确定这个变量的数据类型或者有根据的推测来缩小变量的数据类型范围,那么对于快速定位该变量是具有帮助性的。以下是几种常见的变量类型:
整数型:游戏中比如血量、法力可能用到这种类型。
字节型:根据不同的编辑器,1个整形占用N个字节(N>1),一般很早之前出产的GBA游戏为了节省开销会用到这种类型。
浮点型:带有小数点的数字,如果金币或者伤害值带有小数点,那很可能是这种数据类型保存的。
文本型:比如世界喊话,人物命名,一般采用文本型保存这类数据。
4、 **钩子:**钩子(Hook),是Windows消息处理机制的一个平台,应用程序可以在上面设置子程序以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的。当消息到达后,在目标窗口处理函数之前处理它。钩子机制允许应用程序截获处理window消息或特定事件。
外挂现在大体上来讲分为三种,分别是模拟按键,WPE封包和内存挂
- 模拟键盘的,鼠标的,这种就叫做按键模拟,也叫脚本精灵
- 修改数据包的,这种就叫做WPE封包外挂,这种外挂相对而言比较稳定,但是对于技术要求难度也比较高,因为修改WPE封包,你需要知道和了解加密解密算法等等一系列的知识
- 修改本地内存的,这种相对而言比较常见,市场上面比较常见的也是这种游戏外挂,相对而言技术要求也不是太高,资料也比较齐全,比较大众
修改服务器内存的比较少见,技术太高一般人没有办法入手
基本流程
- 找到游戏进程
- 然后找到游戏窗口的句柄
- 找到存储变量的内存地址
- 利用编程语言建立工具修改变量的数值
软件
CE
WPE
OD
内存挂
其实,制作内存挂也不是很难,步骤就这么几步
- 找游戏数据内存地址,偏移地址
- 修改内存地址的值,达到外挂的目的
- 用编程语言写出一个程序,使得外挂方便于携带传输,同时也方便于下次玩游戏直接使用
其实第三步主要是方便使用,方便贩卖等等,很多时候对于一个高手而言,根本不需要写出来,记录下内存地址,偏移地址以后,下次上游戏直接工具里面修改就是了。但是如果经常玩某个游戏,可以写出来,用不着每次玩游戏都去修改。(Cheat engine)
内存基址和物理地址
物理地址 动态,每次启动应用程序附加到内存时的位置是不同的,但是基址是不变的。
物理地址 = 一级偏移地址 + 偏移地址
一级偏移地址 = 二级偏移地址 + 偏移地址
二级偏移地址 = 三级偏移地址 + 偏移地址
三级偏移地址 = 游戏技能基址 + 偏移地址
在CE工具中,绿色代表静态地址,红色代表上一次操作改变的地址,黑色代表动态地址但上一次操作没有改变。而要找的基址就是静态基址。
模块:pywin32 ctypes
请认准窗口名称:Plants vs. Zombies 1.2.0.1073 RELEASE
以下均为16进制
基址: 007794f8
阳光:+868+5578 (两次偏移)
金钱: +950+50 (两次偏移)
实战——植物大战僵尸PVZ
进入游戏,查找阳光数值 -> 变动后再次查找,直到剩下一个
有时会发现有两个数值的情况,这个时候去检查一下每个地址的操作码执行情况,一般数值修改就是add和mov指令
找到这个地址后,用快捷键F6或者右键选中“找出是什么修改了这个地址”,回到游戏让数值发生变动(例如拾取阳光,放置植物等),就可以看到有操作码执行了。

- 首先分析一下
mov [edi+00005578],esi这条指令,我们在详细信息中看见,寄存器esi中的代码是0000039D这个值换算成十进制刚好是925,发现什么了吗,对了,这个925就是当前的阳光值。这条指令mov mov [edi+00005578],esi就是把寄存器esi的925的值放入edi+00005578这个地址中去,这个地址是谁呢?这个地址就是刚刚找出来的物理地址,刚好满足前面的公式:物理地址 = 阳光基址地址 + 偏移地址 - 接下看看
add [eax+00005578],ecx这条指令,add指令是相加的意思,前面的mov是赋值或者移动的意思,这条代码的意思就是,把ecx寄存器中的值加入[eax+00005578]这个地址中的值当中去,再看看寄存器eax的地址是多少?刚好又是23560070这个指针数值,那么,我们就可以确定一个事情,那就是23560070这个指针数值,肯定是上一级的地址的指针数值,那么上一级要么是基址,要么还是一个偏移地址,这个需要进一步来确认 - 把
23560070这个指针数值,再次放到CE中搜索一波,看看这个值对应的地址是多少,看看出来的是一个动态地址还是静态地址(在CE中,黑色的地址表示动态地址,绿色的表示静态地址),这里这个值是十六进制的,所以在搜索的时候,需要勾选搜索框前面的hex,这里填好以后点击新的扫描,首次扫描如图所示:

这里搜索出来的值有很多,要怎么确认呢?
多次点击再次扫描以后发现不管怎么点击都剩下来了52个结果,然后看了一下这些结果中并没有绿色的静态地址,说明至少有二级偏移。其他地址开头几位都比较相似,唯独有几个地址比较特殊,这可能就是我们需要的地址了
百度了一波,结果所说的是这种开头比较像的是数组,也就是说,遇到这种,基本都不是我们需要的地址,直接放弃,把这两个特殊的拉进下边的地址列表,开始分析,双击地址这一栏,在出来的更改地址窗口中复制下这个地址,然后再勾选指针选项,在出来的内容框中填写入刚刚复制的地址,在上面的内容框中写入刚刚找到的00005560这个偏移地址,得到的结果刚好是阳光的物理地址,最后的阳光值也正好和当前的阳光值一样,并且,这两个地址都是一样的,而且都是动态地址
如上图所示,这两个地址加上偏移地址都可以得到阳光物理地址,右键-找出是什么访问了这个地址,也就是快捷键的F5

进去以后也是和前面一样出来一个窗口,但是这两个窗口里面的内容就不一样了,第一个地址028BBA80在窗口中会出现内容,但是第二个地址0956BD3C在出现的窗口里面是一片空白,所以,这两个地址中,028BBA80才是我们要找的真正的一级偏移地址,如图所示:

如上第二幅图所示,找到了真正的一级偏移地址028BBA80后,访问这个地址的窗口中看这些代码指令,通过对比,发现这些代码都指向同一个指针数值028BBA80且都有偏移地址00000868,如图所示:


有四个怎么办?试一试


对了。
1 | import win32gui |

CD修改:
rule:
当植物处于可使用状态时,内存值为1
当植物处于CD状态时,内存值为0
植物种植后,内存值由0开始增加,这个增加的过程就是CD,当内存值到达一定数值后,就会自动归零,此时CD结束
有四个怎么办?试一试
基本概念
1、 进程:每一个应用程序/游戏启动,都会产生至少一个进程Process,在任务管理器里可以看到进程名称和进程PID。
2、 句柄:英文HANDLE,一个整数值。数据的地址需要变动,变动以后就需要有人来记录管理变动,就好像户籍管理一样,因此系统用句柄来记载数据地址的变更。肉眼看到的一个个文件夹,窗口,按钮,图标,应用程序能够通过句柄访问相应的对象的信息
3、 数据类型:游戏中的血量、蓝、生命值,我们将他们称之为变量,变量包含了变量名称和数据类型,那么它的名字就是”血量、生命值”等等,而它的数据类型决定了数值以何种方式存储到计算机的内存中,想要找到自身需要的变量,如果可以确定这个变量的数据类型或者有根据的推测来缩小变量的数据类型范围,那么对于快速定位该变量是具有帮助性的。以下是几种常见的变量类型:
整数型:游戏中比如血量、法力可能用到这种类型。
字节型:根据不同的编辑器,1个整形占用N个字节(N>1),一般很早之前出产的GBA游戏为了节省开销会用到这种类型。
浮点型:带有小数点的数字,如果金币或者伤害值带有小数点,那很可能是这种数据类型保存的。
文本型:比如世界喊话,人物命名,一般采用文本型保存这类数据。
4、 **钩子:**钩子(Hook),是Windows消息处理机制的一个平台,应用程序可以在上面设置子程序以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的。当消息到达后,在目标窗口处理函数之前处理它。钩子机制允许应用程序截获处理window消息或特定事件。
外挂现在大体上来讲分为三种,分别是模拟按键,WPE封包和内存挂
- 模拟键盘的,鼠标的,这种就叫做按键模拟,也叫脚本精灵
- 修改数据包的,这种就叫做WPE封包外挂,这种外挂相对而言比较稳定,但是对于技术要求难度也比较高,因为修改WPE封包,你需要知道和了解加密解密算法等等一系列的知识
- 修改本地内存的,这种相对而言比较常见,市场上面比较常见的也是这种游戏外挂,相对而言技术要求也不是太高,资料也比较齐全,比较大众
修改服务器内存的比较少见,技术太高一般人没有办法入手
基本流程
- 找到游戏进程
- 然后找到游戏窗口的句柄
- 找到存储变量的内存地址
- 利用编程语言建立工具修改变量的数值
软件
CE
WPE
OD
内存挂
其实,制作内存挂也不是很难,步骤就这么几步
- 找游戏数据内存地址,偏移地址
- 修改内存地址的值,达到外挂的目的
- 用编程语言写出一个程序,使得外挂方便于携带传输,同时也方便于下次玩游戏直接使用
其实第三步主要是方便使用,方便贩卖等等,很多时候对于一个高手而言,根本不需要写出来,记录下内存地址,偏移地址以后,下次上游戏直接工具里面修改就是了。但是如果经常玩某个游戏,可以写出来,用不着每次玩游戏都去修改。(Cheat engine)
内存基址和物理地址
物理地址 动态,每次启动应用程序附加到内存时的位置是不同的,但是基址是不变的。
物理地址 = 一级偏移地址 + 偏移地址
一级偏移地址 = 二级偏移地址 + 偏移地址
二级偏移地址 = 三级偏移地址 + 偏移地址
三级偏移地址 = 游戏技能基址 + 偏移地址
在CE工具中,绿色代表静态地址,红色代表上一次操作改变的地址,黑色代表动态地址但上一次操作没有改变。而要找的基址就是静态基址。
模块:pywin32 ctypes
请认准窗口名称:Plants vs. Zombies 1.2.0.1073 RELEASE
以下均为16进制
基址: 007794f8
阳光:+868+5578 (两次偏移)
金钱: +950+50 (两次偏移)
实战——植物大战僵尸PVZ
进入游戏,查找阳光数值 -> 变动后再次查找,直到剩下一个
有时会发现有两个数值的情况,这个时候去检查一下每个地址的操作码执行情况,一般数值修改就是add和mov指令
找到这个地址后,用快捷键F6或者右键选中“找出是什么修改了这个地址”,回到游戏让数值发生变动(例如拾取阳光,放置植物等),就可以看到有操作码执行了。

- 首先分析一下
mov [edi+00005578],esi这条指令,我们在详细信息中看见,寄存器esi中的代码是0000039D这个值换算成十进制刚好是925,发现什么了吗,对了,这个925就是当前的阳光值。这条指令mov mov [edi+00005578],esi就是把寄存器esi的925的值放入edi+00005578这个地址中去,这个地址是谁呢?这个地址就是刚刚找出来的物理地址,刚好满足前面的公式:物理地址 = 阳光基址地址 + 偏移地址 - 接下看看
add [eax+00005578],ecx这条指令,add指令是相加的意思,前面的mov是赋值或者移动的意思,这条代码的意思就是,把ecx寄存器中的值加入[eax+00005578]这个地址中的值当中去,再看看寄存器eax的地址是多少?刚好又是23560070这个指针数值,那么,我们就可以确定一个事情,那就是23560070这个指针数值,肯定是上一级的地址的指针数值,那么上一级要么是基址,要么还是一个偏移地址,这个需要进一步来确认 - 把
23560070这个指针数值,再次放到CE中搜索一波,看看这个值对应的地址是多少,看看出来的是一个动态地址还是静态地址(在CE中,黑色的地址表示动态地址,绿色的表示静态地址),这里这个值是十六进制的,所以在搜索的时候,需要勾选搜索框前面的hex,这里填好以后点击新的扫描,首次扫描如图所示:

这里搜索出来的值有很多,要怎么确认呢?
多次点击再次扫描以后发现不管怎么点击都剩下来了52个结果,然后看了一下这些结果中并没有绿色的静态地址,说明至少有二级偏移。其他地址开头几位都比较相似,唯独有几个地址比较特殊,这可能就是我们需要的地址了
百度了一波,结果所说的是这种开头比较像的是数组,也就是说,遇到这种,基本都不是我们需要的地址,直接放弃,把这两个特殊的拉进下边的地址列表,开始分析,双击地址这一栏,在出来的更改地址窗口中复制下这个地址,然后再勾选指针选项,在出来的内容框中填写入刚刚复制的地址,在上面的内容框中写入刚刚找到的00005560这个偏移地址,得到的结果刚好是阳光的物理地址,最后的阳光值也正好和当前的阳光值一样,并且,这两个地址都是一样的,而且都是动态地址
如上图所示,这两个地址加上偏移地址都可以得到阳光物理地址,右键-找出是什么访问了这个地址,也就是快捷键的F5

进去以后也是和前面一样出来一个窗口,但是这两个窗口里面的内容就不一样了,第一个地址028BBA80在窗口中会出现内容,但是第二个地址0956BD3C在出现的窗口里面是一片空白,所以,这两个地址中,028BBA80才是我们要找的真正的一级偏移地址,如图所示:

如上第二幅图所示,找到了真正的一级偏移地址028BBA80后,访问这个地址的窗口中看这些代码指令,通过对比,发现这些代码都指向同一个指针数值028BBA80且都有偏移地址00000868,如图所示:


有四个怎么办?试一试


对了。
1 | import win32gui |

CD修改:
rule:
当植物处于可使用状态时,内存值为1
当植物处于CD状态时,内存值为0
植物种植后,内存值由0开始增加,这个增加的过程就是CD,当内存值到达一定数值后,就会自动归零,此时CD结束
基本概念
1、 进程:每一个应用程序/游戏启动,都会产生至少一个进程Process,在任务管理器里可以看到进程名称和进程PID。
2、 句柄:英文HANDLE,一个整数值。数据的地址需要变动,变动以后就需要有人来记录管理变动,就好像户籍管理一样,因此系统用句柄来记载数据地址的变更。肉眼看到的一个个文件夹,窗口,按钮,图标,应用程序能够通过句柄访问相应的对象的信息
3、 数据类型:游戏中的血量、蓝、生命值,我们将他们称之为变量,变量包含了变量名称和数据类型,那么它的名字就是”血量、生命值”等等,而它的数据类型决定了数值以何种方式存储到计算机的内存中,想要找到自身需要的变量,如果可以确定这个变量的数据类型或者有根据的推测来缩小变量的数据类型范围,那么对于快速定位该变量是具有帮助性的。以下是几种常见的变量类型:
整数型:游戏中比如血量、法力可能用到这种类型。
字节型:根据不同的编辑器,1个整形占用N个字节(N>1),一般很早之前出产的GBA游戏为了节省开销会用到这种类型。
浮点型:带有小数点的数字,如果金币或者伤害值带有小数点,那很可能是这种数据类型保存的。
文本型:比如世界喊话,人物命名,一般采用文本型保存这类数据。
4、 **钩子:**钩子(Hook),是Windows消息处理机制的一个平台,应用程序可以在上面设置子程序以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的。当消息到达后,在目标窗口处理函数之前处理它。钩子机制允许应用程序截获处理window消息或特定事件。
外挂现在大体上来讲分为三种,分别是模拟按键,WPE封包和内存挂
- 模拟键盘的,鼠标的,这种就叫做按键模拟,也叫脚本精灵
- 修改数据包的,这种就叫做WPE封包外挂,这种外挂相对而言比较稳定,但是对于技术要求难度也比较高,因为修改WPE封包,你需要知道和了解加密解密算法等等一系列的知识
- 修改本地内存的,这种相对而言比较常见,市场上面比较常见的也是这种游戏外挂,相对而言技术要求也不是太高,资料也比较齐全,比较大众
修改服务器内存的比较少见,技术太高一般人没有办法入手
基本流程
- 找到游戏进程
- 然后找到游戏窗口的句柄
- 找到存储变量的内存地址
- 利用编程语言建立工具修改变量的数值
软件
CE
WPE
OD
内存挂
其实,制作内存挂也不是很难,步骤就这么几步
- 找游戏数据内存地址,偏移地址
- 修改内存地址的值,达到外挂的目的
- 用编程语言写出一个程序,使得外挂方便于携带传输,同时也方便于下次玩游戏直接使用
其实第三步主要是方便使用,方便贩卖等等,很多时候对于一个高手而言,根本不需要写出来,记录下内存地址,偏移地址以后,下次上游戏直接工具里面修改就是了。但是如果经常玩某个游戏,可以写出来,用不着每次玩游戏都去修改。(Cheat engine)
内存基址和物理地址
物理地址 动态,每次启动应用程序附加到内存时的位置是不同的,但是基址是不变的。
物理地址 = 一级偏移地址 + 偏移地址
一级偏移地址 = 二级偏移地址 + 偏移地址
二级偏移地址 = 三级偏移地址 + 偏移地址
三级偏移地址 = 游戏技能基址 + 偏移地址
在CE工具中,绿色代表静态地址,红色代表上一次操作改变的地址,黑色代表动态地址但上一次操作没有改变。而要找的基址就是静态基址。
模块:pywin32 ctypes
请认准窗口名称:Plants vs. Zombies 1.2.0.1073 RELEASE
以下均为16进制
基址: 007794f8
阳光:+868+5578 (两次偏移)
金钱: +950+50 (两次偏移)
实战——植物大战僵尸PVZ
进入游戏,查找阳光数值 -> 变动后再次查找,直到剩下一个
有时会发现有两个数值的情况,这个时候去检查一下每个地址的操作码执行情况,一般数值修改就是add和mov指令
找到这个地址后,用快捷键F6或者右键选中“找出是什么修改了这个地址”,回到游戏让数值发生变动(例如拾取阳光,放置植物等),就可以看到有操作码执行了。

- 首先分析一下
mov [edi+00005578],esi这条指令,我们在详细信息中看见,寄存器esi中的代码是0000039D这个值换算成十进制刚好是925,发现什么了吗,对了,这个925就是当前的阳光值。这条指令mov mov [edi+00005578],esi就是把寄存器esi的925的值放入edi+00005578这个地址中去,这个地址是谁呢?这个地址就是刚刚找出来的物理地址,刚好满足前面的公式:物理地址 = 阳光基址地址 + 偏移地址 - 接下看看
add [eax+00005578],ecx这条指令,add指令是相加的意思,前面的mov是赋值或者移动的意思,这条代码的意思就是,把ecx寄存器中的值加入[eax+00005578]这个地址中的值当中去,再看看寄存器eax的地址是多少?刚好又是23560070这个指针数值,那么,我们就可以确定一个事情,那就是23560070这个指针数值,肯定是上一级的地址的指针数值,那么上一级要么是基址,要么还是一个偏移地址,这个需要进一步来确认 - 把
23560070这个指针数值,再次放到CE中搜索一波,看看这个值对应的地址是多少,看看出来的是一个动态地址还是静态地址(在CE中,黑色的地址表示动态地址,绿色的表示静态地址),这里这个值是十六进制的,所以在搜索的时候,需要勾选搜索框前面的hex,这里填好以后点击新的扫描,首次扫描如图所示:

这里搜索出来的值有很多,要怎么确认呢?
多次点击再次扫描以后发现不管怎么点击都剩下来了52个结果,然后看了一下这些结果中并没有绿色的静态地址,说明至少有二级偏移。其他地址开头几位都比较相似,唯独有几个地址比较特殊,这可能就是我们需要的地址了
百度了一波,结果所说的是这种开头比较像的是数组,也就是说,遇到这种,基本都不是我们需要的地址,直接放弃,把这两个特殊的拉进下边的地址列表,开始分析,双击地址这一栏,在出来的更改地址窗口中复制下这个地址,然后再勾选指针选项,在出来的内容框中填写入刚刚复制的地址,在上面的内容框中写入刚刚找到的00005560这个偏移地址,得到的结果刚好是阳光的物理地址,最后的阳光值也正好和当前的阳光值一样,并且,这两个地址都是一样的,而且都是动态地址
如上图所示,这两个地址加上偏移地址都可以得到阳光物理地址,右键-找出是什么访问了这个地址,也就是快捷键的F5

进去以后也是和前面一样出来一个窗口,但是这两个窗口里面的内容就不一样了,第一个地址028BBA80在窗口中会出现内容,但是第二个地址0956BD3C在出现的窗口里面是一片空白,所以,这两个地址中,028BBA80才是我们要找的真正的一级偏移地址,如图所示:

如上第二幅图所示,找到了真正的一级偏移地址028BBA80后,访问这个地址的窗口中看这些代码指令,通过对比,发现这些代码都指向同一个指针数值028BBA80且都有偏移地址00000868,如图所示:


有四个怎么办?试一试


对了。
1 | import win32gui |

CD修改:
rule:
当植物处于可使用状态时,内存值为1
当植物处于CD状态时,内存值为0
植物种植后,内存值由0开始增加,这个增加的过程就是CD,当内存值到达一定数值后,就会自动归零,此时CD结束
对了。
1 | import win32gui |
基本概念
1、 进程:每一个应用程序/游戏启动,都会产生至少一个进程Process,在任务管理器里可以看到进程名称和进程PID。
2、 句柄:英文HANDLE,一个整数值。数据的地址需要变动,变动以后就需要有人来记录管理变动,就好像户籍管理一样,因此系统用句柄来记载数据地址的变更。肉眼看到的一个个文件夹,窗口,按钮,图标,应用程序能够通过句柄访问相应的对象的信息
3、 数据类型:游戏中的血量、蓝、生命值,我们将他们称之为变量,变量包含了变量名称和数据类型,那么它的名字就是”血量、生命值”等等,而它的数据类型决定了数值以何种方式存储到计算机的内存中,想要找到自身需要的变量,如果可以确定这个变量的数据类型或者有根据的推测来缩小变量的数据类型范围,那么对于快速定位该变量是具有帮助性的。以下是几种常见的变量类型:
整数型:游戏中比如血量、法力可能用到这种类型。
字节型:根据不同的编辑器,1个整形占用N个字节(N>1),一般很早之前出产的GBA游戏为了节省开销会用到这种类型。
浮点型:带有小数点的数字,如果金币或者伤害值带有小数点,那很可能是这种数据类型保存的。
文本型:比如世界喊话,人物命名,一般采用文本型保存这类数据。
4、 **钩子:**钩子(Hook),是Windows消息处理机制的一个平台,应用程序可以在上面设置子程序以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的。当消息到达后,在目标窗口处理函数之前处理它。钩子机制允许应用程序截获处理window消息或特定事件。
外挂现在大体上来讲分为三种,分别是模拟按键,WPE封包和内存挂
- 模拟键盘的,鼠标的,这种就叫做按键模拟,也叫脚本精灵
- 修改数据包的,这种就叫做WPE封包外挂,这种外挂相对而言比较稳定,但是对于技术要求难度也比较高,因为修改WPE封包,你需要知道和了解加密解密算法等等一系列的知识
- 修改本地内存的,这种相对而言比较常见,市场上面比较常见的也是这种游戏外挂,相对而言技术要求也不是太高,资料也比较齐全,比较大众
修改服务器内存的比较少见,技术太高一般人没有办法入手
基本流程
- 找到游戏进程
- 然后找到游戏窗口的句柄
- 找到存储变量的内存地址
- 利用编程语言建立工具修改变量的数值
软件
CE
WPE
OD
内存挂
其实,制作内存挂也不是很难,步骤就这么几步
- 找游戏数据内存地址,偏移地址
- 修改内存地址的值,达到外挂的目的
- 用编程语言写出一个程序,使得外挂方便于携带传输,同时也方便于下次玩游戏直接使用
其实第三步主要是方便使用,方便贩卖等等,很多时候对于一个高手而言,根本不需要写出来,记录下内存地址,偏移地址以后,下次上游戏直接工具里面修改就是了。但是如果经常玩某个游戏,可以写出来,用不着每次玩游戏都去修改。(Cheat engine)
内存基址和物理地址
物理地址 动态,每次启动应用程序附加到内存时的位置是不同的,但是基址是不变的。
物理地址 = 一级偏移地址 + 偏移地址
一级偏移地址 = 二级偏移地址 + 偏移地址
二级偏移地址 = 三级偏移地址 + 偏移地址
三级偏移地址 = 游戏技能基址 + 偏移地址
在CE工具中,绿色代表静态地址,红色代表上一次操作改变的地址,黑色代表动态地址但上一次操作没有改变。而要找的基址就是静态基址。
模块:pywin32 ctypes
请认准窗口名称:Plants vs. Zombies 1.2.0.1073 RELEASE
以下均为16进制
基址: 007794f8
阳光:+868+5578 (两次偏移)
金钱: +950+50 (两次偏移)
实战——植物大战僵尸PVZ
进入游戏,查找阳光数值 -> 变动后再次查找,直到剩下一个
有时会发现有两个数值的情况,这个时候去检查一下每个地址的操作码执行情况,一般数值修改就是add和mov指令
找到这个地址后,用快捷键F6或者右键选中“找出是什么修改了这个地址”,回到游戏让数值发生变动(例如拾取阳光,放置植物等),就可以看到有操作码执行了。

- 首先分析一下
mov [edi+00005578],esi这条指令,我们在详细信息中看见,寄存器esi中的代码是0000039D这个值换算成十进制刚好是925,发现什么了吗,对了,这个925就是当前的阳光值。这条指令mov mov [edi+00005578],esi就是把寄存器esi的925的值放入edi+00005578这个地址中去,这个地址是谁呢?这个地址就是刚刚找出来的物理地址,刚好满足前面的公式:物理地址 = 阳光基址地址 + 偏移地址 - 接下看看
add [eax+00005578],ecx这条指令,add指令是相加的意思,前面的mov是赋值或者移动的意思,这条代码的意思就是,把ecx寄存器中的值加入[eax+00005578]这个地址中的值当中去,再看看寄存器eax的地址是多少?刚好又是23560070这个指针数值,那么,我们就可以确定一个事情,那就是23560070这个指针数值,肯定是上一级的地址的指针数值,那么上一级要么是基址,要么还是一个偏移地址,这个需要进一步来确认 - 把
23560070这个指针数值,再次放到CE中搜索一波,看看这个值对应的地址是多少,看看出来的是一个动态地址还是静态地址(在CE中,黑色的地址表示动态地址,绿色的表示静态地址),这里这个值是十六进制的,所以在搜索的时候,需要勾选搜索框前面的hex,这里填好以后点击新的扫描,首次扫描如图所示:

这里搜索出来的值有很多,要怎么确认呢?
多次点击再次扫描以后发现不管怎么点击都剩下来了52个结果,然后看了一下这些结果中并没有绿色的静态地址,说明至少有二级偏移。其他地址开头几位都比较相似,唯独有几个地址比较特殊,这可能就是我们需要的地址了
百度了一波,结果所说的是这种开头比较像的是数组,也就是说,遇到这种,基本都不是我们需要的地址,直接放弃,把这两个特殊的拉进下边的地址列表,开始分析,双击地址这一栏,在出来的更改地址窗口中复制下这个地址,然后再勾选指针选项,在出来的内容框中填写入刚刚复制的地址,在上面的内容框中写入刚刚找到的00005560这个偏移地址,得到的结果刚好是阳光的物理地址,最后的阳光值也正好和当前的阳光值一样,并且,这两个地址都是一样的,而且都是动态地址
如上图所示,这两个地址加上偏移地址都可以得到阳光物理地址,右键-找出是什么访问了这个地址,也就是快捷键的F5

进去以后也是和前面一样出来一个窗口,但是这两个窗口里面的内容就不一样了,第一个地址028BBA80在窗口中会出现内容,但是第二个地址0956BD3C在出现的窗口里面是一片空白,所以,这两个地址中,028BBA80才是我们要找的真正的一级偏移地址,如图所示:

如上第二幅图所示,找到了真正的一级偏移地址028BBA80后,访问这个地址的窗口中看这些代码指令,通过对比,发现这些代码都指向同一个指针数值028BBA80且都有偏移地址00000868,如图所示:


有四个怎么办?试一试


对了。
1 | import win32gui |

CD修改:
rule:
当植物处于可使用状态时,内存值为1
当植物处于CD状态时,内存值为0
植物种植后,内存值由0开始增加,这个增加的过程就是CD,当内存值到达一定数值后,就会自动归零,此时CD结束
CD修改:
rule:
当植物处于可使用状态时,内存值为1
当植物处于CD状态时,内存值为0
植物种植后,内存值由0开始增加,这个增加的过程就是CD,当内存值到达一定数值后,就会自动归零,此时CD结束