易语言游戏辅助开发原理分析

article/2025/3/5 4:51:28

外挂现在大体上来讲分为三种,分别是模拟按键,WPE封包和内存挂。比如模拟键盘的,鼠标的,这种就叫做按键模拟,也叫脚本精灵;还有修改数据包的,这种就叫做WPE封包外挂,这种外挂相对而言比较稳定,但是对于技术要求难度也比较高,因为修改WPE封包,你需要知道和了解加密解密算法等等一系列的知识;还有最后一种就是修改本地内存的,这种相对而言比较常见,市场上面比较常见的也是这种游戏外挂,相对而言技术要求也不是太高,资料也比较齐全,比较大众;但好像没有修改服务器内存的哦,呵呵。其实修改服务器也是有办法的,只是技术太高一般人没有办法入手而已。这里就记一下本地修改内存的外挂制作原理。

       其实,制作内存挂也不是很难,步骤就这么几步。第一步,找游戏数据内存地址,偏移地址;第二步,修改内存地址的值,达到外挂的目的;第三步,用编程语言写出一个程序,使得外挂方便于携带传输,同时也方便于下次玩游戏直接使用。其实第三步主要是方便使用,方便贩卖等等,很多时候对于一个高手而言,根本不需要写出来,记录下内存地址,偏移地址以后,下次上游戏直接工具里面修改就是了。但是如果经常玩某个游戏,可以写出来,用不着每次玩游戏都去修改。

外挂开发第一步——找游戏内存地址
       说道找游戏内存地址,偏移地址,这可能是整个游戏外挂开发中最难的一步,因为一个大型的网络游戏,可能一个技能或者血条的内存基址可能会偏移很多次,最后才得到一个内存地址也叫物理地址。那么,这里有个问题来了,我们为什么要找技能或者血条的内存基址?不是直接修改物理地址就行了吗?这样是不行的,因为物理地址是会变动的;举个例子,每次关闭游戏重新启动以后,游戏进程是会变动的,同样的,游戏代码在内存中的存放位置,因为游戏结束以后,释放掉了内存地址,这个内存地址可能会被其他程序所占用,所以是会变动的;当你关闭游戏重新进入以后,游戏的技能或者血条在内存中的物理地址就变了。但是,游戏技能或者血条的内存基址是不会变动的,在内存中的物理地址不管怎么变动,内存基址都不会变动。那么内存基址和物理地址之间是一种什么样的关系呢?看下面这个公式:

       如上公式,一个游戏的物理地址是等于这个游戏的基址加上偏移地址的,所以,想要每次重新进入游戏都能够找到准确的物理地址进行修改内存地址的值,达到外挂的目的的话,就必须找到这个物理地址当前对应的偏移地址和基址,只有这样才能够确保每次登陆游戏都能够修改物理地址的值。下面,就通过《植物大战僵尸》这款经典的单机游戏来演示一下找这款游戏的内存基址的过程。
       首先,介绍一款找游戏内存基址的工具Cheat Engine简称CE,Cheat Engine是一款内存修改编辑工具 ,它允许修改游戏或软件内存数据,以得到一些其他功能。它包括16进制编辑,反汇编程序,内存查找工具。与同类修改工具相比,它具有强大的反汇编功能,且自身附带了外挂制作工具,可以用它直接生成外挂。好了,这个工具的具体介绍有兴趣的去百度,这里也就是百度了一下,简单的说了一下这个工具的作用,下面,打开植物大战僵尸,打开CE,在CE中找到植物大战僵尸,附加到CE中去,如图所示:
 

 

游戏附加到OD以后,看自己想修改哪儿的内容,就去找对应的内存基址,怎么找呢?比如修改无限阳光吧;首先,看一下最开始的阳光是多少?比如这里,开局阳光是50,就在CE中数值一项输入50,扫描类型选择精确数值在数值类型选择4字节然后点击首次搜索,这里不懂为什么这样选择的,自己百度科普一下基础知识。如图所示:
 

如上图所示,出来了这么多的地址,究竟哪一个是我们想要的物理地址呢?接下来就需要在游戏中改动一下阳光的值,然后点击再次搜索,结果就会出来了,如图所示:
 

