关于如何制作外挂(制作游戏辅助需要学什么) 的知识大家了解吗?以下就是小编整理的关于如何制作外挂(制作游戏辅助需要学什么) 的介绍,希望可以给到大家一些参考,一起来了解下吧!


(资料图)

记得小学的时候,玩页游把家里的电脑弄坏了(怎么回事,页游也能弄坏我的电脑吗?),然后我爸拿去重装了系统。他回来后,电脑里出现了两款新的单机游戏,《植物大战僵尸》和《大鱼吃小鱼》。

那个年代周围的小学生都是塞尔/奥比岛/摇滚王国/天书/龙之刃/梦幻西游,玩摩尔庄园的小学生没有九年义务教育。虽然《植物大战僵尸》现在看来已经是很久以前的事情了,但是他的游戏元素却催生了很多游戏音乐文化,比如比利·埃利什的《坏蛋》。节奏简直就是植物大战僵尸的灯光。

当时因为生存模式被滥用,在网上找了个修改器,可以修改阳光点。当时我虽然不是计算机专业的,但是对修改器的运行机制还是有一些猜测的。当时小学觉得修改档案里的数据是因为不了解内存。

这个猜测现在看起来很搞笑,但也不是没有道理(该开始挑刺了)。有些游戏的数据可能会先放在文件中,游戏启动后文件中的数据会被读入游戏的内存区域,所以我们需要修改数据所在文件的内容,然后再启动游戏。但是很多游戏的数据文件都是加密的(出问题的时候骑砍是没有加密的),我们无法从文件中修改。所以游戏进程需要先读入内存,再从内存修改,退出游戏时再自动保存。之后,就是这个数据了。

所以总的来说,我们可以找到这些种类的修改对象:

游戏数据在本地未加密文件,直接修改它来修改游戏数据这一类的代表就是骑马与砍杀,它的角色数据在文档中,可以肆意修改玩家属性,但是不要修改太大,因为数据会溢出。此外它的游戏数据,如NPC对话,NPC姓名,国家名称,城堡名称都是明文给出的(还是用Excel保存的???),最可怕的是它的内部机制,如兵种上限/士气/围攻时间/酒馆花费等都是明文的,怪不得骑砍会有各种版本。数据封装,通过修改内存来修改游戏数据 *** 游戏,数据在对方服务器,无法直接修改,通过模拟 *** 请求表单来模拟自己获得游戏物品(看对方服务器逻辑严密程度了)举几个例子(腾讯游戏全部忽略,这个不在新手教程里面),你正在玩一个网页游戏龙之刃,打死了一个小怪,获得了15银币,这时你的网页需要给服务器发送给你银币数据 15的信息,你可以用浏览器自带的工具开发者调试看看这个数据的格式,然后模仿一个相似的,发送的服务器,比较菜的游戏厂商当然无法完善这方面的逻辑了。(另外我有一个想法,steam在我们玩游戏的时候应该会有一个线程监控我们正在玩什么游戏,所以我们可以监控这个线程发出的 *** 表单,然后我们自己不断发出,这不是卡套刷满?)

先说实战部分,因为不想再下载骑斩了,而且骑斩官网有很多修改文件的教程,所以跳过了。

1.检查内存数据

游戏在我们的计算机中作为一个进程运行,所以我们可以在内存中搜索和修改它的数据。

以植物大战僵尸为例。我们需要修改的是日照量。如果我们当前的日照值是75,我们需要在内存中查找75这个数字。

先用记忆工具打开植物大战僵尸的过程。

然后查数字25。下图只找到一个,所以日照的数据存储在地址21BF10C8。但是,许多游戏可能会搜索更多的地址。我们需要花一点点的项目(阳光)查询,改变成另一个值,并再次扫描,以准确定位。

修改该地址的值。

检查游戏中的日照量。

是不是太简单了?!这是因为游戏本身的设计已经脱离了这个时代,现在的游戏厂商不仅要考虑内容,还需要在安全上跟上高。

接下来拿一个游戏来练习,就是最近很火的宫崎英高老贼的作品《狼》。

Sekiro : Shadows Die Twice

作为一个九周的学生,这个游戏真的让我知道了怎么写死字。

来看看我现在的金币,2323。

然后按照惯例,选取一只狼的过程,搜索2323的数据,可以发现有很多。

我去杀了个小怪物,把金币加到了2360。

再搜了一遍,发现还有5个地址,直接修改会发现不会变。一种猜测是它采用了类似于病毒中多进程互相守护的方法,会保持数据一致,所以我们可以直接选择所有同事修改,会发现第三个没有修改成功,因为这个值不是背包里的金币数,而是战友资源的接口数。你可以自己试试。

成功添加两万金币,其他数据在当地相同。你可以自己试试,但是这种方法总是效率不高。我们可以用代码的形式来自动化这个修改过程。

这里多说一句,代码的方式是将数据的地址编码到代码中。如果游戏的更新导致这个地址改变,代码也要同步修改,这样很多需要频繁更新的游戏的修改器实际上会失效。

二。外部程序的编程

我们先来了解一下优优资源网的一些Windows APIs。

HWND FindWindow(LPCTSTR IpClassName,LPCTSTR IpWindowName); 通过类名或窗口名查找,返回窗口句柄DWORD GetWindowThreadProcessId(HWND hWnd,LPDWORD lpdwProcessId); 得到窗口句柄后通过GetWindowThreadProcessId这个函数来获得窗口所属进程ID和线程IDHANDLE OpenProcess(DWORD dwDesiredAccess,BOOL bInheritHandle,DWORD dwProcessId) 打开一个已存在的进程对象,并返回进程的句柄bool WriteProcessMemory(HANDLE hProcess,LPVOID lpBaseAddress,LPVOID lpBuffer,DWORD nSize,LPDWORD lpNumberOfBytesWritten ); 能写入某一进程的内存区域。入口区必须可以访问,否则操作将失败

附加代码:

#include

关键词: 外挂