20191218
- FART合并dex的时候有bug,有时候会合并不彻底,最后把所有的dex都pull下来。
- 需要给app赋予storage权限才能正常脱壳
开始是用ApkShelling脱壳,脱壳率是100%,忍不住说一句牛逼。不过后来发现有的壳脱不干净,主要是两种:一种的是整个dex的格式有问题,反编译的时候提示不是dex文件;一种是某几个文件中的函数只有返回没有函数体。网上查了一下,第一种不知道咋回事,第二种应该是类抽取加固。FART是ART环境下基于主动调用的自动化脱壳方案,理论上可以解决类抽取加固。但是我实验以后发现ApkShelling无法抽取干净的样本,FART也无法抽取干净。可能是样本用了更新的加固方法smali2c或者vmp。
不过从原理上FART是要比ApkShelling先进的。FART主要有三个优点:
- 使用FART就不用频繁重启了。
- 抽出dex是合并成一个的。
- 能够处理一般的类抽取加固,虽然我还没遇到过。
在此记录一下ApkShelling和FART的使用流程
ApkShelling
1、修改XposedEntry.java中的targetPackages
2、编译安装
3、重启手机
4、查看日志确认
# 在命令行输入下面的命令,然后打开app
adb logcat -s Xposed
5、下载脱出的dex
# 下载dex,一般有好几个dex,使用grep分析具体是哪个?
adb pull /data/data/PATH/00403-01.dex .
FART
1、安装镜像
从https://github.com/hanbinglengyue/FART上下载镜像,然后按照https://www.bodkin.ren/index.php/archives/513/刷机,中间没有遇到什么问题。
adb reboot bootloader
fastboot oem unlock
fastboot flash system system.img
fastboot flash userdata userdata.img
fastboot flash boot boot.img
fastboot flash cache cache.img
fastboot flash ramdisk ramdisk.img
fastboot reboot
2、修改fart文件并上传
将fart配置文件fart复制到/data/fart(注意文件权限问题,和换行的问题),其中,fart配置文件中为要脱壳的app包名
adb push ~/app_crack/fart/test/fart /data
3、查看日志确认
# 在命令行输入下面的命令,然后打开app
adb logcat -s ActivityThread
4、查看脱出来的dex
adb pull /sdcard/fart/包名/6600696_dexfile.dex .