前言

最近我想起来了,我一直想着要研究 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

成功是反编译的,不过得到类似如下的文件 字符串都被加密,

最后修改:2024 年 07 月 13 日
如果觉得我的文章对你有用,请随意赞赏