逆向APK中的lua代码,求助后续解决思路
最近在逆向一款APK的LUA代码时遇到一些问题,我先把自己的处理过程说一下,请教高手后续的解决思路。一、尝试直接逆向
拿到apk后直接解压,查看了一下里面的文件,包含了大量的lua脚本文件,lib下的so库文件如下:
可以确定这玩意是用cocos2d-lua引擎开发的,接下来随便找了个main.lua文件看看是什么样子,如下:
可以看出,他没有用cocos2dlua自带的XXTea加密方式,用的是lua5.1版本进行编译的,想着用5.1版的luadec就能很快搞定,结果。。。
直接报bad code in precompiled chunk,还是太年轻啊,哈哈
好吧,看到这个错误不要慌,根据经验应该是opcode顺序被改过,看来得分析一下so中的代码了。
二、尝试分析OS代码
把libcocos2dlua.so扔IDA里,打开字符串窗口,再确认一下lua版本:
查一下opcode的字符串顺序,如下:
拿上图的顺序和lua虚拟机源码的对照了一下,这个顺序没有问题,为什么会看字符串顺序呢,主要是因为之前逆向时遇到过一次这种情况,对着字符串的顺序修改opcode就搞定了。不过,显然这次没有这么简单。
于是,打算先定位luaV_execute函数分析一下,搜索“initial value must be a number”字符串,交叉引用跳转到代码处,
按F5查看伪代码,直接报错:
什么鬼,换个姿势试试,这次我们通过调用关系来找luaV_execute函数,通过搜索lua源码,找到了一处调用点在resume函数内,而resume又在lua_resume被用到,如下:
在IDA里搜索一下lua_resume函数,查看伪代码如下:
再定位到sub_606EFC处,sub_606EFC应该就是luaV_execute,但里面的代码却不是应有的内容,而且IDA还出现了红色的错误提示“local variable allocation has failed, the output may be wrong!”,如下:
后续应该怎么弄呢,请教各位大佬?有兴趣的可以发我私信。
已经试过动态HOOK load_buffer导出了,导出的lua还是一样,因为他这个是改了LUA虚拟机层,并不是直接对LUA文件加密,所以HOOK出来的没有用。
这个so应该被改过,读不到luaV_execute的代码,主要的难点就在这里,就是想了解一下还原luaV_execute代码的思路 我最近也在尝试 cocos2d 的1个手游我卡的难点是在他使用了热更新,每次登录前 服务器端强制md5匹配,文件属性不一致(包括不存在)就强制更新下载1个新的js给你。。。那我白瞎了。。。我在找 热更新的资料,看有没什么机会...
页:
[1]