前言
最近我想起来了,我一直想着要研究 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//
嘻嘻
星星你是好久不更新啊