Android 安全加固工具 dpt-shell

文章目录

    • 前言
    • 一、工具核心定位
    • 二、核心加固原理
      • [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动态回填到内存中,从根本上增加静态反编译的难度。

项目地址:https://github.com/luoyesiqiu/dpt-shell/

二、核心加固原理

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加密,运行时解密后执行。

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. 快速上手(下载预编译包)

  1. 前往项目Releases页面下载executable.zip并解压;
  2. 执行以下命令完成加固:
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加固的核心场景。

相关推荐
小北方城市网4 分钟前
第 5 课:服务网格(Istio)实战|大规模微服务的流量与安全治理体系
大数据·开发语言·人工智能·python·安全·微服务·istio
冬奇Lab5 分钟前
稳定性性能系列之九——启动性能优化:Boot、冷启动与热启动
android·性能优化
STCNXPARM9 分钟前
Android 显示系统 - View体系、WMS
android·wms·view·android显示子系统
weixin_4469388712 分钟前
谷歌play上架广告app
android
AIGC合规助手16 分钟前
最新I江苏算法、大模型备案攻略+补贴政策汇总
大数据·人工智能·安全·语言模型·aigc
干前端23 分钟前
基于PDF.js的安全PDF预览组件实现:从虚拟滚动到水印渲染
javascript·安全·pdf
Kapaseker28 分钟前
初级与中级的Android面试题区别在哪里
android·kotlin
Kapaseker33 分钟前
AOSP 发布节奏调整:一年两更
android
网硕互联的小客服34 分钟前
windows 服务器系统下如何通过命令还原mysql 数据库?
运维·服务器·数据库·安全
huibin14785236940 分钟前
开机后无网络,多次重启手机发现开机时间永远是版本编译时间(高通)
android