在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
framework_precompiled.zip是quick-cocos2d-x框架对lua中的API的拓展和封装,第一次了解lua手游,先粗略这么理解。在这个游戏中这个zip还没有进行保护,是可以正常进行解压的,对于交叉引用loadChunksFromZIP函数发现,没有解密函数的样子,再次说明没有进行保护,重点就关注在lua代码保护上。 观察so发现,一个libgame.so实质上是libcocos2dlua.so文件,libkvmrt.so观察下边猜测就是kvm虚拟机运行时的一些解释函数什么的。 lua进行整体保护、或者luajit保护或者打乱整个lua opcode的顺序,然后最后用他们的KVM虚拟机进行虚拟化混淆编译。 lua的保护不是在于把这个框架引擎的逻辑混淆的多么难,因为再虚拟化,API还是一定在的,而是在于让攻击者在获取API去调用真正lua路上设置门槛。接下来先去分析: 根据官网http://www.lua.org/source/5.0/lauxlib.c.html说明,在luaL_loadbuffer是加载lua代码的核心,这个时候在这个函数处下断点。 参数包括了lua脚本在内存中的起始位置,大小以及名称,写idc脚本,运行:这里注意需要过滤一下前面提到的quick下面的那些问题,因为没有加密,没必要Dump下来。 可以看到Dump出来的是luac,这时候需要进行反编译,从IDA中看到: .rodata:018FF858 00000008 C Lua 5.1 .rodata:018FFF68 00000013 C LuaJIT 2.1.0-beta2 这时候要找对应的反编译工具,因为也有可能存在opcode被修改然后反编译不通过的情况: 参考:https://yq.aliyun.com/articles/672042 下载 https://github.com/bobsayshilol/luajit-decomp
发现对于指令的解析有错,并且使用luadec反编译可以看到,出错。 可以肯定的是lua的opcode顺序被修改了,我们知道在lua源码中luaV_execute是他的核心函数,通过搜索发现:导出函数中没有,有一个为“luaV_QY”比较可疑。 通过分析发现这里有一个table表,并且下面正好有38个case,可以肯定的是解释器就在这块: 这里被几维的安全编译器进行了处理不能够进行F5,但是还是可以寻找操作码的特征;目前对于这种opcode顺序进行替换的修复,暂时还没有好的方案,通过分析一份正常的lua 5.1的so文件,找到映射关系,然后修改luadec中的opcode的顺序进行反编译。 |
请发表评论