文章目录

前言

前段时间的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

在这里插入图片描述

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