
Android APKパッケージの忍者リバースエンジニアリング
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、シェルコマンド、その他の汎用文字列のリスト
さらに、NinjaDroidは [apktool](https://github.com/iBotPeaches/Apktool) と [dex2jar](https://github.com/pxb1988/dex2jar) を使用して、以下を抽出・保存します。
- 抽出されたすべてのAPK情報を含むJSONレポートファイル
- `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
NinjaDroidをDockerで実行するには、Dockerがインストールされている必要があります。
Dockerイメージをビルドするには、次のコマンドを実行してください。```shell
$ make build-docker
$ docker run --name ninjadroid ninjadroid:latest ninjadroid --help
Note that you need to bind the directory containing the target APK package to the Docker image:```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)。
NinjaDroid を Snap として実行するには、Snap と snapcraft がインストールされている必要があります。
以下のコマンドを実行することで、必要なすべての Snap 依存関係がインストールされます:```shell
$ make build-snap
$ make install-snap
$ ninjadroid --help
**注記:** `-e`/`--extract` オプションは、`--devmode` オプションを使用せずに snap をインストールした場合、正しく機能しません (参照: https://github.com/rovellipaolo/NinjaDroid/issues/20)。
## テスト
設定後 (「インストール」セクション参照)、以下の手順でテストとチェックスタイルを実行することもできます。
### ネイティブ
ローカルマシンで実行するには、以下のコマンドを実行します:```shell
$ make test
$ make regression
$ make checkstyle
次のコマンドを実行して、カバレッジ付きでテストを実行することもできます。```shell $ make test-coverage
かつ/または、checkstyle が各 git commit 時に自動的に実行されるように、以下のコマンドを実行して設定してください:```
$ make install-githooks
Dockerで実行するには、以下のコマンドを実行してください。```shell $ make test-docker $ make regression-docker $ make checkstyle-docker
### Flatpak
Flatpakで回帰テストを実行するには、次のコマンドを実行してください:```shell
$ make regression-flatpak
Snapで回帰テストを実行するには、次のコマンドを実行してください:```shell $ make regression-snap
## 使用方法
以下は、サンプルAPKパッケージに対してNinjaDroidを実行する例です。