萌萌小喜儿 / 待分类 / 游戏修改器的制作原理?

0 0

   

游戏修改器的制作原理?

2016-01-06  萌萌小喜儿
相关:游戏研发技术,做过外挂,也防过外挂。一句话概括游戏修改器的原理:在既定的游戏逻辑基础上,插入新的逻辑或者修改逻辑对应的数据。这样是不是太抽象了?来,咱先介绍一下游戏修改,或者说外挂的类型和原理。1. 输入模拟模拟用户的输入,例如键盘、…显示全部
相关:游戏研发技术,做过外挂,也防过外挂。

一句话概括游戏修改器的原理:在既定的游戏逻辑基础上,插入新的逻辑或者修改逻辑对应的数据。

这样是不是太抽象了?来,咱先介绍一下游戏修改,或者说外挂的类型和原理。

1. 输入模拟
模拟用户的输入,例如键盘、鼠标、重力感应、摇杆等等。这种是最简单的方式,并且,严格地说,这并不算外挂,只是辅助软件。最著名的软件要数PC上的按键精灵,早期网游的挂机外挂,几乎都是按键精灵变种而来的。
这种外挂的防护方法最简单也最困难。简单在,只需验证玩家是否是机器人,也就是验证码就能解决。难在不影响用户体验。还记得当年的盛大冒险岛里,打着Boss突然出来,让人虎躯一震的验证码么?(好像暴露年龄了?)

2. 修改文件数据
就是修改游戏过程中存在本地的数据。特别对于单机游戏而言,玩家的金币数、等级啥的,肯定得存在硬盘上的某个地方。但可能是加了密,不过只要存储在本地,一定就能破解,对,一定。对应的嘛,XX存档修改器之类的就是了。
什么,你问我有没有不把数据存到本地的单机游戏?
---还记得当年FC的通关密码么?

顺带回答题主的问题
a. 难道没有个人游戏数据是储存在本机上的吗?
有,存储分两类,一类是无关数据,比如你上次退出某个界面时,光标放在哪个按钮上,这种无关痛痒的数据。另一类是游戏数据,对,比如你的攻击力、防御力,为了提升计算速度、节省流量,这些东西可能会存储在本地,但服务端一般都会做一次校验,除非做游戏的人脑袋秀逗了。
b. 这些大量的数据游戏公司真的有必要全部储存吗?
有,游戏,特别是网游,数据表,或者说配置表,数量大到你难以想象。而且这些数据通常静态数据,也就是大家都一样,对服务端来说也不会是太大的压力。举个例子吧,如果你的宠物成长没有随机性,那么同一个宠物同一个等级的所有数据都是一样的。

3. 修改内存数据
程序运行过程中,数据都是在内存里的。通过搜内存,即可直接修改游戏数据(如果游戏没做防护措施的话)。常见的,金山游侠、八门神器,甚至金手指,都是此类原理。

4. 截包
对于网游来说,数据都是封装在一个一个数据包里,发送到服务器的。只要截取从你电脑发出去的游戏包,找到对应的数据,修改即可。但实际上,这是最困难的修改方式。原因很简单,数据包是加密的,而且和本地数据的加密不同的是,数据包通常用的是非对称加密算法,例如RSA,不理解的可以扩展阅读一下:RSA算法原理(一)
懒得读的这里解释一下,非对称加密算法的特点是,加密密码和解密密码不一样,天知道服务端用的是什么密码解密。

5. Hook
hook的意思是钩子,可以这么解释,原来有一个函数,会返回你现在的金钱数,然后你把这个函数勾住,换成你自己的函数,返回一个99999999的金钱,是不是发财啦?
玩PC游戏的看下游戏目录下,是不是能发现很多DLL文件?这些就是游戏里的一个一个函数,也许其中某一个,就放着返回你的金钱数的函数。
对于盗版软件的破解,这也是常用手法之一。

6. 其他
只有想不到,没有做不到。自己去发现,也能有惊喜。例如,修改系统时间加金币啥的。
对于单机游戏来说,所有数据都是在内存和硬盘上的,所以单机游戏实际上是有内存修改器和存档修改器两种。只不过修改的位置不同,技术上来说都是大同小异,就是直接修改游戏数据。制作技术不外乎两种,一种是直接分析游戏主程序对应的反汇编代码,找出关键位…显示全部
对于单机游戏来说,所有数据都是在内存和硬盘上的,所以单机游戏实际上是有内存修改器和存档修改器两种。只不过修改的位置不同,技术上来说都是大同小异,就是直接修改游戏数据。制作技术不外乎两种,一种是直接分析游戏主程序对应的反汇编代码,找出关键位置。另一种则比较简单,是通过游戏中数据的变化,来找到对应位置。比如金山游侠中的内存搜索,就是通过搜索内存中某个数值的变化来确定内存地址从而修改数值的。(实际上只要把游戏数据存储成浮点类型,一票类似原理的修改器都跪了。。。)。存档修改器也是类似,首先存个档,然后消耗个数值,然后再存一个档,比较两个存档的差异来确定要修改的位置。知道了要修改的内存或存档地址之后,剩下的就是写个程序修改对应内存或者存档的位置就行了。基本上单机游戏修改器就是这么个流程。