如上第二幅图所示,我们想要的物理地址就出来了,把这个地址添加到地址列表中去,然后修改一下阳光的值,确认一下是不是想要的地址,不过这里要注意,在修改的时候,我们需要点击列表地址中我们拉下来的这一行的数值这一栏,其他是修改地址和字节类型用的,不要乱动,如图所示:
 

如上图所示,这就是我们想要的物理地址,这里我们可以锁定这个内存地址的值,一直是100或者200或者更多。只需要点击前面激活这一栏选中就行了,从而达到锁定阳光值的效果。但是当关闭游戏,重新进入,这个地址就没用了,又需要重新找。所以,这里就需要找到真正的阳光值的基址和偏移地址,那么,怎么找呢?我们找到这个物理地址以后,就右键,选择找出是什么改写了这个地址也就是快捷键F6这个名字每个版本的汉化效果都不一样的,这里就会弹出一个窗口,是空白,然后我们再到游戏中改变阳光的值,看看这个空白窗口中出现的代码,如图所示:
 
 
 


如上图三所示,分析这两条代码,看见最终都指向了一个指针数值17C88118,然后我们分析一下这两条代码什么意思,相信稍微懂一点汇编语言的人都能够看懂。首先分析一下mov [edi+00005560],esi这条指令,我们在详细信息中看见,寄存器esi中的代码是000026DE这个值换算成十进制刚好是9950,那么这个9950是怎么来的呢?其实就是刚刚我在做上一步的时候,说了要变动游戏中的阳光值,所以我先直接把阳光值修改成了10000,然后种了一个石头,刚好是50,所以阳光值发生了变化,这条指令mov [edi+00005560],esi就是把寄存器esi的9950的阳光值放入edi+00005560这个地址中去,这个地址是谁呢?其实这个地址就是刚刚找出来的物理地址,刚好满足前面的公式:物理地址 = 阳光基址地址 + 偏移地址不信的朋友可以自己加一下算一算,用寄存器edi里面的指针数值17C88118加上偏移地址00005560看看是不是等于阳光物理地址17C8D678。接下看看add [eax+00005560],ecx这条指令,add指令是相加的意思,前面的mov是赋值或者移动的意思,这条代码的意思就是,把ecx寄存器中的值加入[eax+00005560]这个地址中的值当中去,再看看寄存器eax的地址是多少?刚好又是17C88118这个指针数值,那么,我们就可以确定一个事情,那就是17C88118这个指针数值,肯定是上一级的地址的指针数值,那么上一级要么是基址,要么还是一个不偏移地址,这个需要进一步来确认。怎么确认呢?这里不是出来了17C88118这个指针数值嘛,再次放到CE中搜索一波,看看这个值对应的地址是多少,看看出来的是一个动态地址还是静态地址,这里需要普及一个知识点,在CE中,黑色的地址表示动态地址,绿色的表示静态地址,那好,丢到CE中搜索,这里这个值是十六进制的,所以在搜索的时候,需要勾选搜索框前面的hex,也就是十六进制搜索的意思,这里填好以后点击新的扫描,首次扫描如图所示:
 

这里可以看见结果为56个地址,这么多,我们怎么来确认究竟是哪个呢?可以看见还有很多红色的地址。其实,这里的红色的地址,是一直在改变的地址,我们不用管它,直接点击再次扫描,把这些红色的过滤掉,然后看看还剩下的地址有哪些,如图所示:
 

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

如上图所示,这两个地址加上偏移地址都可以得到阳光物理地址,那么哪个才是我们所需要的真正的一级偏移地址呢?这里就需要我们对这两个地址进行详细的分析了,同样的右键-找出是什么访问了这个地址,也就是快捷键的F5,这里一定不要搞混淆了,前面是找出是什么改写了这个地址,不一样的!我们进去以后也是和前面一样出来一个窗口,但是这两个窗口里面的内容就不一样了,第一个地址0264A400在F5找出是什么访问了这个地址以后的窗口中会出现内容,但是第二个地址0956BD3C在出现的窗口里面是一片空白,所以,这两个地址中,0264A400才是我们要找的真正的一级偏移地址,如图所示:
 
 

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

