龙空技术网

“黑客”入门学习之“单机游戏外挂原理与实现”

安界 2043

前言:

当前同学们对“编程制作接金币游戏怎么做”大概比较注重,同学们都想要分析一些“编程制作接金币游戏怎么做”的相关内容。那么小编在网络上汇集了一些有关“编程制作接金币游戏怎么做””的相关内容,希望各位老铁们能喜欢,各位老铁们一起来了解一下吧!

“黑客”入门学习之“单机游戏外挂原理与实现”

昨天给小伙伴们分享了一篇"游戏外挂原理与实现"的文章,小伙伴们很热情,反响很好,好多朋友私信我,或者直接回复我"写的是不错,但是还是一头雾水,作者可不可以先教简单的单机游戏外挂制作过程啊?"。

今天就以本篇文章分享一下单机游戏外挂原理与实现?

单机版游戏外挂可以简称为游戏修改器,单机游戏修改器的原理主要是通过修改游戏程序的内存数据或存盘文件来修改游戏中的相关数据,使之达到"无敌"的效果。单机游戏外挂主要功能可以分为三类:模拟键盘操作、模拟鼠标操作、修改内存数据。这三个功能最难实现的是修改内存数据。

那么好,我们进入正题,开启游戏外挂制作流程的讲解:想修改内存数据我们首先就要找到游戏进程,然后找到游戏窗口的句柄,最后找到存储变量的内存地址,这时候再通过编程工具编译制作出一款游戏修改器,就可以实现游戏作弊喽。

一、 先熟悉几个技术基本概念:

1、 进程:每一个应用程序/游戏启动,都会产生至少一个进程Process,在任务管理器里可以看到进程名称和进程PID。

2、 句柄:英文HANDLE,一个整数值。数据的地址需要变动,变动以后就需要有人来记录管理变动,就好像户籍管理一样,因此系统用句柄来记载数据地址的变更。肉眼看到的一个个文件夹,窗口,按钮,图标,应用程序能够通过句柄访问相应的对象的信息

3、 数据类型:游戏中的血量、蓝、生命值,我们将他们称之为变量,变量包含了变量名称和数据类型,那么它的名字就是"血量、生命值"等等,而它的数据类型决定了数值以何种方式存储到计算机的内存中,想要找到自身需要的变量,如果可以确定这个变量的数据类型或者有根据的推测来缩小变量的数据类型范围,那么对于快速定位该变量是具有帮助性的。以下是几种常见的变量类型:

整数型:游戏中比如血量、法力可能用到这种类型。

字节型:根据不同的编辑器,1个整形占用N个字节(N>1),一般很早之前出产的GBA游戏为了节省开销会用到这种类型。

浮点型:带有小数点的数字,如果金币或者伤害值带有小数点,那很可能是这种数据类型保存的。

文本型:比如世界喊话,人物命名,一般采用文本型保存这类数据。

4、 钩子:钩子(Hook),是Windows消息处理机制的一个平台,应用程序可以在上面设置子程序以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的。当消息到达后,在目标窗口处理函数之前处理它。钩子机制允许应用程序截获处理window消息或特定事件。

二、熟悉基本流程

1) 找到游戏进程

2) 然后找到游戏窗口的句柄

3) 找到存储变量的内存地址

4) 利用编程语言建立工具修改变量的数值

针对以上流程我们该如何操作实现呢?

高手可以利用编程语言,如C#、C++、汇编等编程语言制作脚本程序进行获取,对于初级入门选手可以选择另外一种简单的方式,使用开源的工具去完成内存数据的修改。好的,那么今天我们就教大家一款很好用的游戏外挂制作工具"Cheat Engine"。

三、 学会利用"Cheat Engine"工具读取和修改游戏内存数据

1、简介