网游的数据都是存储在服务器上,所以所谓外挂的原理其实也没比单机复杂多少。比如有个网游的基本架构如下:

实际上一般还有个账户服务器,用户账户数据一般是跟游戏数据分离开的,一个用户账户是可以登录若干个游戏服务器的。但是这个跟本话题无关暂时省略掉。
比如你在游戏中做了某样操作,比如打个怪,或者开个宝箱,这时候,游戏客户端的任务就是把你这些操作,转换成预先定义好的数据格式发送给游戏服务器,然后游戏服务器收到数据之后,了解了你的意图,然后在游戏服务器上做了一番比较和判断之后,然后把结果发送给游戏客户端,你掉了XX血获得YY经验,打开宝箱得到ZZZ物品。客户端收到服务器的指令之后,在你的画面上把服务器的结果显示出来,仅此而已。
这时候就能看出来了,你仅仅修改游戏客户端的数值是没用的,因为数值并没有同步到游戏服务器上,下次服务器给你发送数据的时候就会改回来。
那么游戏外挂是怎么做的呢?关键就在于外挂会模拟客户端发送数据参考下图。

比如在客户端我正常打怪,手动点击一秒钟打怪一次,但是外挂则会毫无节操地一秒钟发送给服务器几十哪怕上百次打怪的数据。于是有些服务器就会被骗过,从而客户以更高的效率获得经验和奖励。但是这种方法对外挂编写者技术要求比较高,首先你得能分析的出来原来客户端和服务器段通信的数据封包的格式,然后写出模拟客户端的外挂程序。其次最重要的是你得能骗得过服务器。像一秒钟打怪几十次的数据,服务器还是很容易判断出你是在作弊的。而且对于这种严重破坏游戏公平性的外挂来说,被发现的代价还是很大的。游戏公司也是严厉禁止的。
骗不过服务器怎么办呢?于是有些外挂走上了另一条路,这条路上外挂不是模拟游戏客户端了,而是模拟游戏的主体——人。也就是外挂部分或者全部代替人在游戏中的作用。就像下面的图示。

还用打怪来举例子就是外挂给游戏客户端发送模拟指令,模拟用户的打怪操作。然后用某种预先定义好的算法,更有效率的打怪,然后在HP低到一定程度的时候,自动回血。基本上只是一个自动代练的程序实现。这种外挂有些并没有很大的破坏游戏的公平性,游戏官方也是睁一只眼闭一只眼的。

后来好多游戏公司举得,既然这种外挂并没有怎么破坏游戏的公平性,那为啥不自己做呢,能多赚点钱谁不乐意呢?于是有些游戏就又提供了游戏的挂机打怪功能,根据功能不同,免费或收费也不尽相同。于是这种官方提供的东西又被叫做内挂。。。
修改器按照原理分有好几种,我说说我稍微了解的几种。第一种就是最简单的存档修改器,著名例子是仙剑四的秋天修改器。当然那个做得已经比较友好了,质量效应2的存档修改器看着则很有逼格,因为根本看不懂哪个值对应哪种属性。第二种是网游里面的使用API发送…显示全部
修改器按照原理分有好几种,我说说我稍微了解的几种。
第一种就是最简单的存档修改器,著名例子是仙剑四的秋天修改器。当然那个做得已经比较友好了,质量效应2的存档修改器看着则很有逼格,因为根本看不懂哪个值对应哪种属性。
第二种是网游里面的使用API发送指令模拟动作,例如按键精灵一类的,不属于很恶劣的修改器。
第三种是CE修改器这样,通过改变游戏时间达到某种修改效果。也不是性质很恶劣的修改器。
第四种是修改游戏内存,CE修改器和手机上的八门神器也有这种功能,通常我们用的FPS修改器什么锁血啊子弹无限啊貌似都是这种。
还有一些恶性的修改器,大多是用于网游:
加速外挂,貌似原理是修改时钟频率;
拦截+封包+转发,欺骗服务器;
盗号木马。这个就不用说了,够得上违法了吧。
我非专业人士,如有错误请指正。
呃,没看到补充说明是专门问网游外挂的……
网游外挂的拦截封包是最多的,简单来说就是把你的电脑应该发送给服务器的信息修改了再发送出去。一般这种外挂应该看到了就给你踢出去吧。
很多单机游戏都有修改器,是因为游戏数据都储存在本机上,那么为什么网络游戏不能用游戏修改器,难道没有个人游戏数据是储存在本机上的吗?比如我网络游戏上的人物装备,宝宝属性,这些大量的数据游戏公司真的有必要全部储存吗?网络游戏的绝大多数数据都是…显示全部
很多单机游戏都有修改器,是因为游戏数据都储存在本机上,那么为什么网络游戏不能用游戏修改器,难道没有个人游戏数据是储存在本机上的吗?比如我网络游戏上的人物装备,宝宝属性,这些大量的数据游戏公司真的有必要全部储存吗?
网络游戏的绝大多数数据都是在储存于服务器上面的,本地客户端主要存储的只是贴图,贴图,以及贴图。大量的位置、伤害等计算都由服务器完成。
以回合制游戏(mhxy)为例:
所有跟数据相关的内容全部在服务器存储。
你这边的操作会以一定的频率上传到服务器,服务器收到数据,进行计算,再回传到客户端。
你在本地修改数据,只能修改显示出来的数字(好多游戏计算的数据和显示的数据存于两个不同的地址)。但是一旦回传跟服务器发生矛盾,你这边属于数据异常,判定你使用外挂,或者直接将本地数据修改为服务器数据。

这些数据当然有必要由游戏公司存储!!因为那都是由人民币/时间换来的,可以兑现的东西。
(你要是能用金山游侠修改点券、修改游戏币,再兑现,游戏公司喝西北风?)
(人物属性和宝宝属性变相的为游戏币、点券的体现)


关于电影《明日边缘》和最近玩网游产生的联想,以洗宝宝为例,我洗宝宝前后的数据完全可以根据游戏的运行模式生成,而联网可以让我与其他玩家共同构成游戏系统,如果联网只是这些,那么游戏修改就可以实现,如果联网还有实时传输动态数据的功能那么怎么才能拦截这些数据,即实现等我洗出好宝宝在回传数据?

至于你说的洗宝宝,实际过程是这样的:
你上传洗宝宝操作==》服务器收到,将宝宝属性随机生成并存储于服务器==》将宝宝属性回传给你的电脑==>你的电脑显示出来数据。

其实你的电脑从头至尾只有传输功能没有计算功能。
canny zeng,幻梦终醒 本无不散之宴 却不悔付此华年
何剑斌知乎用户、知乎用户 等 4 人赞同
张三华先生的答案已经很全面了,不过其实模拟用户输入这种只能算robot功能,实际原理来说就这么几种:1、内存修改,CheatEngine为代表,什么八门神器、金山游侠也是这类,对抗法则为内存加密,但是要对付基于趋势的逻辑搜索则比较麻烦点,加密后的映射必须…显示全部
张三华先生的答案已经很全面了,不过其实模拟用户输入这种只能算robot功能,实际原理来说就这么几种:
1、内存修改,CheatEngine为代表,什么八门神器、金山游侠也是这类,对抗法则为内存加密,但是要对付基于趋势的逻辑搜索则比较麻烦点,加密后的映射必须无方向性,而且内存加密算法也不能过于复杂,免得影响效率。
2、修改本地文件系统,文件系统加密。
其实1+2最根本的对抗措施为本地数据只有展示意义,就是最多自己爽而已。
3、Hook,hook对于某些设计的游戏是可以真正做到作弊的,比如hook碰撞检测函数。这点上,c系比起java等有先天优势。不管怎么样,正常情况下,破解者看到的是在反编译一个加壳、混淆、去除了函数映射信息的exe文件后的乱名函数表,如何找到自己需要的函数,这是一个水平问题。
4、关于其它,补充一个方案吧:在面对一个设计时严格按照服务器处理全逻辑、客户端只负责展示,网络包加密无法破解的游戏,如何处理?这是一个综合性的工作。首先,获得去壳后、可反编译、调试的客户端,进行反编译,建立工程。因为反编译得到的是一些乱码函数名,无法分析,所以需要一些分析工具来进行架构分析,至少有调用栈。然后调试这个程序,进行一些尝试性的操作,来了解一些乱名函数的作用。常见的,比如说有意触发网络性发包操作,那么,你一定能找到一个发包函数,一个加密函数。接下来,虽然你无法解密网络包的加密,但是却可以取得加密前的数据字串。分析这个字串,了解其意义,修改它,然后用hook的办法让客户端发送你修改后的网络包。嗯,上面说起来简单,其实 反编译分析 找到加密函数 明文协议分析 都是困难的事情........
有的亚洲第一个MMORPG:《梦幻之星在线》的数据就是保存在本地的。但是那机器破解起来非常困难,我敢说大部分还没退休的工程师都不认识它储存数据的硬件,记得好像是铁氧体芯片……不过用硬盘储存数据的游戏,敢在本地保持数据的就很少了。PC上的网游也听说…显示全部
有的
亚洲第一个MMORPG:《梦幻之星在线》的数据就是保存在本地的。但是那机器破解起来非常困难,我敢说大部分还没退休的工程师都不认识它储存数据的硬件,记得好像是铁氧体芯片……不过用硬盘储存数据的游戏,敢在本地保持数据的就很少了。

