移动安全-FART 脱壳机制作

一、前言

ART环境下基于主动调用的自动化脱壳方案,详细原理就不在这里阐述了。本文主要内容为FART脱壳机的制作流程,原理请移步 https://github.com/hanbinglengyue/FART。

二、设备信息

设备使用谷歌 Pixel,版本信息及外观如下图

微信图片_20240213135114

三、解除 BL 锁

1、下载 platform-tools 工具,下载地址:https://developer.android.google.cn/studio/releases/platform-tools?hl=zh-cn

image-20231210153146157

2、手机使用具有数据传输功能的 USB 数据线连接电脑,然后打开 Pixel 开发者模式,设置-》关于手机-》连续点击版本号进行开发者模式

image-20240213131540563

开启 USB调试,设置-》系统-》高级-》开发者选项-》点击打开USB调试

image-20240213132141986

打开 OEM 解锁,该设置网络需要魔法,若网络没有魔法则该按钮显示灰色,不能打开。这一部分不多阐述,自行魔法网络(网络能访问 google 即可),然后重新回到 设置-》系统-》高级-》开发者选项-》打开OEM按钮即可,开启后可选择关闭魔法网络。截图如下:

image-20240213131927904

image-20240213132039826

3、安装驱动,首先下载 google usb 驱动,下载地址:https://developer.android.com/studio/run/win-usb?hl=zh-cn

image-20231210151052877

需要手机 USB 连接电脑后进入 fastboot 模式下操作,Pixel 1 进入 fastboot 模式重启设备进入开启界面前长按电源键+音量下 ,由下图可知 Device is LOCKED

image-20240213132349724

然后电脑上 Win + x 命令选择 设备管理器-》其他设备-》Android,进行安装 google usb 驱动

image-20231210170018512

image-20231210170048384

image-20231210170111120

image-20231210170152919

image-20231210170216431

安装完成后,验证 fastboot 是否连接正常,电脑 platform-tools 目录下执行命令,若出现设备名称即 fastboot 则连接正常

1
fastboot devices

image-20231210170326951

4、然后执行命令解除 BL 锁,该命令在 fastboot 模式下或者直接在 platform-tools 目录下执行均可,本人是在连接 USB 数据线后,在 fastboot 模式下执行的,执行后手机会出现提示选择解除 BL 的按钮,音量键选择 Yes ,电源键确认即可

1
fastboot flashing unlock

image-20240213132641492

此时可以看到 fastboot 模式下改为 Device is UNLOCKED,即已经解锁了

微信图片_20240213132723

四、刷入 FART

1、下载fart刷机包:https://www.cnblogs.com/r0ysue/p/16791596.html

2、选择刷机包,我这边使用的是 Pixel

image-20231210141849469

将 image-sailfish-opm1.171019.011.zip 解压至当前文件夹内

image-20231210142007934

3、将 adb 目录下的 AdbWinApi.dll、AdbWinUsbApi.dll 放置电脑 C:/Windows/System 目录下

image-20231210141749477

将 adb.exe、fastboot.exe 放置电脑C:/Windows/System32 目录下

image-20231210141832103

4、现在就可以直接开始刷机了,fart 刷机包下执行,此时设备会多次重启,但会提示报错,先忽略

1
flash-all.bat 

image-20231210171942824

image-20231210171951985

重启启动系统,成功刷入系统。

微信图片_20240213133012

五、脱壳

验证是否能正常脱壳,首先需要重新开启开发者模式(系统可在设置里自定义选择中文),开启开发者步骤一样,这里不阐述。注意该脱壳机会将所有安装的软件自动进行脱壳处理,所以当刷完该系统后就不要当做正常的手机去使用了,避免性能拖垮了系统运行。

1、验证 adb 是否成功连接,如图 adb 能正常使用

1
2
adb devices
adb shell

image-20231210173952265

2、安装 app,并授予 sd 卡读写权限(否则dump下的文件无法写入到sdcard)

image-20231210175614834

3、利用 adb 监控 fart 的运行日志,然后打开 app 运行然后进行脱壳,出现 fart run over 表示 fart 正在运行脱壳

1
adb logcat | grep "fart"

image-20231210183127771

adb shell ,然后进入 /sdcard/xxxx 目录,再进入脱壳 app 包目录,可查看在该包目录下已经有相当的 dex 文件。

image-20231210183725547

然后在该路径下可以看到有bin、txt、dex三种文件。

  • 带有 excute 关键字的 dex 文件是在 excute 脱壳点脱下来的 dex 文件,我们可以直接在 jadx 里面打开这个 dex。关于该脱壳点的更多信息可以看《拨云见日:安卓APP脱壳的本质以及如何快速发现ART下的脱壳点》

  • 带有 excute 关键字的 classlist_execute.txt 文件,该文件是 dex 中所有类的类列表,类名是签名形式的以L开头,表示它是一个类,$ 后面是类中的方法。

  • 在修复文件的选择上,首先其实只需要看有 bin 函数体文件的,没有 bin 文件的 dex 是处于不同 Classloader 中的 dex,那些是些系统库或者壳本身,不是我们关心的对象。(修复脚本地址:https://github.com/hanbinglengyue/FART)

    1
    python fart.py -d xxx.dex -i xxx.bin >> repired.txt
  • 并不是所有dex都需要修复,有bin的才能修复,当dump出来的方法体是空的时候,并且有bin文件,然后才要去修复,大部分不需要修复,直接dex

六、注意事项

开启 OEM 锁

开启 OEM 锁需要魔法网络,在进行代理后,先在浏览器访问一下 google 看是否成功实施魔法,当网络成功魔法后,就可以在开发者选项中开启 OEM 按钮。(有一点需要注意,如果网络无误后仍然开启不了 OEM ,请查看 Pixel 版本支不支持解锁)

安装 google usb 驱动

这边需要在 fastboot 模式下安装 google usb 驱动,否则 fastboot 无法识别设备导致无法进行解 BL 锁进而无法进行刷机。

报错

注意若没有解 BL 执行刷机命令则会出现以下报错,提示需要 Please unlock device to enable this command,即需要解除 BL 锁后再进行操作

image-20231210170530338

七、参考

1
2
https://www.cnblogs.com/r0ysue/p/16791596.html
https://blog.csdn.net/nini_boom/article/details/110122880