702.html

Obfuscapk是一款模块化的Python工具,它可以帮助研究人员在无需应用程序源代码的情况下对Android App进行混淆处理。Obfuscapk使用了apktool来对原始APK文件进行反编译,并构建出一个新的应用程序,最后再对反编译的smali代码、资源文件和Manifest文件应用混淆处理技术。混淆后的应用回保留原有的函数功能,但不同之处就在于,混淆后的应用源码会跟初始的应用源码有很大的区别。

工具架构

702.html

Obfuscapk基于模块化结构实现,以便进行功能扩展,而且还集成了一套插件系统。在Obfuscapk中,每一个混淆器都属于一个插件,并且都继承了一个抽象的基类,它们都需要实现obfuscate方法。当工具开始处理一个新的Android应用文件时,它回创建一个混淆对象来存储所有需要的信息,例如反编译的smali代码的位置,以及处理操作的状态。接下来,Obfuscapk会将混淆对象以参数的形式传递给obfuscate方法,最终发送给所有处于活动状态的插件或混淆器。

值得一提的是,广大研究人员可以根据自己的需要扩展和开发新的混淆器,研究人员可以直接向“src/obfuscapk/obfuscators”目录中添加混淆技术或插件元数据(.obfuscator文件)的实现源码。工具将会自动检测新的插件,因此无需进行额外配置。

工具安装

我们有两种方法来在自己的设备上安装和使用Obfuscapk,第一种就是使用Docker,另一种就是在Python 3.7环境下直接使用项目源码。在这两种方式下,首先要做的就是将项目源码拷贝到本地目录中:

$ git clone https://github.com/ClaudiuGeorgiu/Obfuscapk.git

Docker镜像

依赖组件

我们建议大家使用这种方式来安装Obfuscapk,因为这种方式只需要安装Docker的最新版本即可:

$ docker --version

Docker version 19.03.0, build aeac949

官方Docker Hub镜像

我们可以直接在Docker Hub上下载官方的Obfuscapk Docker镜像:

$ # Download the Docker image.

$ docker pull claudiugeorgiu/obfuscapk

$ # Give it a shorter name.

$ docker tag claudiugeorgiu/obfuscapk obfuscapk

安装

如果你从Docker Hub下载了官方镜像,那么我们就可以直接开始使用了,否则你还需要执行下列命令来创建“Obfuscapk/src/ ”目录(该目录中包含了Dockerfile)来构建Docker镜像:

$ # 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

Docker镜像准备好之后,需要运行下列命令检测是否安装正确:

$ docker run --rm -it obfuscapk --help

usage: python3.7 -m obfuscapk.cli [-h] -o OBFUSCATOR [-w DIR] [-d OUT_APK]

...

现在,Obfuscapk已经可以使用了。

源码安装

依赖组件

确保设备上已安装了apktool、jarsigner和zipalign,并且能够直接通过命令行工具使用:

$ apktool

Apktool v2.4.0 - a tool for reengineering Android apk files

...

$ jarsigner

Usage: jarsigner [options] jar-file alias

jarsigner -verify [options] jar-file [alias...]

...

$ zipalign

Zip alignment utility

Copyright (C) 2009 The Android Open Source Project

...

如需安装和使用apktool,则要求最新版本的Java。apktool、jarsigner和zipalign的可执行程序路径需要在下列环境变量中进行配置:APKTOOL_PATH、JARSIGNER_PATH和ZIPALIGN_PATH。当然了,除了上述组件之外,你还需要安装Python 3.7。

安装

在项目主目录中运行下列命令即可完成依赖组件的安装:

$ # Make sure to run the commands in Obfuscapk/ directory.

$ # The usage of a virtual environment is highly recommended, e.g., virtualenv.

$ # If not using virtualenv (https://virtualenv.pypa.io/), skip the next 2 lines.

$ virtualenv -p python3.7 venv

$ source venv/bin/activate

$ # Install Obfuscapk's requirements.

$ python3.7 -m pip install -r src/requirements.txt

接下来,运行下列命令确保工具安装正确:

$ 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.7 -m obfuscapk.cli --help

usage: python3.7 -m obfuscapk.cli [-h] -o OBFUSCATOR [-w DIR] [-d OUT_APK]

...

现在,Obfuscapk已经可以使用了。

工具使用

Docker镜像-本地目录中包含了待混淆的应用程序,需将其加载进容器中的“/workdir”目录中:

$ docker run --rm -it -u $(id -u):$(id -g) -v "${PWD}":"/workdir" obfuscapk [params...]

源码-所有的命令都需要在“Obfuscapk/src/”目录中运行:

$ python3.7 -m obfuscapk.cli [params...]

查看帮助信息:

$ obfuscapk --help

obfuscapk [-h] -o OBFUSCATOR [-w DIR] [-d OUT_APK] [-i] [-p] [-k VT_API_KEY]

工具有两个强制参数,第一个是“”,即待混淆APK的路径;另一个就是需要使用的混淆技术列表:

-w DIR:设置工作目录,并保存apktool生成的中间文件。

-d OUT_APK:设置目的文件的路径。

-i:设置是否在混淆过程中忽略第三方库。

-p:是否显示混淆进程条。

-k VT_API_KEY:设置VirusTotal API密钥,仅在使用VirusTotal时需要设置。

工具使用样例

Obfuscapk的简单使用样例:

$ # original.apk is a valid Android apk file.

$ obfuscapk -o RandomManifest -o Rebuild -o NewSignature -o NewAlignment original.apk

项目地址

Obfuscapk:【GitHub传送门】

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