Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
Obfuscapk — 一款针对Android应用的自动混淆工具,以黑盒方式运行,支持高级混淆特性,并采用模块化架构,易于扩展以集成新技术。 | Kitploit
工具/GitHubGitHub/claudiugeorgiu/obfuscapk
Android安全静态分析动态分析 (沙盒)逆向工程移动安全论文与研究学习与教育Archived
GitHubclaudiugeorgiu/obfuscapk

Obfuscapk

一款针对Android应用的自动混淆工具,以黑盒方式运行,支持高级混淆特性,并采用模块化架构,易于扩展以集成新技术。

查看仓库
1.3k32392年前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

[!IMPORTANT] 该项目已归档,不再维护。

常见问题的答案可在 FAQ 和 故障排除 中找到。

Logo

一款针对 Android 应用的黑盒混淆工具。

Codacy Code Coverage Python Version License

Obfuscapk 是一款模块化的 Python 工具,用于在不需源码的情况下混淆 Android 应用,它使用 apktool 反编译原始 apk 文件,并在对反编译后的 smali 代码、资源和清单文件应用某些混淆技术后,构建一个新的应用。混淆后的应用保留与原始应用相同的功能,但底层差异有时会使新应用与原始应用大相径庭(例如,对基于签名的防病毒软件而言)。

🆕 Android App Bundle 支持 🆕

