游戏引擎是 libcocos2dlua.so
拖到IDA去看看 发现加固了
我们去内存中DUMP出来 这里就不写DUMP过程了 DUMP脚本很多
DUMP出来之后进行修复 修复工具下载地址:
DUMP出来的文件头被魔改了 自己用原来的SO文件头复制粘贴进去 在进行修复就可以了
说到LUA的游戏我们基本上都是通过luaLoadBuffer 进行HOOKdump 的
我们打开修复好的SO 竟然找不到luaLoadBuffer
遇见这种的 只能去看他的开源框架了 先看下他是多少版本的
发现是cocos2d-x-3.13.1 我们去下载这个版本的源码 下载地址:
下载好我们解压 这里我为了图方便直接用notepad++的搜索功能 搜luaLoadBuffer
可以看到他是有luaLoadBuffer的 只是被他隐藏了 那我们改怎么定位到它呢 我们看到上面有个?.lua的字符串 我们去ida搜下看看
可以看到也是有的 那么我们就鼠标点击过去 选中alua_2按下键盘下的X
点OK跳过去
我们可以看到这里和我们刚才看的源码哪里基本上是一样的 那么我们按F5看伪代码
通过分析sub_18A080就是luaLoadBuffer我们点进去看看
伪代码太长了 我就不全部截图了
通过HOOK打印 sub_18A080(v41, a1, v42, v43, v71);
V42=内容 V43=长度 V71=文件名
进到sub_18A080内部发这个sub_4595C0 正好对应luaLoadBuffer参数
sub_4595C0(a2, v21, v64, a5); = luaLoadBuffer(l, (const char*)data.getBytes(), (int)data.getSize(), fullPathOfScript.c_str());
到这里就不需要多说什么了直接HOOKdump脚本就好了
发现脚本DUMP出来竟然是LUAq的
直接用unluac反编译发现报错了 那应该是修改了opcode
继续IDA 定位opcode
搜索字符串 “ 'for' limit must be a number ”
和刚才一样点击过去按X键 点OK跳过去
然后F5
case就是opcode 把他拿出来修改下unluac的就可以解密了 这里就不写那么详细了