返回列表 发新帖

浅谈偏单机游戏逆向

[复制链接]

17

主题

844

回帖

8856

积分

硕士生

Rank: 6Rank: 6

金币
3286
好评
25
信誉
173
发表于 5 天前 来自手机  | 显示全部楼层 | 阅读模式  来自 河南
发现论坛关于游戏相关的逆向教程帖是比较少的,我这里的话就来一篇关于游戏逆向的总谈,关于偏单机的

游戏逆向在我看来是总共有四大思路

第一大思路就是GG修改器动内存,对于我们单机游戏来讲,基本上都不会有啥检测,是吧,所以GG修改器是随便改的,那么我们为了图方便肯定是想写一个脚本或者菜单来进行自由开关,那么这个时候就有了找特征码和找基址这两种路径出现了

所以GG的话

首先就是要找功能,动哪个点能实现功能,动那个点过掉检测,这个是比较难找的很多时候,因为他们玩的比较久的,都有一套自己的思路,但是如果你是一个新手的话你可能就只会简单的数值搜索

然后你要是想写成脚本不用每次都重新抓的话就得用到特征码和基址了,网络上也有很多相关的脚本辅助你去抓,但是很多时候你可能会由于机型的不同抓到的特征码也不是那么通用,现在也有支持联合搜索的脚本好像,相较普通的特征码更通用一些可能,但可靠性相对于差一点,我对GG了解不多,有大佬有其余补充可以讲讲

第二大思路就是下断点,不管你是桥接CE,还是用AGG,亦或者是终端下断点,都绕不开一个问题,就是共用函数,比如我想改无敌秒杀,但是我断点的扣血函数敌方也在走,那么我一改,地方也无敌秒杀了,这个时候就需要你去根据寄存器找到一个字段去区分这个函数应该怎么区分敌我,遇到这种情况肯定是比较麻烦的,因为需要你懂汇编,也许在ai盛行的时代可以尝试利用ai

第三大思路就是存档

存档的话大家懂得都懂,不加密的很少见,遇见加密存档分析就要复杂起来了,这种我也不是很了解

第四大思路就是区分引擎

众多周知,市面上很多教程都有教你怎么去dump il2cpp游戏,那么对于unity游戏,我们可以利用unity存在的api去dump游戏,或者是查找内存地址进行hook,很多人就觉得unity不过如此,但是你深入研究你会发现,市面上很多游戏都采取了热更新技术,基于lua的热更新,华佗热更新等等等等,那么针对这种采取热更新的游戏我们往往会发现采用常规方法dump不出核心逻辑,那么针对这种情况,你也需要单独去寻找一种方案实现对他们的hook

还有就是cocos引擎的游戏,基本上都是基于xxtea算法进行加密,也许你在逆向cocos.so的时候没找到xxtea相关字符串,但是那并不说明没用xxtea算法,他只是把符号剥离了而已,相信很多同学都可以找到自己独特的方案处理,但cocos引擎依然存在热更新,这个也是你需要去了解的方向

另外就是godot引擎了,市面上最近兴起的一个新引擎,那么这种游戏的话,你可以尝试使用GodotReTools进行解包,关于找到密钥,我在上一篇帖子有讲,不过如果你想挑战一下hook,那自然也是可以的,因为毕竟他有源码,你可以分析出源码关键函数在so里面找到相应实现,从而实现native层的hook拦截修改

再说一下laya引擎吧,基本上有个论坛发的比较多的赵云与阿斗就是这个引擎,那么论坛上的坛友基本上都是修改dcc下的缓存重写hash值进行修改实现,或者是修改存档实现,但这种方案的话基本上也就适合这种单机游戏了,因为很多游戏的话他是会有热更新或者本地的dcc进行混淆处理的,那么对于这种情况,你也要找到一个方案进行处理

最后讲一下基于WebView的游戏吗,市面上一些Egret,Cocos其实都是有提供这种Webview方案的,就是你在本地找不到任何核心逻辑文件,甚至so都是一些sdk相关的so,这个时候你抓包看看,你会发现他有下发请求来获取核心逻辑内容,那么这种你就需要找到java层的一个点获取Webview实例来让你对游戏进行修改处理,这个和RPG有点相似了,经常搞黄油的小伙伴们知道,RPG游戏的话我们可以通过java获取Webview实例,也可以通过html直接调用相应api进行回想房进入之类的阿巴阿巴

其实你要是走引擎的路子还有很多小众引擎你没法去一个个搞,因为像登山赛车这种游戏他libgame.so完全可以下断点更简单而不是你去一步步分析libgame.so

好,就讲这些吧暂时

回复

使用道具 举报

4

主题

257

回帖

806

积分

高中生

Rank: 4

金币
268
好评
0
信誉
100
QQ
发表于 5 天前 来自手机  | 显示全部楼层  来自 陕西
说的很好。
回复

使用道具 举报

97

主题

1439

回帖

6179

积分

硕士生

Rank: 6Rank: 6

金币
1497
好评
3
信誉
183
发表于 5 天前 来自手机  | 显示全部楼层  来自 河北
ilcpp➕xlua.so
这种都是热更新算是,搞起来麻烦,具体得怎么修改,没看到过
回复

使用道具 举报

17

主题

844

回帖

8856

积分

硕士生

Rank: 6Rank: 6

金币
3286
好评
25
信誉
173
发表于 5 天前 来自手机  | 显示全部楼层  来自 河南
Temorry 发表于 2026-8-21 15:24
ilcpp➕xlua.so
这种都是热更新算是,搞起来麻烦,具体得怎么修改,没看到过 ...

lua热更新的话,比如你这个你可以hook xlua.so里面的lual_loadbuffer方法,拿到所有脚本,但也有比较麻烦的情况就是你hook出来的不是标准的lua文件,他可能是luac文件,也可能是魔改字节头的文件,这些都需要针对性还原才能拿到lua脚本,拿到后你可以修改脚本内置到安装包里替换回去,也可以直接字节流修改相关内容,或者调用某函数执行lua代码实现
回复

使用道具 举报

17

主题

844

回帖

8856

积分

硕士生

Rank: 6Rank: 6

金币
3286
好评
25
信誉
173
发表于 5 天前 来自手机  | 显示全部楼层  来自 河南
傅 发表于 2026-8-21 15:36
lua热更新的话,比如你这个你可以hook xlua.so里面的lual_loadbuffer方法,拿到所有脚本,但也有比较麻烦 ...

还有一种思路就是遍历G表,这个我也只是有所了解没试过
回复

使用道具 举报

0

主题

6394

回帖

1万

积分

博士生

Rank: 7Rank: 7Rank: 7

金币
821
好评
1
信誉
107
发表于 5 天前 来自手机  | 显示全部楼层  来自 广东
学习学习
回复

使用道具 举报

1

主题

494

回帖

1214

积分

高中生

Rank: 4

金币
661
好评
1
信誉
100
发表于 4 天前 来自手机  | 显示全部楼层  来自 广西
回复

使用道具 举报

19

主题

6203

回帖

1万

积分

博士生

Rank: 7Rank: 7Rank: 7

金币
2119
好评
0
信誉
100
发表于 4 天前 来自手机  | 显示全部楼层  来自 安徽
感谢分享
回复

使用道具 举报

97

主题

1439

回帖

6179

积分

硕士生

Rank: 6Rank: 6

金币
1497
好评
3
信誉
183
发表于 4 天前 | 显示全部楼层  来自 河北
傅 发表于 2026-8-21 15:36
lua热更新的话,比如你这个你可以hook xlua.so里面的lual_loadbuffer方法,拿到所有脚本,但也有比较麻烦 ...

感谢
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表