作弊引擎(Cheat Engine)是一个开源工具,旨在帮助玩家修改在窗口下运行的单人游戏,以便可以根据自己的喜好使其更难或更容易(,还包含其他有用的工具来帮助调试游戏甚至普通应用程序,并帮助您通过后门程序检查内存修改来保护您的系统,甚至包含一些方法可以从常规方法中取消隐藏。

它配有内存扫描器,可以快速扫描游戏中使用的变量,并允许您更改它们,但它还具有调试器,反汇编器,汇编器,speedhack,培训师制造商,直接3D操纵工具,系统检测工具等。除了这些工具,它还提供了广泛的脚本支持,这将有助于经验丰富的开发人员轻松创建自己的应用程序,并与其他人分享。

Cheat Engine是我见过的比较优秀的游戏作弊工具。它的优点多不胜数,虽然单独从搜索游戏里面的数值来说,它并不比其他同类软件强多少,但它不仅仅是个游戏修改工具,它还有其他游戏修改软件所没有的一些特点,例如:它有强大的反汇编功能,这个是别的游戏工具中几乎没有的;还有,它本身就自带了外挂制作工具,可以直接由它生成外挂。而它的界面非常简洁朴素,这也是我喜欢它的原因之一。

2、举例来阐述CE获取游戏内存数据地址的过程

2.1利用CE工具获取"魂斗罗单机游戏"内存数据地址

步骤一:先打开游戏用CE来查找游戏中 1号键中武器的子弹数基址由于这是单机游戏, 游戏中的基址不会改变, 如果是网络游戏, 基址会随着游戏的更新而改变.

如下图大家所见, 1号键中的武器子弹数为; 100

步骤二:

打开CE, 如下图:

我们再附加游戏进程.

点击 OPEN

步骤三:附加游戏进程之后我们在数值这里添写 子弹数 100 再点 首次扫描

这里找到了749个结果, 这么多结果, 我们也不确定哪个才是真正的子弹数地址, 那们步骤四:我们就进入到游戏里面, 开几枪.好的, 现在剩下 86个子弹, 那么我们就在 CE中输入86, 点击 再次扫描

最后得到两个地址, 经过修改这两个地址的数值, 我们得到了第二个是正确的.00506d20

现在子弹数被锁定为了 830

大概获取内存地址的思路都是这样的。

3、利用CE工具修改"魔兽争霸"游戏数据的过程(简单修改个攻击力值)

具体步骤如下:

步骤一:

先运行魔兽进入游戏

步骤二:

打开

然后点击左上角电脑图标:选则war3。打开

步骤三:开始修改攻击下图为装备武器后数据(绿色字体为武器加攻击量)

在CE中输入11首次扫描

扫描后左边对话框出现许多11

步奏四:

卸下武器

在HEX中输入0(点击再次扫描)出现以下图片

依旧有许多数值。

接下来在船上武器输入11.如此反复知道数值变少

这种情况这些地址都可能是攻击。选取第一个

点击红色箭头

双击下面的值(11)

下面就可以输入自己满意的数值。比如1000

回到游戏发现攻击力已被更改为1000。

四、 学会自制一款单机游戏外挂

制作过程一定需要编程基础了,但是这里也有简单的编程工具,例如"易语言",“易语言”是一门以中文作为程序代码语言,易语言的诞生极大的降低了编程的门槛和学习的难度。所以小伙伴们可以考虑利用这款工具做一款单机游戏修改器。

下面仍然通过"魂斗罗单机游戏"为例子阐述一下"易语言"编程外挂的逻辑。

上面我们找出了游戏中人物当前血的地址以及1号子弹数的地址.现在就通过"易语言"编写代码实现人物血的读取和修改子弹数.

具体步骤如下:

1、打开易语言, 首先申明两个变量,窗口句柄 和 进程ID 都是整数型的, 如下图:

上图中, 是通过游戏的进程名ext.exe 以及它的标题 "eXtinction" 来取得它的窗体句柄的。取得句柄后, 下一句我们判断窗口句柄是否有效, 之后通过窗口句柄取得进程ID。需要注意的是如果游戏没有打开, 窗口句柄将是负数, 所以要判断窗口句柄是否大于0.

2、在易语言窗口中布置好, 如下图:

3、然后再双击读取人物血, 现在我们开始写代码。

上图中, 定义了一个变量;人物血地址 整数型的。接下读内存整数型十六到十, 就是将十六进制转换成十进制。上图中两条语句的意思是:读内存整数型, 把读出的值传给了人物血地址然后就是在编辑框中显示读取出来的人物血值.

4、 修改子弹数这次需要用到的命令是写内存整数型。

就是把编辑框1里面的数字写入到 00506d84这个地址里.5、最后我们还需要添加一个时钟, 让时钟每隔100秒执行下面这条语句.写内存整数型 (进程 ID, 十六到十 (" 00506d84" ), 到整数 (编辑框1.内容))这样, 就可以把子弹数锁定了。

感兴趣的小伙伴们,关注转发文章后可以私信我,我可以给大家分享一些单机游戏外挂编译的源码供大家用于学习和研究!

标签: #编程制作接金币游戏怎么做 #魔兽争霸单机修改器