如上图所示,既然所有的代码都指向了同一个指针数值02649C98那么就继续按照前面找一级偏移地址的办法,丢到CE中,继续新的十六进制搜索,搜索指针数值02649C98以后得到如下图所示的结果:
 

如上图所示,一共搜索到923个地址,而且还有几个绿色的静态地址,这里我们就可以尝试一下了,看看这几个绿色的静态地址究竟是不是我们想要的阳光基址,同样的原理,我们把几个绿色的静态地址拉到地址列表中,在地址这一栏双击,在出来的更改地址窗口中复制下这个地址,然后再勾选指针选项,在出来的内容框中填写入刚刚复制的地址,在上面的内容框中写入刚刚找到的00000768这个偏移地址,然后再点击添加偏移在出来的内容框中输入刚刚第一次找到的00005560这个偏移地址,得到的结果刚好是阳光物理地址和阳光当前的值,并且这几个静态地址的结果都是一样的。这里需要说明一下,为什么这里要填写两个偏移地址,因为刚刚第一次找到的是一级偏移地址,这次是二级偏移地址了,所以,这里

如图所示:
 
 
 
 

如上四幅图所示,四个静态地址最终结果都是一样的,都可以用作阳光基址,那么就随便取一个就行。这样,阳关的基址和偏移地址就找到了,阳光的基址和偏移地址如下:

     这里可能有人会问,一级偏移地址不是我们第一次找出来的地址吗?你这里的一级偏移不应该是00005560吗?对,也不对,我这里所说的一级偏移不是一级偏移地址的偏移,而是基于阳光基址的一级偏移,可以理解为从阳关基址开始,第一次偏移是00000768第二次偏移才是00005560,这样做主要是为了方便后面写代码。好了,这就是找游戏基址的思路,同样的道理,还可以找植物冷却时间,不过找冷却时间思路不太一样,因为冷却时间我们不知道具体的值,可以通过找未知的初始化值的方式来找,也可以通过字节的方式来找,具体详见百度,我这里只是把找游戏内存基址的思路和过程中怎么分析的给写了出来,免得后人掉坑,比如我在找植物冷却时间的时候,就掉了一个坑,我是通过字节的方式来找来找的,通过植物冷却的时候为0,冷却好了为1找到了物理地址以后,在找一级偏移地址的时候,忘记把搜索方式字节换为4字节型了,找了半天没找到!其他思路是一样的!

外挂开发第二步——修改游戏内存地址的值
     其实,这一步就比较简单了,比如阳光的值,找到了以后,我们每次上游戏,直接在CE的地址列表框中手动添加地址,把像上面我们验证这几个基址的时候一样,把基址,偏移地址填写好,然后在数值这一栏双击,修改数值成为我们想要的阳光值就可以了,冷却就把数值改为1即可,这一步就不用过多的提及了!

外挂开发第三步——编写游戏外挂
     其实编写外挂只有会写程序的人都知道该怎么弄了,只要找出来想要的功能的内存基址,偏移等,直接在程序中写上读取和写入内存地址就行了,下面就是我写的植物大战僵尸的外挂的源码,简单的分析一波:

     由于是写的,比较简单快捷,我大概说一下就好了,就是在外挂软件启动以后,我就读取植物大战僵尸的游戏进程ID,然后读取阳光的物理地址,加以输出显示,然后在启动窗口创建完毕的时候还加了一个时钟,达到实时监控阳光值的目的,然后设置了几个按钮,分别是增加阳光、锁定阳光、锁定冷却时间和减少阳光、取消锁定阳光、取消锁定冷却时间。下面分别来说一下几个按钮怎么实现功能的。

增加阳光
增加阳光就定义了一个全局变量,变量中获取输入框中的值,然后让阳光物理地址里面的值加上输入的值,就达到了增加阳光的目的!

减少阳光
减少阳光和增加阳关的写法一模一样,只不过把阳光物理地址里面的值设置为了减去输入的值而已,这样就达到了减少阳关的目的!

