放置类游戏《迷你金庸》的逆向过程(更新0.255版本逆向)
本帖最后由 sfczz 于 2019-5-28 21:03 编辑详细内容看最下面分割线之后
2019-05-28更新0.255版本逆向
今天更新的程序把git的工程信息删除了。有两种方法可以继续获取代码。实际文件名仍需要通过监听程序行为的方式来获取。
1、把新版程序的acg文件夹里面的内容复制到旧版程序的project/objects里面。用原来的方法获取即可。
2、写个python用zlib库直接解压缩hash文件。直接zlib.decompress(open(file, 'rb').read())即可。保存后文件头部需要去掉blob字样的标识。
另外多说一句0.253版本,跟0.21方法一样,其实后面我跟贴说明了,放这里比较醒目吧……
——————————————————————分割线——————————————————————上周看到三大妈有推荐一款放置类游戏《迷你金庸》,下载之后玩了一下,发现进度实在是太慢,萌发修改的想法。
尝试变速齿轮,发现游戏有时间检测;修改本地时间的话,发现无用(后面分析后结论是获取了网络时间)。因为分为PC版和安卓版,所以下载了PC版,开始逆向。
1、弯路篇
主要记录走过的弯路,各位不喜欢看可以直接下拉到正路篇。
首先,解压缩游戏,有以下几个文件夹
build(游戏可执行文件被放在这里面)
经过一通浏览,发现res中有一些Lua脚本,所以基本判断游戏采用的是Lua脚本来进行游戏的执行。翻了一下脚本,发现没有什么重要的东西。所以怀疑是有编译或加密后的Lua脚本。
祭出Ollydbg,给所有的CreateFile下断点。发现CreateFile打开的文件包含了project\objects\xx\xxxxxxx的文件
一眼看上去,像是SHA1。(熟悉Git的人,应该已经知道该怎么做了,奈何我不用Git……绕了好大一圈弯路)
project/objects里面一共两千多个文件,茫茫多。所以打开MyMonitor,跑了一会可执行文件,分析一下行为。
在分析结果中发现,有形如下面的记录:
打开文件“xxxx\a.lua"失败
打开文件"xxxx\lua\a.lua"失败
打开文件”xxxx\lua\a\init.lua"失败
打开文件“project\objects\xx\xxxxxxx"成功
所以断定实际上project\objects\xx\xxxxxxx对应的其实就是a.lua
UE打开project\objects\xx\xxxxxxx后发现,文件头好像不是lua编译后的字节码头部啊……陷入僵局……
整理思绪,重新折回到Ollydbg,打算跟踪一下project\objects\xx\xxxxxxx详细的解码规则(这事儿在逆向游戏素材的时候干过),跟了一下还没发现什么的时候,无意中看了一下栈里的内容,发现栈底有git方面的API。
联想到svn和vss都会对于数据进行打包,所以感觉git也同理。也许是此时搜索关键字不对,没有找到如何解包。根据可执行文件里面的api名称,确定调用的是libgit2。
所以找来libgit2的库,自己写了一个控制台程序,准备按照可执行文件的调用API的顺序及参数,开始尝试还原数据。刚好某api获取到git_object之后,后面的api感觉接不上。故搜索git_object相关的东西。
2、正路篇
在git的一个貌似官方的文档中发现有一条指令 git cat-file -p hash。试了一下,竟然真就把内容还原出来了……还是源码,不是Luac(晴天霹雳……我前一天晚上干了些啥……{:1_909:})
剩下的事情就好办了,写了个批处理,都还原了吧。
然后根据MyMonitor中的分析结果,把几个看上去可疑的Lua文件照着Hash打开,运气不错,没开几个就找到了游戏的主流程文件。
连代码都有了,那就可以直接进行相应的修改了,先把等待时间缩短,把秘籍残卷上限从99改成999。
主流程大概看了看,里面作者加了好多形如下面的注释:
这个是做数据核对的,估计是之前有人改过内存
进行本地时间合理性检测
代码中还有茫茫多数据合理性检测、存档校验、内存加密等等。
因为觉得作者以前弃坑(估计就是修改党给折腾的),后来又进行了复刻,也不容易,所以我就不把具体改了什么跟怎么让修改生效写出来了……请各位理解一下……
如果作者能看到这个帖子,我提点不成熟的建议,既然代码架构如此,已经用git文件结构来处理了。那就可以考虑把脚本源码编译成Luac,之后要么换opcode,要么直接上加密。加大逆向难度。
PS:吾爱破解是个好论坛,关注了好几年,好不容易趁着前几天开放注册,注册了一个帐号,但是发现必须保证活跃度,这一点让我这个有孩子的大龄码农很是头疼……平常几乎没有空余时间研究这些东西,都是周末晚上,孩子睡了,熬夜研究的,伤身体……为了保证活跃度,肚子里的东西慢点往外掏,后面打算整理下神魔至尊传和风云的图片素材逆向过程。隔一段时间发一个,免得没东西发之后,帐号被清理掉。:rggrg
想练手的同学:
游戏挺大,PC版一百多MB,我就不附上了,版本v0.21,搜一下就有
Ollydbg基本上人手一份。我也不附上了。
git这玩意,官方好找。
MyMonitor超过1MB,我也放不上来……
用到的就这几个工具
新人第一个帖子,有不合规的地方,望大家包涵。
中毒的尼古丁 发表于 2020-11-3 15:03
大佬大佬,能不能发个修改后的替换文件,只要残卷999和减少等待时间就行,谢谢大佬!!
pan.baidu.com/s/1mridnM-SEW_UcnwzIzDmiA
qgza
三个文件放在md_miniyj\build\release\lua里面。
如果你想自己改,除p_init.lua以外不要有任何修改。那两个lua编码有问题,不能随便改了 游戏我不怎么玩! 按你的搞了一般就出错,怎么回事?
silinde 发表于 2019-3-26 13:28
按你的搞了一般就出错,怎么回事?
你倒是说说出啥错啊。。。 不错,虽然我不会修改。。哈哈哈 看着复杂 不懂啊啊 纯支持,不改游戏 虽然我把您说的几个没上传的附件都百度一遍~ 但还是啥都没懂~ 哈哈 我还是安心做个伸手党吧 期待神魔至尊传的资源解析