Skip to content

ApkProtect 特殊处理

大部分加固方案,ZjDroid 用 backsmali 指令即可直接脱壳。但 ApkProtect 这一种加固有防修改检测,需要额外步骤才能破解。

ApkProtect 特殊处理流程

问题

ApkProtect 会检测自身是否被修改。ZjDroid 作为 Xposed 模块以 APK 形式安装时,常规加载方式会触发它的检测,导致脱壳失败。

解法

思路是:把 ZjDroid 伪装成一个 jar 而非 apk 来加载,绕过检测。步骤如下:

1. 创建可写目录

在设备上创建一个特定目录,并赋予 777 权限:

bash
adb shell su -c "mkdir /data/local"
adb shell su -c "chmod 777 /data/local"

README 示例目录是 /data/local,你也可以用别的可写路径。

2. 复制并改名 APK 为 jar

把 ZjDroid 的 APK 复制到该目录,并把扩展名改为 .jar

bash
adb shell su -c "cp /data/app/com.android.reverse-*/base.apk /data/local/zjdroid.jar"

3. 修改 Xposed 模块列表

编辑 Xposed 的模块配置文件,把 ZjDroid 的模块代码文件改为这个 jar 路径:

bash
adb shell su -c "cat /data/data/de.robv.android.xposed.installer/conf/modules.list"
# 找到 com.android.reverse 对应的那一行,把 APK 路径改成 /data/local/zjdroid.jar

即让 modules.list 中 ZjDroid 那一行的内容变为:

/data/local/zjdroid.jar

4. 重启设备

bash
adb shell su -c "reboot"

重启后 Xposed 会从 zjdroid.jar 加载 ZjDroid,从而绕过 ApkProtect 的检测,即可正常 backsmali 脱壳。

为什么这样能绕过

ApkProtect 的检测逻辑通常针对"以 apk 形式安装并被 Xposed 加载"这一典型特征。把模块文件改名为 .jar 放在非标准目录、并在 modules.list 中指向它,改变了加载路径与文件形态,使其检测特征不再匹配,从而绕过。

适用范围有限

这是针对 ApkProtect 当时版本的对策。加固方若更新检测逻辑,此方法可能失效,需根据实际情况调整。


回到 快速开始,或继续看 功能实现原理

基于 MIT 协议发布 · 本文档仅用于安全研究与教学目的