PC上的网游也听说过数据在本地的,但是忘记是哪个奇葩了。
网游绝对是服务器存储你的角色、物品信息,就算不用反作弊,也不能你换个机子东西就没了。。如果是单机游戏,修改本机数据就好了;网游得去黑别人服务器呢。
网游绝对是服务器存储你的角色、物品信息,
就算不用反作弊,也不能你换个机子东西就没了。。

如果是单机游戏,修改本机数据就好了;网游得去黑别人服务器呢。
zephyr,尽人事 知天命
记得以前有个叫 龙族 的网游,可以用金山游侠修改
记得以前有个叫 龙族 的网游,可以用金山游侠修改
Ying Liu,懒人一个~~
盛大代理的冒险岛,不知道现在是什么情况了,几年前我还在玩的时候,角色受到的伤害是有客户端参与判定的,于是无敌外挂满天飞.玩家和怪的位置也是有客户端判定的,于是瞬移和吸怪外挂也满天飞.
盛大代理的冒险岛,不知道现在是什么情况了,几年前我还在玩的时候,角色受到的伤害是有客户端参与判定的,于是无敌外挂满天飞.玩家和怪的位置也是有客户端判定的,于是瞬移和吸怪外挂也满天飞.
三毛,萍水相逢,多多保重。
改内存地址
改内存地址
匿名用户
很多单机游戏都有修改器,是因为游戏数据都储存在本机上对但是单机也有加密,有一些单机游戏加密更是到现在都无法修改那么为什么网络游戏不能用游戏修改器,难道没有个人游戏数据是储存在本机上的吗?有部分数据在本地,但是只要联网,就会有校验..不匹配比…显示全部
很多单机游戏都有修改器,是因为游戏数据都储存在本机上
对但是单机也有加密,有一些单机游戏加密更是到现在都无法修改

那么为什么网络游戏不能用游戏修改器,难道没有个人游戏数据是储存在本机上的吗?
有部分数据在本地,但是只要联网,就会有校验..

不匹配比如我网络游戏上的人物装备,宝宝属性,这些大量的数据游戏公司真的有必要全部储存吗?
存储而且可以修改的话,工作室淘宝什么的都出来了..

关于电影《明日边缘》和最近玩网游产生的联想,以洗宝宝为例,我洗宝宝前后的数据完全可以根据游戏的运行模式生成,而联网可以让我与其他玩家共同构成游戏系统,如果联网只是这些,那么游戏修改就可以实现
又不是单机,哪有SL大法....封包也有校验,更有逻辑数值

如果联网还有实时传输动态数据的功能那么怎么才能拦截这些数据,即实现等我洗出好宝宝在回传数据?
wpe或者其他封包,直接拦截,但是大部分洗宝宝啥的都是在服务器处理,给你一个反馈
你就算本地改了,一联网就恢复了
猫小挠,虔诚续缘,献边城爱好者艺名
将来是云游戏的天下,不攻陷服务器大本营难以作弊。
将来是云游戏的天下,不攻陷服务器大本营难以作弊。
知乎用户,无知的大学生
楼主玩梦幻西游的,鉴定完毕
楼主玩梦幻西游的,鉴定完毕
知乎用户,爱好算法与编程的通信专业小学渣
修改器就是修改游戏里的参数啊。
修改器就是修改游戏里的参数啊。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。如发现有害或侵权内容,请点击这里 或 拨打24小时举报电话:4000070609 与我们联系。

    猜你喜欢

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多
    喜欢该文的人也喜欢 更多