某lua游戏简单分析

一、静态分析:

某lua游戏简单分析_第1张图片

      framework_precompiled.zip是quick-cocos2d-x框架对lua中的API的拓展和封装,第一次了解lua手游,先粗略这么理解。在这个游戏中这个zip还没有进行保护,是可以正常进行解压的,对于交叉引用loadChunksFromZIP函数发现,没有解密函数的样子,再次说明没有进行保护,重点就关注在lua代码保护上。

某lua游戏简单分析_第2张图片

观察lua脚本,发现lua脚本进行了加密保护。

观察so发现,一个libgame.so实质上是libcocos2dlua.so文件,libkvmrt.so观察下边猜测就是kvm虚拟机运行时的一些解释函数什么的。

某lua游戏简单分析_第3张图片

这个时候猜测,它大致的保护过程为:

lua进行整体保护、或者luajit保护或者打乱整个lua opcode的顺序,然后最后用他们的KVM虚拟机进行虚拟化混淆编译。

但是这里有一个逻辑漏洞:

lua的保护不是在于把这个框架引擎的逻辑混淆的多么难,因为再虚拟化,API还是一定在的,而是在于让攻击者在获取API去调用真正lua路上设置门槛。接下来先去分析:

二、动态分析:

先进行动态调试吧:

根据官网http://www.lua.org/source/5.0/lauxlib.c.html说明,在luaL_loadbuffer是加载lua代码的核心,这个时候在这个函数处下断点。

某lua游戏简单分析_第4张图片

参数包括了lua脚本在内存中的起始位置,大小以及名称,写idc脚本,运行:这里注意需要过滤一下前面提到的quick下面的那些问题,因为没有加密,没必要Dump下来。

某lua游戏简单分析_第5张图片

三、分析&&反编译:

可以看到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

  1. 确定luajit版本(如何确定不是本文重点),这里下载对应版本
  2. 编译luajit然后将生成的luajit.exe、lua51.dll和jit文件夹覆盖到lua-decomp
  3. 复制要反编译的文件到luajit-decomp
  4. 将反编译文件重命名为test.lua
  5. 运行decoder_new.exe
  6. 最终生成test.asm out.lua out2.lua,out2.lua就是我们要的文件

使用010用对应的bt文件进行分析:

发现对于指令的解析有错,并且使用luadec反编译可以看到,出错。

可以肯定的是lua的opcode顺序被修改了,我们知道在lua源码中luaV_execute是他的核心函数,通过搜索发现:导出函数中没有,有一个为“luaV_QY”比较可疑。

某lua游戏简单分析_第6张图片

通过分析发现这里有一个table表,并且下面正好有38个case,可以肯定的是解释器就在这块:

某lua游戏简单分析_第7张图片

这里被几维的安全编译器进行了处理不能够进行F5,但是还是可以寻找操作码的特征;目前对于这种opcode顺序进行替换的修复,暂时还没有好的方案,通过分析一份正常的lua 5.1的so文件,找到映射关系,然后修改luadec中的opcode的顺序进行反编译。

第一次分析coco游戏,暂时简单的记录。

你可能感兴趣的:(Lua代码安全)