您现在的位置是:首页 > 游戏大全

【游戏修改】单机游戏无敌不死功能的原理及实现

好趣网 2023-07-17

前言

在游戏中打遍天下无敌手,一直是我们梦寐以求的。

本篇以经典游戏《雷电2》为例,演示在PC单机游戏中无敌功能的实现。

开始

游戏中要想无敌(不死),根据游戏的不同,修改方式也有不同。

大致可以分为两种:

1.根据血量来判断人物是否死亡,一般血量等于或小于0则触发死亡。

2.碰撞检测来判断人物是否死亡(如碰到怪物、子弹等)。

这里我们以《雷电2》为例,来实现该游戏的无敌功能。

游戏界面如图:

无敌单机游戏_单机无敌游戏破解版_单机无敌游戏推荐

这个游戏是一款纵版射击游戏,想必也是许多人儿时的回忆,非常经典。

分析思路:

该游戏的死亡方式为:碰到敌方怪物,或者被子弹击中。

我们定位到相关代码,修改其逻辑即可实现无敌。

我们知道,游戏类中都会有人物(这里是飞机)状态的属性(是否死亡)。

而游戏线程中则会判断体积碰撞,如果碰到敌机,或者子弹,则改变这个属性的值,主线程则更新人物(飞机)状态等业务。

因此我们可以通过在内存中搜索这个属性的值来定位,找出是哪里修改了这个值,则可以找到碰撞判断的代码。

这里我们假设该属性为“人物死亡 ”无敌单机游戏,也就是说正常状态下,该属性的值为false(0),死亡状态下,该属性的值为true(1)。当然实际情况可能相反,我们可以多次尝试。

我们用Cheat Engine打开游戏,在死亡的时候,搜索1(2字节):

单机无敌游戏破解版_无敌单机游戏_单机无敌游戏推荐

然后等待人物复活,再搜索0:

无敌单机游戏_单机无敌游戏推荐_单机无敌游戏破解版

如此循环往复过滤搜索到的数据:

单机无敌游戏破解版_单机无敌游戏推荐_无敌单机游戏

只剩下两个了,这里的第一个是绿色的(代表基址),我们优先选择这个。

然后在上面点击右键-找出是什么改写了这个地址:

单机无敌游戏破解版_单机无敌游戏推荐_无敌单机游戏

再去游戏里面玩一会,就可以得到以下结果:

单机无敌游戏推荐_无敌单机游戏_单机无敌游戏破解版

我们选择碰撞到飞机的那一条无敌单机游戏,点击显示反汇编程序:

单机无敌游戏破解版_无敌单机游戏_单机无敌游戏推荐

就可以定位到汇编代码中。

可以看到上方有个jne(不相等则跳)跳转跳过了这个修改人物状态的代码,可以猜测就是碰撞检测的判断,我们把这个jne修改为jmp,即可让他跳过死亡的代码。修改后:

无敌单机游戏_单机无敌游戏推荐_单机无敌游戏破解版

再去游戏里看看:

单机无敌游戏推荐_单机无敌游戏破解版_无敌单机游戏

可以发现现在即使我们撞到了敌机,也不会死亡了。

但是会被子弹打死,我们再以同样的方式修改子弹判断的地方:

单机无敌游戏破解版_无敌单机游戏_单机无敌游戏推荐

无敌单机游戏_单机无敌游戏推荐_单机无敌游戏破解版

单机无敌游戏推荐_无敌单机游戏_单机无敌游戏破解版

至此我们便实现了无敌功能:

无敌单机游戏_单机无敌游戏推荐_单机无敌游戏破解版

总结

游戏线程中一般存有人物状态的属性或称变量(是否死亡或者是否存活)。

我们可以在死亡和存活的状态变换,然后搜索0或者1,来定位该属性的基址。

通过寻找修改这个属性的地址,找到碰撞检测,或者死亡CALL,修改其逻辑从而达到无敌的效果。

文章版权声明:除非注明,否则均为好趣网原创文章,转载或复制请以超链接形式并注明出处。

发表评论

◎欢迎参与讨论,请在这里发表您的看法和观点。