锁定阳光
锁定阳光我定义了一个时钟,设置时钟周期为999毫秒,然后设置了阳光固定值1000。当按钮锁定阳光被单击以后,就执行这个时钟的时钟周期,也就是每隔999毫秒执行一次时钟下面的代码,也就是执行在阳光物理地址中改阳光的值为1000,这样就达到了锁定阳光的目的!

取消锁定阳光
取消锁定阳光其实就是把锁定阳光这个时钟的时钟周期设置为0,当取消锁定阳光的按钮被单击以后,就执行这个时钟周期事件,时钟下面的代码也就不执行了,达到了取消阳光锁定的目的!
     后面的锁定冷却时间和取消锁定冷却时间的原理和上面锁定阳光和取消锁定阳光的原理一样,就不再做详细的解释了,因为我这里针对每个栏位的植物做了单独的冷却锁定和取消锁定,所以代码比较长,其实在找植物冷却时间的时候,可以配合OD,直接找到冷却时间前面的循环干掉,这样所有的植物栏的冷却时间都没了!

总结
     其实不管是单机游戏也好,还是网络游戏也罢,原理都一样,只不过,可能游戏类型不同,所需要的东西也不一样,比如射击类游戏,就需要D3D技术来做人物透视的定位等等,这个具体的方法,可以百度参考。但是万变不离其中,都是找内存基址,找偏移地址。


http://chatgpt.dhexx.cn/article/Pw0QdMw8.shtml

相关文章

Python新手开发的飞机大战

飞机大战import pygame import random import math # 数学模块# 初始化界面 pygame.init() # 设置窗口大小 windows pygame.display.set_mode((800, 600)) # 设置窗口标题 pygame.display.set_caption("小赵同学") # 引入图片 logo icon pygame.image.load(logo.j…

【Python游戏开发】百行Python代码开发出飞机大战小游戏,原来Python可以这么强大

大家好,今天给大家介绍一个小项目,只用一百行代码就可以开发出的游戏。 安装pygame 下载对应python版本的pygame 运行以下命令 创建Pygame窗口及响应用户输入 新建一个文件夹alien_invasion,并在文件夹中新建alien_invasion.py文件&#x…

终极PK | Python相较于Java的优势在哪里?

首先为避免引战,我要强调,“无论是Python还是Java都是目前主流的编程语言,没有好坏之分,有的只是应用场景不同,Python和Java都是世界上最好的语言!” 接下来我们从语言本身、应用场景以及流行趋势等多个方…

【编程项目开源】仿微信飞机大战(Python版)

背景 前面已输出多个系列: 《十余种编程语言做个计算器》 《十余种编程语言写2048小游戏》 《17种编程语言10种排序算法》 《十余种编程语言写博客系统》 《十余种编程语言写云笔记》 《N种编程语言做个记事本》 《N种编程语言做个应用市场(appstore)》 《N种编程语…

Java太难,我选python?一个工具,带你开启新世界大门

前不久,4月份十大编程语言排行榜新鲜出炉。据TIOBE公布的数据来看,较上个月,TOP5基本没什么变化。Java稳居第一,随后是C、python、C、C#。 可是,有研究表明,十大难学编程语言中,Java排第3&…

用python编写飞机大战

博主介绍:是一名刚来到CSDN的小萌新 飞机大战 效果显示代码实现领取代码资源 效果显示 代码实现 领取代码资源 效果显示 代码实现 # -*- coding: utf-8 -*- import pygame # 导入pygame库 from pygame.locals import * # 导入pygame库中的一些常量 …

python云计算有哪些岗位,华为python教程下载

本篇文章给大家谈谈华为python语言通用编程规范,以及python云计算有哪些岗位,希望对各位有所帮助,不要忘了收藏本站喔。 摘要:以 相反的顺序反转和处理字符串可能是编程中的一项常见任务。Python 提供了一组工具和技术&#xff0c…

java和python哪个功能更好,java和python哪个更有前景

大家好,本文将围绕java和python哪个更有发展前景展开说明,java和python哪个功能更好是一个很多人都想弄明白的事情,想搞清楚java和python哪个更有前景需要先了解以下几个事情。 java语言和python语言发展前景哪个好? 【导语】众所周知&#…

用Python写了一个网易云,太强了(附源码)

