XopProtector 源码深度解析:一款开源的 Android APK 加固框架

0 阅读6分钟

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

模块技术栈运行位置核心职责
:packerJVM (JDK 17+)Windows / CI构建期 APK 加固打包
desktop/.NET 7+ WPFWindows图形化界面,子进程调用 packer
:nativeC++ / JNIAndroid 设备DEX 解密还原、VMP 解释执行、RASP
:demoAndroidAndroid 设备示例应用 + 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 的核心职责包括:

  1. DEX 加密​:对原始 DEX 文件进行加密,打包为 protector/dexes.zip 等资源文件
  2. SO 保护​:对业务 SO 库的 .text 段进行加密
  3. 壳注入​:将 libprotector.so 和 Java 壳代码注入 APK
  4. 配置生成​:生成 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​:通过反射替换 ActivityThreadLoadedApk 中的 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

  • AES-128(CTR/GCM 模式)-23
  • RC4 流加密-15
  • 自定义 Rolling-XOR 编码(用于字符串混淆)-16
  • PAS1 格式的 Asset 加密-18

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 采用多层加密策略:

  1. 构建期​:原始 DEX 经过加密后打包为 protector/dexes.zip-16
  2. 运行时​:ProxyApplication 初始化时,Native 层通过 prepatchExtractedDexes 预解密 DEX 文件-18
  3. 类加载时​:Hook DefineClass,在 ART 加载类之前完成方法体解密-21
  4. VMP 解释​:部分关键方法由虚拟机解释执行,不直接暴露 Dalvik 字节码

4.2 双 VMP(虚拟机保护)

项目宣称的"双 VMP"指两种虚拟化保护机制:

  • PVM2(Phase Virtual Machine 2) :对 DEX 方法进行指令级虚拟化,将 Dalvik 字节码转换为自定义虚拟机指令-1
  • Native VMP​:对 Native 层关键逻辑进行虚拟化保护

4.3 SO 保护

SO 保护分为两个阶段-1-18

  1. 构建期​:对业务 SO(如 libdemo_biz.so)的 .text 段进行加密
  2. 运行时​:
    • Hook dlopen/android_dlopen_ext,在 SO 加载时解密 .text
    • 提供 ensureBusinessSofinishBusinessSoDecrypt 作为兜底解密方案-18

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 + NDKNative 编译、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 技术亮点

  1. 全栈加固方案​:从构建期到运行时的完整加固链路
  2. 开源透明​:安全社区可审计代码,发现并修复漏洞
  3. 多平台支持​:CLI + Windows GUI,降低使用门槛
  4. 模块化设计​:各模块松耦合,便于定制和扩展
  5. RASP 能力​:运行时主动防御,而非静态被动保护

6.2 注意事项

  • 加固不能保证应用绝对安全,只能提高逆向成本-1
  • 项目仅供授权使用,​禁止用于隐藏恶意软件-1
  • 使用前请仔细阅读 SECURITY.md

6.3 未来展望

XopProtector 作为开源加固框架,其价值不仅在于工具本身,更在于为 Android 安全社区提供了可研究、可改进的参考实现。开发者可以基于此项目:

  • 研究加固与反加固的攻防技术
  • 定制符合自身业务需求的安全方案
  • 贡献代码,推动项目演进

项目地址​:github.com/xopJack/Xop…安全联系​:xopJack@163.com-1开源协议​:Apache License