[Android] 「送给最好的 TA」App逆向与Lua脚本解密实例

0x00 事由

最近一些群里出现了会以最大音量外放音频且无法退出的恶搞Android App,造成了一些不好的影响。恰好借这个机会尝试通过逆向工程分析其原理,同时这个App也使用了Lua脚本并进行了加密,也借此机会实践一下Lua脚本解密。

0x01 工具

下文中会给出Lua脚本的解密代码,需要使用 GCC/Clang 等C/C++ 编译器进行编译后执行。

0x02 基本结构

我们首先使用Apktool对其进行解包,假设App的文件名为App.apk

java -jar apktool.jar d App.apk

等待执行完后,打开解包生成的App文件夹
App文件夹
我们需要关注其中几个文件(夹)

  • assets,存放资源文件,包含Lua脚本lua和音频文件mp3
  • lib,本地库(Native Library)文件夹,包含编译后的本地代码(Native Code)的so文件
  • smail,存放smail文件,包含Dalvik字节码,是对App的Java代码反向成中立字节码的结果
  • AndroidManifest.xml,包含App的信息

查看AndroidManifest.xml的内容,可以发现以下样本App信息

  • App名为送给最好的TA
  • 包名为com.sgzh.dt

0x03 分析Java部分

进入smail,我们可以看到Java部分的代码结构,可以看出存在com.androluacom.nirenrcom.luajava等包名,搜索相关项目可以发现App的大部分代码均来自于AndroLua_pro
AndroLua_pro是一个使用Lua编写Android应用的项目,换而言之,Java部分极有可能并不是应用的主体部分,重要操作很有可能会写在Lua中。

除了AndroLua_pro的代码外,我们还发现了com.b.a.a com.b.a.b这两个经过混淆的包名,经过查证得知里面的代码来源于TextWarrior

我们得知其Java代码基本都是来源于现有项目,无太大分析价值,我们将分析重点放于Lua脚本上。

0x04 分析C部分

在进入Lua部分前,我们使用文本编辑器查看assets文件中的init.luamain.lua,会发现他们并不是Lua代码,也不是编译后的luac,可以得知Lua脚本被加密了,我们需要先对其进行解密。

AndroLua_Pro所使用的Lua工具LuaJava会加载依赖库libluajava.so,我们使用IDA打开这个文件。LuaJava会使用luaL_loadbuffer或者luaL_loadbufferx函数对Lua脚本进行加载,这个函数也是一个加入Lua脚本解密代码的常见位置,我们在IDA中找到这一函数,并使用自带插件对其进行反编译,可以看到如下内容
IDA
(上图为方便阅读,已反混淆变量名)
与AndroLua_pro的原始代码比较,可以发现加入了Lua脚本解密的代码,我们可以参考这一代码,使用C语言编写一个简单的解密工具

#include 
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值