Android apk是Android应用程序的安装包,它包含了应用程序的代码、资源、签名等信息。为了保护应用程序的版权和安全,很多开发者会对apk进行加壳处理,即在原始的apk中嵌入一个壳程序,使得反编译工具无法直接获取到原始的代码和资源。特别是在小米市场中下载的国内top应用,加壳率高达60%,这为我们静态分析工具正常解析apk带来了很大的困难,因此在参考了相关资料后,尝试使用Frida框架动态地对apk进行了脱壳处理,即去除壳程序,还原原始的apk。
Frida框架是一个跨平台的动态代码注入工具,它可以在运行时动态注入代码到目标进程中,从而实现Hook和调试的功能。利用Frida框架,我们可以Hook libart.so中的OpenMemory方法,拦截加载的Dex文件,并将其从内存中导出到指定目录。这种方法可以适用于大部分基于Dex加密或隐藏的加壳工具。
此处借助了Github上大佬编写的脚本frida-dexdump,它是一款基于Frida框架开发的脱壳工具,可以在运行时动态注入代码到目标进程中,从而拦截加载的Dex文件,并将其从内存中导出到指定目录。这种方法可以适用于大部分基于Dex加密或隐藏的加壳工具。
环境准备
- 一台已经Root的Android手机或模拟器
- 一台安装了Python和Frida-tools的电脑
- frida-dexdump脚本
使用步骤
在电脑上安装frida环境,包括frida-tools和frida-dexdump,可以使用pip命令进行安装。此处一定要注意frida与frida-tools版本的对应关系.
1
2
3pip install frida-dexdump
pip install frida==15.1.17
pip install frida-tools==10.5.4在电脑上通过adb命令在/data/local/tmp目录下放置frida-server-15.1.17-android-x86文件(根据自己的架构选择,我用的是frida 15),并给予可执行权限。之后启动frida-server,并查看是否连接成功。
1
2
3
4
5
6
7
8adb shell
su
cd /data/local/tmp
chmod +x frida-server-15.1.17-android-x86
./frida-server-15.1.17-android-x86 &
exit
frida-ps -U在电脑上运行frida-dexdump脚本,选择要脱壳的apk进程,等待脱壳完成。我这里用的脚本是从服务器上批量下载apk进行脱壳,并自动重打包。由于是同组其他同学写的,这里只放一部分关键代码。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16os.system("adb install " + localpath) # 安装apk
try:
print('[*] Start to unpack ' + packagename)
# 这是之前版本的老命令,参考frida-dexdump更新日志后,替换成了新版本的命令
# fridacmd = "frida-dexdump -n " + packagename + " -f -s 4"
fridacmd = "frida-dexdump --debug -U -d -f " + packagename
print(fridacmd)
# os.system(fridacmd)
# frida-dexdump在碰到某些应用时仍可能出现运行错误,为防止脚本卡死,设置了3分钟的脱壳用时上限
subprocess.run(args=fridacmd,timeout=180,shell=True)
except Exception as e:
print(str(e))
fail_wf.write(apkpath)
fail_wf.write('\n')
os.system("adb uninstall " + packagename)
continue在手机或模拟器上查看/data/data/包名目录下的dex文件,如果有多个dex文件,可以使用dex2jar工具将其转换为jar文件,并使用jd-gui等工具查看源码。此处注意重打包后,查看源码时,需要关闭加载dex文件的checksum检查,否则会导致加载失败。
注意事项
- 这种方法需要Root权限和Frida框架支持,可能会影响系统稳定性和安全性。
- 这种方法可能不适用于一些复杂或特殊的加壳工具,例如动态加载或解密dex的加壳工具。
- 这种方法可能会触发一些应用程序的反调试或反Hook机制,导致应用程序崩溃或无法正常运行。
部分参考资料:
frida-dexdump地址:https://github.com/hluwa/frida-dexdump
作者写的使用说明:https://mp.weixin.qq.com/s/x8_aa762wpsvA4nhSLoppQ
一些其他的博客:
https://www.jianshu.com/p/82775b65f4c5