首页
社区
课程
招聘
[讨论][原创]安卓lua解密——opcode修改后dump反编译
发表于: 2024-6-23 21:25 22490

[讨论][原创]安卓lua解密——opcode修改后dump反编译

2024-6-23 21:25
22490

随着近些年lua语言在安卓游戏大火,lua逆向已经越来越重要。早期游戏的lua源码放在安装包的assets目录,但随着对抗的升级,越来越多的游戏使用动态更新和扩展应用功能的方式,特别是在需要频繁更新脚本或配置的情况下。这种方法在游戏开发、插件系统、远程配置等场景中有较多应用。而且这种方法是网络上加载Lua代码,你在安装包,APK是得不到lua的代码的。遇到这种我们首先要确认是否是lua语言的应用:

打开apk\lib\arm64-v8a\目录,如果发现libxlua.so,libslua.so等等类似目录,那么有很大可能是lua。(lua又分luajit与普通lua,判断是不是luajit,将so文件放进IDA,字符串搜索luajit即可

再使用IDA或者frida hook lual_loadbuffer获取字节码,使用unluac网址(unluac download | SourceForge.net)进行反编译。

java -jar unluac.jar 你的字节码文件>存放文件

反编译成功一般不会有输出信息,但看到类似上面的情况大概有3种可能:

    1.文件头被改

    2.opcode修改

    3.文件头和opcode都被改

关于文件头:

0到3字节:1B 4C 75 61表示这是一个Lua字节码文件。

第4字节:51:版本号,表示Lua 5.1。

第5字节:00:格式号,表示标准格式。01为非官方,魔改lua。

第6字节:01:endianness标识,表示大端格式。字节码文件需要指示其数据的字节顺序,以确保在不同平台和硬件架构上的正确解析。不同平台可能采用不同的字节序,比如大多数x86和x86-64架构采用小端序,而一些嵌入式系统和网络协议采用大端序。

第8字节到11字节:Lua整数大小,指令大小等。

关于opcode修改:liblua.so文件是lua源码文件编译的,lua源码的"lua-5.1.5\src\lopcodes.h"文件定义了opcode:


如果在编译的时候将opcode的顺序修改,比如OP_MOVE在OP_GETUPVAL前面,改为OP_GETUPVAL在OP_MOVE前面,再编译为so,这时再使用unluac反编译会报错。

解决办法有两个:

一:将正常的so文件与修改后的so文件,放进IDA反编译,搜索函数:luaV_execute找到case,进行对比,还原opcode的顺序。


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 6
支持
分享
最新回复 (5)
雪    币: 574
活跃值: (405)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
厉害,来学下下
2024-6-25 14:45
0
雪    币: 242
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
3
以前有个游戏 安卓lual_loadbuffer dump出来的还需要解密 iOS dump出来的直接就是原始lua文件 注释都在
2024-6-26 11:45
0
雪    币: 603
活跃值: (576)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
巧了,最近在研究相关的东西,正好用上,mark一下
2024-6-27 00:08
0
雪    币: 49
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
5
Kissnero 以前有个游戏 安卓lual_loadbuffer dump出来的还需要解密 iOS dump出来的直接就是原始lua文件 注释都在[em_13]
是的,有些游戏是明文
2024-6-29 15:59
0
雪    币: 2223
活跃值: (95)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
有大佬跳槽不,高薪合法稳定
2024-7-1 17:20
0
游客
登录 | 注册 方可回帖
返回
//