• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

某lua游戏简单分析

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

一、静态分析:

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

观察lua脚本,发现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

  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”比较可疑。

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

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

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


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
【放置江湖】LUA手游 基于HOOK 解密修改流程发布时间:2022-07-22
下一篇:
Lua中ipairs和pairs的区别详解发布时间:2022-07-22
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap