XopProtector 源码深度解析:一款开源的 Android APK 加固框架
一、项目概述
XopProtector 是一款开源的 Android APK 加固框架,采用 Monorepo 架构,由构建期打包引擎(JVM CLI + Windows 桌面端)与设备端原生壳(libprotector.so)两大部分组成-1-2。项目于 2026 年 8 月 16 日首次开源发布,由开发者 xopJack 维护-3。
核心能力:
- DEX 加密与动态还原
- 双 VMP(虚拟机保护)
- SO 库保护
- RASP(运行时应用自我保护)
项目官方声明:**加固只能提高逆向成本,不能保证应用不可破解。请仅用于保护您有权分发的软件,禁止用于隐藏恶意软件。**-2
二、技术架构总览
XopProtector 采用分层架构设计,各模块职责清晰-1-2:
| 模块 | 技术栈 | 运行位置 | 核心职责 |
|---|---|---|---|
:packer | JVM (JDK 17+) | Windows / CI | 构建期 APK 加固打包 |
desktop/ | .NET 7+ WPF | Windows | 图形化界面,子进程调用 packer |
:native | C++ / JNI | Android 设备 | DEX 解密还原、VMP 解释执行、RASP |
:demo | Android | Android 设备 | 示例应用 + SO 保护冒烟测试 |
2.1 工作流程
text
复制
下载
原始 APK → [Packer 打包器] → 加固后 APK → [设备端 Native Shell] → 运行时解密还原
构建期,Packer 对 DEX、SO、资源文件进行加密和混淆处理,生成包含 libprotector.so 壳和加密资源的加固 APK。运行时,壳负责解密还原原始代码并执行-1。
三、核心模块深度解析
3.1 Packer 打包引擎(:packer)
Packer 是纯 JVM 实现的打包库,提供 CLI 和 Java API 两种调用方式-1:
bash
复制
下载
# 命令行使用
java -jar packer\build\libs\protector-packer-*.jar app.apk -o out.apk --shell-dir executable\shell-files
Packer 的核心职责包括:
- DEX 加密:对原始 DEX 文件进行加密,打包为
protector/dexes.zip等资源文件 - SO 保护:对业务 SO 库的
.text段进行加密 - 壳注入:将
libprotector.so和 Java 壳代码注入 APK - 配置生成:生成
protector/config.json等运行时配置文件-16
3.2 Native 运行时壳(:native)
Native 模块是 XopProtector 最核心的部分,采用 C++ 实现,通过 JNI 与 Java 层交互-1-18。
3.2.1 Java 壳层
Java 壳层位于 com.yqsh.protector.shell 包下,核心类包括-9:
ProxyApplication:继承 Application,是加固后 APK 的入口代理-16。它负责:
- 从 assets 中读取加密的 DEX、配置、密钥等资源-16
- 解密并加载原始 Application
- 初始化 Native 层
ApplicationReplacer:通过反射替换 ActivityThread 和 LoadedApk 中的 Application 对象-17。核心实现:
java
复制
下载
// 通过反射获取 ActivityThread
Object activityThread = currentActivityThread();
Object boundApp = getField(activityThread, "mBoundApplication");
Object loadedApk = getField(boundApp, "info");
// 替换 ApplicationInfo.className 为真实 Application
loadedAi.className = realApplicationClassName;
// 调用 makeApplication 创建真实 Application
Method makeApplication = loadedApk.getClass().getDeclaredMethod(
"makeApplication", boolean.class, Instrumentation.class);
Application real = (Application) makeApplication.invoke(loadedApk, false, null);
这种实现方式与主流加固方案(如 DPT-Shell)的思路一致-17。
JniBridge:Java 与 Native 层的桥梁,声明了所有 native 方法-18:
java
复制
下载
static { System.loadLibrary("protector"); }
public static native void initApp(String protectorDir);
public static native void prepatchExtractedDexes(String protectorDir);
public static native String readApplicationName();
public static native void verifySignature(Context context);
public static native void heartbeat();
public static native String drainThreatReports();
public static native void ensureBusinessSo(String soBasename);
3.2.2 C++ Native 层
Native 层目录结构清晰,按功能模块划分-8:
| 目录 | 功能 |
|---|---|
hook/ | ART Hook 框架,拦截类加载、SO 加载等关键函数 |
dex/ | DEX 文件解析与操作 |
crypto/ | 加密解密(AES、RC4、自定义算法) |
vm/ | VMP 虚拟机解释器 |
risk/ | RASP 风险检测 |
report/ | 威胁报告 |
runtime/ | 运行时引擎 |
Hook 模块:通过 Dobby 和 ByteHook 框架对 ART 虚拟机进行 Hook-21。核心 Hook 点包括:
DefineClass:拦截类加载过程,在类加载前完成 DEX 方法还原LoadLibrary:拦截 SO 加载,对业务 SO 进行解密- 通过
dl_iterate_phdr定位libart.so基址,实现跨 Android 版本的兼容-21
DEX 模块:实现 DEX 文件解析、方法索引修复、指令解密等功能-22。包括 ULEB128 解码、DEX 结构解析等底层操作-22。
Crypto 模块:实现多种加密算法-15:
3.3 Windows 桌面端(desktop/)
基于 .NET 7+ WPF 实现的图形化界面,以子进程方式调用 Packer JAR 包-1-6。用户无需配置 Android SDK/NDK 即可直接使用-2。
3.4 Demo 示例应用(:demo)
提供完整的示例 APK 和 libdemo_biz.so,用于验证 SO 保护功能-1-5。
四、核心安全机制详解
4.1 DEX 加密与动态还原
XopProtector 对 DEX 采用多层加密策略:
- 构建期:原始 DEX 经过加密后打包为
protector/dexes.zip-16 - 运行时:
ProxyApplication初始化时,Native 层通过prepatchExtractedDexes预解密 DEX 文件-18 - 类加载时:Hook
DefineClass,在 ART 加载类之前完成方法体解密-21 - VMP 解释:部分关键方法由虚拟机解释执行,不直接暴露 Dalvik 字节码
4.2 双 VMP(虚拟机保护)
项目宣称的"双 VMP"指两种虚拟化保护机制:
- PVM2(Phase Virtual Machine 2) :对 DEX 方法进行指令级虚拟化,将 Dalvik 字节码转换为自定义虚拟机指令-1
- Native VMP:对 Native 层关键逻辑进行虚拟化保护
4.3 SO 保护
- 构建期:对业务 SO(如
libdemo_biz.so)的.text段进行加密 - 运行时:
- Hook
dlopen/android_dlopen_ext,在 SO 加载时解密.text段 - 提供
ensureBusinessSo和finishBusinessSoDecrypt作为兜底解密方案-18
- Hook
4.4 RASP(运行时应用自我保护)
RASP 是 XopProtector 的亮点功能-18-1,主要包括:
环境风险检测(risk/ 模块):
- Frida 端口检测
- 调试器检测
- 模拟器检测
- Root/越狱检测
响应策略:支持三种 Action-18:
Alert:仅告警记录Degrade:降级运行,限制敏感操作Block:终止进程
心跳机制:Java 层每 5 秒调用 heartbeat(),若超过 15 秒无心跳,Native 线程主动终止进程-18。
威胁上报:通过 drainThreatReports() 获取 JSON 格式的威胁事件列表,可用于云端安全监控-18。
4.5 签名校验
运行时通过 verifySignature(Context) 校验 APK 签名证书 SHA-256,防止二次打包-18。
五、编译与使用指南
5.1 环境要求-2
| 工具 | 用途 |
|---|---|
| JDK 17+ | Packer / Gradle |
| Android SDK + NDK | Native 编译、Demo 构建 |
| .NET SDK 7+(可选) | Windows 桌面端 |
5.2 编译步骤-1-2
bash
复制
下载
# 配置 Android SDK(编辑 local.properties 或设置环境变量)
sdk.dir=D\:\\Android\\Sdk
# 编译 Packer JAR
gradlew.bat :packer:jar
# 生成壳文件(输出到 executable/shell-files/)
gradlew.bat exportShellFiles
5.3 加固 APK-1-2
bash
复制
下载
# 编译 Demo
gradlew.bat :demo:assembleRelease
# 加固 Demo APK
gradlew.bat protectDemo
# 或对任意 APK 使用 CLI
java -jar packer\build\libs\protector-packer-*.jar app.apk -o out.apk --shell-dir executable\shell-files
六、技术亮点与总结
6.1 技术亮点
- 全栈加固方案:从构建期到运行时的完整加固链路
- 开源透明:安全社区可审计代码,发现并修复漏洞
- 多平台支持:CLI + Windows GUI,降低使用门槛
- 模块化设计:各模块松耦合,便于定制和扩展
- RASP 能力:运行时主动防御,而非静态被动保护
6.2 注意事项
- 加固不能保证应用绝对安全,只能提高逆向成本-1
- 项目仅供授权使用,禁止用于隐藏恶意软件-1
- 使用前请仔细阅读 SECURITY.md
6.3 未来展望
XopProtector 作为开源加固框架,其价值不仅在于工具本身,更在于为 Android 安全社区提供了可研究、可改进的参考实现。开发者可以基于此项目:
- 研究加固与反加固的攻防技术
- 定制符合自身业务需求的安全方案
- 贡献代码,推动项目演进
项目地址:github.com/xopJack/Xop… 安全联系:xopJack@163.com-1 开源协议:Apache License