Obfuscapk 正在通过使用 BundleDecompiler 添加对 Android App Bundles(aab 文件)的支持(参见 #121)。要使用这项新功能,请从 此处 下载最新版本的 BundleDecompiler,将其保存为 BundleDecompiler.jar 并放置在 PATH 包含的目录中(例如,在 Ubuntu 中,/usr/local/bin 或 /usr/bin),并确保它具有可执行权限。

[!IMPORTANT] BundleDecompiler 尚不能在 Windows 上运行,因此 Obfuscapk 在 Windows 平台不支持 App Bundle 混淆。此外,App Bundle 支持仍处于早期开发阶段,如果您遇到任何问题或希望帮助我们改进,请参阅 贡献指南。

❱ 出版物

关于 Obfuscapk 的更多详细信息可在论文 "Obfuscapk: An open-source black-box obfuscation tool for Android apps" 中找到。您可以按如下方式引用该论文:```BibTeX @article{aonzo2020obfuscapk, title = "Obfuscapk: An open-source black-box obfuscation tool for Android apps", journal = "SoftwareX", volume = "11", pages = "100403", year = "2020", issn = "2352-7110", doi = "https://doi.org/10.1016/j.softx.2020.100403", url = "https://www.sciencedirect.com/science/article/pii/S2352711019302791", author = "Simone Aonzo and Gabriel Claudiu Georgiu and Luca Verderame and Alessio Merlo", keywords = "Android, Obfuscation, Program analysis" }

root@kitploit:~
## ❱ 演示

![演示](https://assets.kitploit.com/production/public/readmes/3132/632e285a29e53c28a5549c70012673a2761ca3ca4fd7eac3ad89be3d6a9a2a21.gif)



## ❱ 架构

![架构图](https://assets.kitploit.com/production/public/readmes/3132/da41bec35f1c09df38ad201aa1e74f0b1426dba0201162a70b4d5376b3da654e.png)

Obfuscapk 被设计为模块化且易于扩展,因此它基于一个
[插件系统](https://github.com/tibonihoo/yapsy) 构建。因此,每个混淆器都是一个
继承自抽象
[基类](https://github.com/ClaudiuGeorgiu/Obfuscapk/blob/master/src/obfuscapk/obfuscator_category.py) 的插件,
并且需要实现 `obfuscate` 方法。当工具开始处理一个新的
Android 应用程序文件时,它会创建一个
[混淆对象](https://github.com/ClaudiuGeorgiu/Obfuscapk/blob/master/src/obfuscapk/obfuscation.py)
来存储所有需要的信息(例如,反编译后的 `smali` 代码的位置),
以及操作的内部状态(例如,已使用的混淆器列表)。
然后,该混淆对象作为参数传递给 `obfuscate` 方法,被所有
激活的插件/混淆器(按顺序)处理和修改。激活插件的列表和
顺序通过[命令行选项](#-使用方式)指定。

该工具可以轻松地通过新混淆器进行扩展:只需在
[`src/obfuscapk/obfuscators`](https://github.com/ClaudiuGeorgiu/Obfuscapk/tree/master/src/obfuscapk/obfuscators)
目录中添加实现混淆技术的源代码和插件元数据(一个
`<混淆器名称>.obfuscator` 文件)即可(以一个简单的现有混淆器如
[`Nop`](https://github.com/ClaudiuGeorgiu/Obfuscapk/blob/master/src/obfuscapk/obfuscators/nop/nop.py)
作为起始示例)。该工具会自动检测新插件,因此无需
进一步配置(新插件将与该工具捆绑的所有其他插件一样被对待)。



## ❱ 安装

有两种方式可以在你自己的计算机上获得 Obfuscapk 的工作副本:要么
[使用 Docker](#docker-镜像),要么在 `Python 3` 环境中
[直接使用源码](#从源码安装)。无论哪种方式,首先要做的是获取此仓库的本地副本,
因此,在你想要保存项目的目录中打开终端并克隆仓库:```Shell
$ git clone https://github.com/ClaudiuGeorgiu/Obfuscapk.git

Docker 镜像


先决条件

这是安装 Obfuscapk 的推荐方式,因为唯一的先决条件是 安装一个较新版本的 Docker:```Shell $ docker --version Docker version 20.10.21, build baeda1f

root@kitploit:~
#### 官方 Docker Hub 镜像

[Obfuscapk 官方 Docker 镜像](https://hub.docker.com/r/claudiugeorgiu/obfuscapk) 可在 Docker Hub 上获取(从此仓库自动构建):```Shell
$ # Download the Docker image.
$ docker pull claudiugeorgiu/obfuscapk
$ # Give it a shorter name.
$ docker tag claudiugeorgiu/obfuscapk obfuscapk

安装

如果你已经从 Docker Hub 下载了官方镜像,那么你就可以直接使用该工具了,请查看使用说明,否则请在之前创建的 Obfuscapk/src/ 目录(即包含 Dockerfile 的文件夹)中执行以下命令来构建 Docker 镜像:```Shell $ # Make sure to run the command in Obfuscapk/src/ directory. $ # It will take some time to download and install all the dependencies. $ docker build -t obfuscapk .

root@kitploit:~
当 Docker 镜像准备好后,快速测试一下以确保所有内容都已正确安装:```Shell
$ docker run --rm -it obfuscapk --help
usage: python3 -m obfuscapk.cli [-h] -o OBFUSCATOR [-w DIR] [-d OUT_APK_OR_AAB]
...

Obfuscapk 现在已准备好使用,请参阅 使用说明 获取更多信息。

从源码构建


先决条件

确保已安装最新版本的 apktool、 apksigner 和 zipalign,并可从命令行调用:```Shell $ apktool Apktool v2.9.0 - a tool for reengineering Android apk files ...

root@kitploit:~
```Shell
$ apksigner
Usage:  apksigner <command> [options]
        apksigner --version
        apksigner --help
...
root@kitploit:~
$ zipalign
Zip alignment utility
Copyright (C) 2009 The Android Open Source Project
...

为了支持应用束混淆,你还需要BundleDecompiler,所以从这里下载最新可用版本,将其保存为BundleDecompiler.jar到PATH所包含的目录中(例如,在Ubuntu中,/usr/local/bin或/usr/bin),并确保设置了可执行标志。

要使用BundleDecompiler和apktool,你还需要一个较新版本的Java。zipalign和apksigner包含在Android SDK中。可执行文件的位置也可以通过以下环境变量指定:APKTOOL_PATH、BUNDLE_DECOMPILER_PATH、APKSIGNER_PATH和ZIPALIGN_PATH(例如,在Ubuntu中,在同一个终端运行Obfuscapk之前,运行export APKTOOL_PATH=/custom/location/apktool)。

除了上述工具外,此项目的唯一要求是安装可用的Python 3(至少3.7)(连同其包管理器pip)。

安装

在项目的主目录(Obfuscapk/)中运行以下命令以安装所需的依赖项:```Shell $ # Make sure to run the commands in Obfuscapk/ directory.

$ # The usage of a virtual environment is highly recommended. $ python3 -m venv venv $ source venv/bin/activate

$ # Install Obfuscapk's requirements. $ python3 -m pip install -r src/requirements.txt

root@kitploit:~
在安装完依赖项后,快速测试以确保一切正常工作:```Shell
$ cd src/
$ # The following command has to be executed always from Obfuscapk/src/ directory
$ # or by adding Obfuscapk/src/ directory to PYTHONPATH environment variable.
$ python3 -m obfuscapk.cli --help
usage: python3 -m obfuscapk.cli [-h] -o OBFUSCATOR [-w DIR] [-d OUT_APK_OR_AAB]
...

Obfuscapk 现已准备就绪,可以使用了,有关更多信息,请参阅 使用说明。

❱ 使用方法

从现在开始,Obfuscapk 将被视为一个可执行文件 obfuscapk,因此您需要根据工具的安装方式来调整命令:

  • Docker 镜像:需要将包含待混淆应用程序的本地目录挂载到容器中的 /workdir (例如,当前目录 "${PWD}"),因此命令:

    root@kitploit:~
    $ obfuscapk [params...]
    

    变为:

    root@kitploit:~
    $ docker run --rm -it -u $(id -u):$(id -g) -v "${PWD}":"/workdir" obfuscapk [params...]
    
  • 从源码运行:每条指令都必须在 Obfuscapk/src/ 目录下执行(或者将 Obfuscapk/src/ 目录添加到 PYTHONPATH 环境变量中),因此命令:

    root@kitploit:~
    $ obfuscapk [params...]
    

    变为:

    root@kitploit:~
    $ python3 -m obfuscapk.cli [params...]
    

我们先来看一下帮助信息:```Shell $ obfuscapk --help obfuscapk [-h] -o OBFUSCATOR [-w DIR] [-d OUT_APK_OR_AAB] [-i] [-p] [-k VT_API_KEY] [--keystore-file KEYSTORE_FILE] [--keystore-password KEYSTORE_PASSWORD] [--key-alias KEY_ALIAS] [--key-password KEY_PASSWORD] [--use-aapt2] <APK_OR_BUNDLE_FILE>

root@kitploit:~
有两个必需参数:`<APK_OR_BUNDLE_FILE>`(APK 或 App Bundle 文件的路径,可以是相对路径或绝对路径)以及要应用的混淆技术名称列表(通过 `-o` 选项指定,可多次使用,例如 `-o Rebuild -o NewAlignment -o NewSignature`)。其他可选参数如下:

* `-w DIR` 用于设置工作目录,用于保存中间文件(由 `apktool` 生成)。如果未指定,则会在输入应用程序所在目录下创建一个名为 `obfuscation_working_dir` 的目录。这对调试目的很有用,但如果不需要,可以将其设置为临时目录(例如 `-w /tmp/`)。

* `-d OUT_APK_OR_AAB` 用于设置目标文件的路径:混淆过程生成的 APK 文件(例如 `-d /home/user/Desktop/obfuscated.apk` 或 `-d /home/user/Desktop/obfuscated.aab`)。如果未指定,最终的混淆文件将保存在工作目录内。注意:现有文件将被直接覆盖,不会给出任何警告。

* `-i` 是一个标志,用于在混淆过程中忽略已知的第三方库,以减少资源使用、提高性能并降低错误风险。要忽略的[库列表](https://github.com/ClaudiuGeorgiu/Obfuscapk/blob/master/src/obfuscapk/resources/libs_to_ignore.txt)改编自 [LiteRadar](https://github.com/pkumza/LiteRadar) 项目。

* `-p` 是一个标志,用于在混淆操作期间显示进度条。在批量操作/自动构建中使用该工具时,建议禁用进度条;否则应启用此标志以查看混淆进度。

* `-k VT_API_KEY` 仅在使用 `VirusTotal` 混淆器时需要,用于设置与 Virus Total 通信时使用的 API 密钥。

* `--keystore-file KEYSTORE_FILE`、`--keystore-password KEYSTORE_PASSWORD`、`--key-alias KEY_ALIAS` 和 `--key-password KEY_PASSWORD` 可用于指定自定义密钥库(APK 签名所需)。如果使用了 `--keystore-file`,则必须同时指定 `--keystore-password` 和 `--key-alias`;而 `--key-password` 仅在所选密钥的密码与密钥库密码不同时才需要。默认情况下(未指定 `--keystore-file` 时),使用 [Obfuscapk 附带的密钥库](https://github.com/ClaudiuGeorgiu/Obfuscapk/blob/master/src/obfuscapk/resources/obfuscation_keystore.jks)进行签名操作。

* `--ignore-packages-file IGNORE_PACKAGES_FILE` 是一个文件路径,该文件包含要忽略的包名。使用此选项时,这些包内的所有类都不会被混淆。文件格式应每行一个包名,如下例所示:
    ```
    com.mycompany.dontobfuscate
    com.mycompany.ignore
    ...
    ```
* `--use-aapt2` 是一个标志,用于在使用 `apktool` 重建应用时启用 aapt2 选项。

现在让我们看一个简单的实际示例,了解 Obfuscapk 的工作原理:```Shell
$ # original.apk is a valid Android apk file.
$ obfuscapk -o RandomManifest -o Rebuild -o NewAlignment -o NewSignature original.apk

执行上述命令时,后台实际发生的情况如下:

  • 由于未指定工作目录,因此在 original.apk 的相同位置创建了一个新的工作目录(obfuscation_working_dir),当发生错误时,这有助于检查 smali 文件/清单/资源。

  • 执行一些检查,确保所有所需的文件/可执行文件可用并准备就绪。

  • 实际的混淆过程开始:指定的混淆器按顺序逐一执行,直到没有剩余的混淆器或遇到错误为止。

    • 运行第一个混淆器时,使用 apktool 对 original.apk 进行反编译,结果存储在工作目录中。

    • 由于第一个混淆器是 RandomManifest,因此对反编译后的 Android 清单中的条目进行随机重新排序(不会破坏 xml 结构)。

    • Rebuild 混淆器简单地使用 apktool 重新构建应用程序(现在带有修改后的清单),并且由于未指定输出文件,生成的 apk 文件保存在之前创建的工作目录中。

    • NewAlignment 混淆器使用 zipalign 工具对齐生成的 apk 文件。

    • NewSignature 混淆器使用包含在 Obfuscapk 附带的密钥库 中的自定义证书对新创建的 apk 文件进行签名(不过可以使用 参数指定不同的密钥库)。

如前面的示例所示,Rebuild、NewAlignment 和 NewSignature 混淆器始终是完成混淆操作所必需的,以构建最终的混淆 apk 文件。它们并非实际的混淆技术,但在构建过程中是必需的,因此它们被包含在混淆器列表中,以保持整体架构的模块化。

不如预期工作?请参阅 FAQ 和 故障排查。

❱ 混淆器

Obfuscapk 中包含的混淆器可以根据其执行的操作分为不同的类别:

  • 简易类:顾名思义,此类别包括简单的操作(不会对原始应用程序进行太多修改),例如使用新签名对 apk 文件进行签名。

  • 重命名类:更改所用标识符(类、字段、方法)名称的操作。

  • 加密类:打包加密的代码/资源,并在应用执行期间解密。当 Obfuscapk 启动时,它会自动生成一个随机密钥(32 个字符,使用 ASCII 字母和数字),用于加密。

  • 代码类:所有涉及修改反编译源代码的操作。

  • 资源类:对资源文件的操作(如修改清单)。

  • 其他

下面简要介绍当前捆绑在 Obfuscapk 中的混淆器(按字母顺序排列)。有关更多详细信息,请参阅项目的源代码。

[!TIP] 并非以下所有混淆器都对应实际的混淆技术(例如 Rebuild、NewAlignment、NewSignature 和 VirusTotal),但它们被实现为混淆器,以保持架构的模块化并易于扩展新功能。

AdvancedReflection [代码类]

使用反射调用 Android 框架的危险 API。为了确定某个方法是否属于 Android 框架,Obfuscapk 参考了 Backes 等人 发现的映射。 📄 AdvancedReflection 源代码

ArithmeticBranch [代码类]

插入垃圾代码。本例中,垃圾代码由算术计算和一条取决于这些计算结果的分支指令组成,并且该分支永远不会被采用。 📄 ArithmeticBranch 源代码

AssetEncryption [加密类]

加密资产文件。 📄 AssetEncryption 源代码

CallIndirection [代码类]

此技术修改控制流图而不影响代码语义:它添加调用原始方法的新方法。例如,对方法 m1 的调用将被替换为一个新的包装方法 m2,该方法在被调用时会调用原始方法 m1。 📄 CallIndirection 源代码

ClassRename [重命名类]

更改包名并重命名类(甚至在清单文件中)。 📄 ClassRename 源代码

ConstStringEncryption [加密类]

加密代码中的常量字符串。 📄 ConstStringEncryption 源代码

DebugRemoval [代码类]

移除调试信息。 📄 DebugRemoval 源代码

FieldRename [重命名类]

重命名字段。 📄 FieldRename 源代码

Goto [代码类]

对于给定的方法,它插入一条指向方法末尾的 goto 指令和另一条指向第一条 goto 之后指令的 goto 指令;它通过添加两个新节点来修改控制流图。 📄 Goto 源代码

LibEncryption [加密类]

加密原生库。 📄 LibEncryption 源代码

MethodOverload [代码类]

它利用 Java 编程语言的重载特性,为不同的方法分配相同的名称但使用不同的参数。对于已有的方法,此技术创建一个具有相同名称和参数的新 void 方法,但添加新的随机参数。然后,新方法的主体填充随机算术指令。 📄 MethodOverload 源代码

MethodRename [重命名类]

重命名方法。 📄 MethodRename 源代码

NewAlignment [简易类]

重新对齐应用程序。 📄 NewAlignment 源代码

NewSignature [简易类]

使用新的自定义签名重新签名应用程序。 📄 NewSignature 源代码

Nop [代码类]

插入垃圾代码。Nop,是 no-operation(空操作)的缩写,是一条不做任何操作的专用指令。此技术只是在每个方法实现中插入随机的 nop 指令。 📄 Nop 源代码

RandomManifest [资源类]

随机重新排序清单文件中的条目。 📄 RandomManifest 源代码

Rebuild [简易类]

重新构建应用程序。 📄 Rebuild 源代码

Reflection [代码类]

此技术分析现有代码,寻找应用程序的方法调用,忽略对 Android 框架的调用(请参阅 AdvancedReflection)。如果它找到适合的方法调用指令(即非构造方法、公共可见性、足够的空闲寄存器等),则将此调用重定向到自定义方法,该方法将使用反射 API 调用原始方法。 📄 Reflection 源代码

Reorder [代码类]

此技术包括更改代码中基本块的顺序。当找到分支指令时,条件会被反转(例如,分支如果小于 变为 分支如果大于或等于),并且目标基本块会相应重新排序。此外,它还滥用 goto 指令随机重新排列代码。 📄 Reorder 源代码

ResStringEncryption [加密类]

加密资源中的字符串(仅那些在代码中调用的)。 📄 ResStringEncryption 源代码

VirusTotal [其他]

将原始应用程序和混淆后的应用程序发送到 Virus Total。您必须提供 VT API 密钥(请参见 -k 选项)。 📄 VirusTotal 源代码

❱ 许可证

您可以自由使用此代码,遵守 MIT 许可证。

❱ 致谢

Unige Dibris

本软件是为研究目的在热那亚大学 DIBRIS 的计算机安全实验室(CSecLab)开发的。

❱ 团队

  • Simone Aonzo - 研究助理
  • Gabriel Claudiu Georgiu - 核心开发者
  • Luca Verderame - 博士后研究员
  • Alessio Merlo - 教职人员
下载工具
--keystore-file
  • 当所有混淆器均无错误地执行完毕后,可以在 obfuscation_working_dir/original_obfuscated.apk 中找到生成的混淆 apk 文件,它已经签名、对齐,并且准备好安装到设备/模拟器中。