文章目录
-
- 前言
- 一、工具核心定位
- 二、核心加固原理
-
- [1. Processor:静态处理APK(加固打包阶段)](#1. Processor:静态处理APK(加固打包阶段))
- [2. Shell:运行时还原(应用启动阶段)](#2. Shell:运行时还原(应用启动阶段))
- 三、核心功能特性
-
- [1. 核心加固能力](#1. 核心加固能力)
- [2. 易用性与灵活性](#2. 易用性与灵活性)
- [3. 轻量级与兼容性](#3. 轻量级与兼容性)
- 四、快速使用指南
-
- [1. 快速上手(下载预编译包)](#1. 快速上手(下载预编译包))
- [2. 手动编译(自定义修改)](#2. 手动编译(自定义修改))
- [3. 关键命令行参数](#3. 关键命令行参数)
- 五、技术栈与核心依赖
- 六、总结
⚠️本博文所涉安全渗透测试技术、方法及案例,仅用于网络安全技术研究与合规性交流,旨在提升读者的安全防护意识与技术能力。任何个人或组织在使用相关内容前,必须获得目标网络 / 系统所有者的明确且书面授权,严禁用于未经授权的网络探测、漏洞利用、数据获取等非法行为。
前言
在Android应用开发与分发过程中,DEX文件作为字节码载体,极易被反编译和篡改,导致应用核心逻辑泄露、恶意篡改等安全风险。针对这一痛点,dpt-shell 应运而生------这是一款轻量级的Android Dex保护壳工具,核心通过抽取DEX方法实现代码、运行时动态回填的方式,大幅提升DEX文件的反逆向难度。
一、工具核心定位
dpt-shell 是由luoyesiqiu开源的Android Dex保护壳项目(基于MIT协议),专为Android 5.0+(API 21+)设备设计。其核心思路是将APK中DEX文件的Method CodeItem(方法执行代码)"抽空",仅保留方法结构;待应用运行时,再通过壳代码将抽取的CodeItem动态回填到内存中,从根本上增加静态反编译的难度。
二、核心加固原理
dpt-shell的代码架构分为processor(处理模块) 和shell(运行时壳模块) 两部分,二者协同完成"静态抽取+运行时还原"的加固流程。
1. Processor:静态处理APK(加固打包阶段)
Processor是负责将普通APK处理为加壳APK的核心模块,核心流程如下:
- 解压目标APK,提取所有DEX文件中的CodeItem(方法执行代码)并单独保存;
- 修改AndroidManifest.xml中的Application类名,替换为壳的Application类;
- 整合壳的DEX/SO文件,重新打包、签名生成加壳后的APK。
这一步的核心目的是"剥离"DEX中的核心执行代码,让静态反编译工具(如jadx、apktool)只能看到空的方法结构,无法获取真实逻辑。
2. Shell:运行时还原(应用启动阶段)
Shell模块最终以DEX/SO形式集成到加壳APK中,是运行时还原代码的核心,主要逻辑包括:
- 接管应用启动流程,替换ClassLoader的dexElements,加载壳逻辑;
- Hook Art库的
DefineClass/LoadClass等关键函数,监控类加载过程; - 读取提前抽取的CodeItem文件,在类加载时将代码动态回填到内存中的DEX区域;
- 反调试/反注入防护:检测Frida(进程/线程/SO层面)、启用ptrace自调试、子进程守护等;
- 完成代码回填后,调用原Application的生命周期方法,恢复应用正常运行。
此外,Shell模块还对关键代码段做了加密保护(如ELF段的RC4解密、字符串XOR混淆),进一步提升逆向难度。
三、核心功能特性
1. 核心加固能力
- DEX CodeItem抽取与回填:静态剥离方法执行代码,运行时动态还原,杜绝静态反编译获取核心逻辑;
- 多维度反逆向防护 :
- 检测Frida:扫描进程内存中的
frida-agent.so、检测Frida特征线程(如gum-js-loop); - 自调试保护:通过
ptrace(PTRACE_TRACEME)防止调试器附加; - 子进程守护:fork子进程监控主进程,异常时触发崩溃,防止篡改;
- 代码段加密:SO文件的
.bitcode段通过RC4加密,运行时解密后执行。
- 检测Frida:扫描进程内存中的
2. 易用性与灵活性
- 多ABI支持:支持arm(armeabi-v7a)、arm64(arm64-v8a)、x86、x86_64,可通过参数排除指定ABI;
- 丰富的命令行参数:支持自定义输出目录、跳过签名、保留指定类(提升启动速度)、调试模式等;
- 低侵入性:无需修改原应用代码,直接对APK/AAB文件加固。
3. 轻量级与兼容性
- 依赖库轻量化:基于Dobby/bhook实现Hook、minizip-ng处理压缩包、ManifestEditor修改清单文件;
- 兼容Android 5.0+全版本,适配不同Android版本的Art库路径(如Android 10+的apex路径)。
四、快速使用指南
1. 快速上手(下载预编译包)
- 前往项目Releases页面下载
executable.zip并解压; - 执行以下命令完成加固:
shell
java -jar dpt.jar -f /path/to/your/app.apk
2. 手动编译(自定义修改)
shell
# 克隆仓库(含子模块)
git clone --recursive https://github.com/luoyesiqiu/dpt-shell -b v2.7.1
cd dpt-shell
# 编译生成可执行包
./gradlew assemble
# 进入编译后的目录执行加固
cd executable
java -jar dpt.jar -f /path/to/your/app.apk
3. 关键命令行参数
| 参数 | 说明 |
|---|---|
-f,--package-file |
指定待加固的APK/AAB文件(必选) |
-o,--output |
指定加固后文件的输出目录 |
-e,--exclude-abi |
排除指定ABI(如x86,x86_64) |
-K,--keep-classes |
保留指定类不加固,提升启动速度 |
--debug |
生成可调试的加固包 |
--no-sign |
不对加固后的APK签名 |
--dump-code |
导出DEX的CodeItem到JSON文件(调试用) |
五、技术栈与核心依赖
dpt-shell基于Java+C/C++开发,核心依赖包括:
- Hook框架:Dobby、bhook(字节码级Hook);
- DEX/APK处理:dx、dexmaker、zip4j、zipalign-java;
- 反逆向:Obfuscate(字符串混淆)、ptrace/syscall(系统调用防护);
- 辅助工具:ManifestEditor(清单修改)、JSON-java(配置解析)、commons-cli(命令行解析)。
六、总结
dpt-shell 是一款极具学习价值的Android Dex加固工具,其核心的"代码抽取+运行时回填"思路,以及Frida检测、ptrace防护、Art库Hook等技术,覆盖了Android加固的核心场景。