NinjaDroid 是一个用于逆向工程 Android APK 包的简单工具。
发布于:https://snapcraft.io/ninjadroid```shell $ snap install ninjadroid --channel=beta
[](https://github.com/rovellipaolo/NinjaDroid/actions)
[](https://coveralls.io/github/rovellipaolo/NinjaDroid)
[](https://www.gnu.org/licenses/gpl-3.0)
[](https://snapcraft.io/ninjadroid)

## 概述
NinjaDroid 使用 [AXMLParser](https://github.com/appknox/pyaxmlparser) 以及一系列基于 `aapt`、`keytool`、`string` 等的 Python 脚本,从给定的 APK 包中提取一系列信息,例如:
- APK 文件列表:文件名、大小、MD5、SHA-1、SHA-256 和 SHA-512
- `AndroidManifest.xml` 信息:应用名称、包名、版本、SDK、权限、活动、服务、广播接收器等
- `CERT.RSA/DSA` 数字证书信息:序列号、有效期、指纹、颁发者和所有者
- 硬编码在 `classes.dex` 文件中的 URL、shell 命令和其他通用字符串列表
此外,NinjaDroid 使用 [apktool](https://github.com/iBotPeaches/Apktool) 和 [dex2jar](https://github.com/pxb1988/dex2jar) 提取并存储:
- JSON 报告文件,包含所有提取的 APK 信息
- `AndroidManifest.xml` 文件(借助 `apktool`)
- `CERT.RSA/DSA` 数字证书文件
- `classes.dex` 文件
- 转换后的 _.jar_ 文件(借助 `dex2jar`)
- 反汇编的 smali 文件(借助 `apktool`)
- `assets/` 和 `res/` 文件夹及其内容(借助 `apktool`)
## 构建
第一步是克隆 NinjaDroid 仓库,或下载其源代码。```shell
$ git clone https://github.com/rovellipaolo/NinjaDroid
$ cd NinjaDroid
NinjaDroid 有多种执行方式:在本地环境中原生运行、在 Docker 中运行、作为 Flatpak(实验性)运行,以及作为 Snap(实验性)运行。
要在本地机器上执行 NinjaDroid,你需要安装 Python 3.5 或更高版本、Java 8 或更高版本以及 binutils。
可选地,如果你已在本地安装了 Android SDK,你可以使用 SDK 版本的 aapt 代替自带的版本。为此,你需要修改 ninjadroid/aapt/Aapt.py 中的 aapt 路径(即 __AAPT_EXEC_PATH = "ninjadroid/aapt/aapt")。
只需运行以下命令,这些命令将安装所有 Python 依赖(确保 aapt、apktool 和 dex2jar 具有可执行权限),并将 ninjadroid 符号链接添加到 /usr/local/bin/。```shell
$ make build-linux
$ make install
$ ninjadroid --help
#### MacOS
只需运行以下命令,这些命令将安装所有必需的 Python 依赖项(确保 `aapt`、`apktool` 和 `dex2jar` 具有可执行权限)并将 `ninjadroid` 符号链接添加到 `/usr/local/bin/`。```shell
$ make build-macos
$ make install
$ ninjadroid --help
要在Docker中执行NinjaDroid,你需要安装Docker。
要构建Docker镜像,请运行以下命令:
$ make build-docker
$ docker run --name ninjadroid ninjadroid:latest ninjadroid --help
```
请注意,您需要将包含目标APK包的目录绑定到Docker镜像:```shell
$ mkdir apks
$ cp /path/to/your/package.apk apks/package.apk
$ docker run --name ninjadroid -it --rm -v $(pwd)/apks:/apks ninjadroid:latest ninjadroid /apks/package.apk -aj
```
同样地,当使用 `-e`/`--extract` 选项时,输出目录也需要授予权限:```shell
$ mkdir output
$ chmod 777
$ docker run --name ninjadroid --rm -v $(pwd)/apks:/apks -v $(pwd)/output:/output ninjadroid:latest ninjadroid /apks/package.apk -ae /output
```
### Flatpak(实验性)
要作为 Flatpak 运行 NinjaDroid,你需要安装 `Flatpak` 和 `flatpak-builder`。
只需执行以下命令,这些命令将安装所有必需的 Flatpak 依赖项:```shell
$ make build-flatpak
$ flatpak-builder --run flatpak/build flatpak/com.github.rovellipaolo.NinjaDroid.yaml ninjadroid --help
```
**注意:** 目前 `-e`/`--extract` 选项无法正常工作(详情参见:https://github.com/rovellipaolo/NinjaDroid/issues/21)。
### Snap(实验性功能)
要将 NinjaDroid 作为 Snap 运行,你需要安装 `Snap` 和 `snapcraft`。
只需运行以下命令,这些命令将安装所有所需的 Snap 依赖项:```shell
$ make build-snap
$ make install-snap
$ ninjadroid --help
```
**注意:** 如果 snap 安装时未使用 `--devmode` 选项,`-e`/`--extract` 选项将无法正常工作(参见:https://github.com/rovellipaolo/NinjaDroid/issues/20)。
## 测试
一旦你完成了配置(参见“安装”部分),你还可以按以下方式运行测试和检查样式。
### 本地
要在你的本地机器上运行它们,请执行以下命令:```shell
$ make test
$ make regression
$ make checkstyle
```
您也可以通过运行以下命令来执行带覆盖率的测试:```shell
$ make test-coverage
```
以及/或者配置checkstyle以在每次git提交时自动运行,通过执行以下命令:```
$ make install-githooks
```
### Docker
要在Docker中运行它们,请执行以下命令:```shell
$ make test-docker
$ make regression-docker
$ make checkstyle-docker
```
### Flatpak
要运行 Flatpak 中的回归测试,请执行以下命令:```shell
$ make regression-flatpak
```
### Snap
在 Snap 中运行回归测试,请执行以下命令:```shell
$ make regression-snap
```
## 用法