记一次小白的手游脚本破解过程及难题

最近因为一直有玩一个网游,发现一款直接内置进手游lua脚本的辅助。
于是来了兴趣,开始研究。

 
这是那款辅助的安装包,
 
里面的文件是这样的,妈呀连个后缀都没有我要怎么弄,因为我也是个半懂不懂的小白,于是开始各种查文件头啊什么的。

后来发现某些文件并没有加密,直接txt就可以打开于是乎,看到了这些代码,但是我不懂这是什么语言写的。但是通过一些代码的txt文本输出,结合辅助的界面,发现这些并为加密的文件只是一个界面的输出。然后我那股兴奋又开始蛋疼了。
 
接下来对里面一些加密的文件进行分析,
 
看到这些我也不懂是什么啊。各种百度啊什么的。发现这是自定义的一些加密压缩。那可咋整啊
后来翻看手游本身的一些文件跟这个安装文件一样没有后缀的资源文件。发现加密方式一样。都是这个文件头。那解密就要从手游本身入手了。可能这个辅助脚本直接调用的手游本身的加密方式吧。

先看看手游的资源目录

┌─HashRes

┊        ├─00

┊               ├─000000

┊               ├─     ┊

┊               ├─FFFFFF

┊        ├─01

┊        ├─┊

┊        ├─FF

HashRes中的文件夹名称和子文件名组合成了一个4字节的Hash名,如下图反编译so文件后看到的寻找资源的Hash路径




先分析文件怎样加载的,在IDA中反汇编中定位到 cocos2d::LuaStack::luaLoadBuffer()这个方法

首先注意的是strncmp ( const char * str1, const char * str2, size_t n )的返回值:若str1与str2的前n个字符相同,则返回0

lrc4这个类就是解密lua的

根据上面的分析后,因为学C#的 我就用C#写了个提取工具

解密文件代码片段


最终得到的lua资源文件为lua编译过的二进制文件
 
至于为什么不是luac后缀。这个我存储的时候特意区分的。
 
并不是lua源码,想得到源码就得反编译luaq文件。
其实我也就是个小白。到这我不知道改怎么弄了,就各种百度找资料反编译啊。
各种求助。有人告诉我用 unluac。我也不懂什么就去下载。
 
就是这个东西。幸亏有编程基础。一眼就看出来了这是一个java文件呀。
可是多年没用java电脑并没有装。
然后各种折腾安装控制台。
泥煤啊。后来发现这个只需要一个java环境直接可以运行了。
 
就是这样就可以反编译出来加密的lua脚本了。
当我满怀兴奋的去开始折腾。结果呢。出来的是乱码。
我就奇怪了。结果各种求助啊。
就发现泥煤的lua脚本加密方式也是自定义的。
说什么自定义lua 虚拟机 Opcode。
没听过啊。什么鬼。
这就要求助大神了。
一翻折腾
在IDA中定位lua_load然后一直跟到f_parser进入luaU_undump→LoadFunction→luaG_checkcode→symbexec,在symbexec中有个switch的循环里面有部分的opcode,通过和源码中的逻辑比对找出对应的opcode
这是大神完成的。我也不懂。
找到了 Opcode之后就是修改反编译工具里面的 Opcode为你找到的 Opcode。
发现还是要用到java工作台
unluac.jar 直接修改OpcodeMap里的map,改成对应游戏修改后的Opcode即可
然后继续尝试反编译
 
 
我想这应该是lua的源码的 。因为没有学过这个语言不大了解。
我查看这些源码的时候发现这个语言他为什么写法都用字符串拼起来的。
对了。上面的源码就是辅助的lua脚本源码了。因为他真的用的是手游的加密方式。我不知道他怎么做到的。
这个作者也够拼的吧。

好了拿到源码了。开始 破解 了。我想当然的以为找到他的登陆提示就改他的判断就可以了吧。
但是我找遍所有代码没发现有登陆提示的文字啊。没有一句中文。这是咋回事呢。
那就找平常编程用的方法的定义名称吧。
尝试admin login等
结果login就找到了。不知道是不是登陆验证。放上代码。
 
找到这个login的调用
 
通过login调用找到这个方法。
有没大神看下这个是不是验证。因为我还没破解成功呢。

然后我把所有的false 改成true 。然后我也没加密回流。直接删掉后缀改成他原来的名称(我也不知道没有回流可以不可以的。有大神告诉下嘛,如果需要回流lua脚本怎么通过他定义的 Opcode编译呢

修改完后我直接把这个文件放回安装包。然后放进手游进行安装。

结果发现不行。没作用。提示还是原来的登陆失败。

我就找原因。发现他还有访问服务器。会重新下载安装包
   
就是这个文件夹。下载在手游目录。然后立马又删除了。我手速快。复制出来的。原谅我的笨方法。
然后我看了下这个不就是安装包的内容吗。那为什么还需要一个安装包呢。
然后这个安装包的文件不是我修改过登陆验证的。
那他这个重新下载马上删除。我应该怎么替换他的文件呢。
 
我又看代码,找到他安装会请求服务器的文件什么的。
我彻底蒙圈了。不知道怎么搞了。目前到这一步了。不知道怎么继续破解了


反编译工具 unluac 源码: 

https://sourceforge.net/projects/unluac/?source=typ_redirect 

https://github.com/viruscamp/unluac

反编译工具 luadec  源码: 

https://github.com/sztupy/luadec51

参考:

IDA深度解析修改so文件和ARM汇编视频教程

IDA+OD双剑合璧=逆向无敌


转载地址: https://www.52pojie.cn/thread-545655-1-1.html

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值