前言 今天的项目太强了,用 Python 整出一个网易云来,实现音乐自由! 环境 Python3.6.8 PyCharm 依赖包 PyQt5:用于图形界面的开发 shelve:用于序列化对象 requests:爬取数据 功能展示 根据关键词&…

java和python哪个更有前景,java和python哪个有前途

大家好,小编来为大家解答以下问题,java和python哪个更有前景,java和python哪个有前途,今天让我们一起来看看吧! 前言 如今开发编程行业的发展迅猛,it技术的更新迭代十分快速,社会发展的方方面面…

【Python】Java工程师学Python之一分钟了解Python

文章目录 为何要学习PythonPython概述编译和运行过程Python主要应用的领域Python的特点Python优点与Java的区别最后 为何要学习Python 鲁迅先生说的好,不爱学习的开发不是好开发(帮我压下先生的棺材板~),开个玩笑,主要…

Python---实现飞机大战源码

plane_main.py import pygame from plane_sprites import *class PlaneGame(object):"""飞机大战主游戏"""def __init__(self):print("游戏初始化")# 1.创建游戏的窗口self.screen pygame.display.set_mode(SCREEN_RECT.size)# 2.创…

Python项目——飞机大战!

文章目录 一、项目介绍——飞机大战实战步骤确认模块 —— pygame安装 pygame验证安装 二、pygame 快速入门项目准备1. 使用 pygame 创建图形窗口小节目标1.1 游戏的初始化和退出1.2 理解游戏中的坐标系案例演练 1.3 创建游戏主窗口1.4 简单的游戏循环 2. 理解 **图像** 并实现…

python和java哪个更有前景,python和java哪个更有前途

大家好,小编为大家解答python和java哪个好学,零基础的问题。很多人还不知道python和java哪个更容易入门,现在让我们一起来看看吧! 进入编程行业是很多人的梦想,现在越来越多的人都想要通过培训的方式进入IT行业中,但是…

Python项目实战之《飞机大战游戏》

目录 一、Pygame库包简介 二、Pygame安装 三、项目开发思路 3.1前言 3.2飞机大战开发步骤 一、Pygame库包简介 Pygame是一个基于python的游戏开发库,它提供一系列的工具和接口,使开发人员能够轻松的创建各种类型的游戏,包括2D游戏和简单…

Java调用Python语言及第三方Python库

#pic_center 400x 系列文章&#xff1a; 文章目录 1、导入依赖 <!--Python&Java--><dependency><groupId>org.python</groupId><artifactId>jython-standalone</artifactId><version>2.7.2</version></dependency>…

Python 代码托管到码云平台,原来这么简单

什么是代码托管&#xff1f;代码托管又有什么好处&#xff1f; 场景1&#xff1a;我有2个电脑&#xff0c;公司一台&#xff0c;家里一台。我想在两台电脑上都进行同步开发。这时候我只要git push/pull一下就能够同步了&#xff0c;不再需要用U盘拷来拷去 场景2&#xff1a;我…

Python游戏开发-超级海盗!!!

开发环境配置 安装python环境后&#xff0c;下载pygame模块&#xff0c;使用如下命令 pip install pygame 注&#xff1a;该项目使用了一些新特性&#xff0c;使用3.10以上的版本 游戏项目介绍 游戏分为两个模块&#xff0c;分别是编辑模块和关卡模块&#xff0c;在编辑模…

chatgpt赋能python:Python编译成Java字节码:一个全新的可能性

Python编译成Java字节码&#xff1a;一个全新的可能性 Python作为一种高级编程语言&#xff0c;有其独特的优点和特点&#xff0c;被广泛应用于各个领域。然而&#xff0c;随着Python在企业级应用中的广泛应用&#xff0c;性能和安全等方面的问题也越来越凸显出来。这时&#…

鲲鹏法(一)python环境搭建

简单总结一下python的开发环境&#xff08;偏科学计算一些&#xff09;&#xff0c;Pycharm等之后再补了 python环境搭建 一.Python二.IPython三.Jupyter1.Jupyder QtConsole(了解即可)2.Jupyder Notebook3.Jupyder Lab4.单元类型5.编辑单元6.Markdown单元7.输出显示8.nbconver…