前言
最近我想起来了,我一直想着要研究 androlua 编译后的 base64 加密方式,以前也是答应过被人的,也来看看。
工具
| 工具 | 用途 |
|---|---|
| Ida | 分析算法 |
| 开发IDE(随意) | 写出加密算法 |
分析
AndroLua 所使用的Lua工具 LuaJava 会加载依赖库 libluajava.so,我们使用 IDA 打开这个文件。LuaJava会使用 luaL_loadbuffer 或者 luaL_loadbufferx 函数对 Lua 脚本进行加载,这个函数也是一个加入 Lua 脚本解密代码的常见位置,我们在 IDA 中找到这一函数,并使用自带插件对其进行反编译得到以下内容

首先判断第一个字符为 = ,之后根据base64解码表映射解密base64,其中将第一个字符替换为 0x1d,即为 0x1d+0x2b=H
解码base64后的结果如下所示

接着判断第一个字符,如果是 0x1c 则进行异或解密


最后再将第一个字符替换为 0x78,进行 inflate(zlib) 解码,解码完成后将第一个字符替换为 0x1c

最后得到 Luas 的文件,说明解密算法正确。于是,我用最新版的 unluac.jar 解密,发现提示 The input file does not have the signature of a valid Lua file 于是查看了下源码

发现 signature 中并没有 0x1C 的sign 于是修改第一个字符为 0x1b

java -jar unluac_2023_01_14.jar main.lua_dec成功是反编译的,不过得到类似如下的文件 字符串都被加密,

3 条评论
ubkarj39126MQ-社区氛围友好,大家讨论问题时都很有礼貌,气氛很融洽。http://www.jc620.cn//
嘻嘻
星星你是好久不更新啊