前言
前段时间的O泡果奶病毒火了一把,虽然平时很少看android,却也来了兴趣,大致看了一下,也搜了搜,知道了关键点在lua上,可惜之前没接触过lua,当时并没有把脚本解出来。今天看到了一个lua解密的帖子,就试了下,没想到真的成功了,在此作一下记录吧
分析
android目录结构

关键的lua逻辑目录

关键文件是main.lua
使用编辑器看也不是luac文件

当我看到这个帖子时,翻看了下android的目录,果然看到了libluajava.so文件

又了解到libluajava.so文件会使用luaL_loadbuffer或者luaL_loadbufferx函数对Lua脚本进行加载,通常解密也在这个位置
使用ida打开,找到函数位置

在github上找到函数的原型,了解到每个参数传递的是什么
LUALIB_API int luaL_loadbufferx (lua_State *L, const char *buff, size_t size, const char *name, const char *mode) { LoadS ls; ls.s = buff; ls.size = size; return lua_load(L, getS, &ls, name, mode); } 将ida中的伪代码稍微改一下,形成以下代码
unsigned char* decrypt(const unsigned char* buffer, size_t size) { unsigned char* debuffer = (unsigned char*)malloc(size); debuffer[0] = 27; int t = 0; for (int i = 1; i < size; i++) { t += size; debuffer[i] = buffer[i] ^ (t + ((unsigned int)(((unsigned __int64)(-2139062143LL * t) >> 32) + t) >> 7) + ((signed int)(((unsigned __int64)(-2139062143LL * t) >> 32) + t) < 0)); } return debuffer; } 将main.lua读取后调用此函数返回debuffer数据,解出luac文件

使用命令反编译出lua脚本
java -jar unluac_2015_06_13.jar main.luac > out.lua 