
Androidアプリケーションのパッカー、プロテクター、難読化ツール、および変種を識別する - Android向けPEiD
APKiD は、APK がどのように作られたかについての情報を提供します。多くのコンパイラ、パッカー、難読化ツール、その他の奇妙なものを識別します。Android 版の PEiD です。

このツールがどのような用途に使えるかの詳細については、以下をご覧ください:
pip install apkid
APKiD は Docker でも実行できます! もちろん、これには git と Docker がインストールされている必要があります。
Docker の使用方法は次のとおりです:
git clone https://github.com/rednaga/APKiD
cd APKiD/
docker build . -t rednaga:apkid
docker/apkid.sh ~/reverse/targets/android/example/example.apk
[+] APKiD 2.1.0 :: from RedNaga :: rednaga.io
[*] example.apk!classes.dex
|-> compiler : dx
usage: apkid [-h] [-v] [-t TIMEOUT] [-r] [--scan-depth SCAN_DEPTH]
[--entry-max-scan-size ENTRY_MAX_SCAN_SIZE] [--typing {magic,filename,none}] [-j]
[-o DIR]
[FILE [FILE ...]]
APKiD - Android Application Identifier v2.1.2
positional arguments:
FILE apk, dex, or directory
optional arguments:
-h, --help show this help message and exit
-v, --verbose log debug messages
scanning:
-t TIMEOUT, --timeout TIMEOUT Yara scan timeout (in seconds)
-r, --recursive recurse into subdirectories
--scan-depth SCAN_DEPTH how deep to go when scanning nested zips
--entry-max-scan-size ENTRY_MAX_SCAN_SIZE max zip entry size to scan in bytes, 0 = no limit
--typing {magic,filename,none} method to decide which files to scan
output:
-j, --json output scan results in JSON format
-o DIR, --output-dir DIR write individual results here (implies --json)
APKiD が認識しない APK や DEX に遭遇した場合は、GitHub issue を開いて以下を教えてください:
検出する「何か興味深いもの」について、どのような概念でも受け付けています。パッカー、コンパイラ、難読化ツールだけに限定しないでください。興味深いアンチディスアセンブラ、アンチ VM、アンチ * のトリックがあれば、issue を作成してください。
プルリクエストを歓迎します。新しいルールを提出する場合は、ルールを確認できるように APK / DEX のファイルハッシュを必ず含めてください。
このツールはデュアルライセンスで提供されています: クローズドソースプロジェクトに適した商用ライセンスと、オープンソースソフトウェアで使用できる GPL ライセンスです。
ニーズに応じて、いずれかを選択し、そのポリシーに従う必要があります。各ライセンスタイプのポリシーと契約の詳細は、LICENSE.COMMERCIAL および LICENSE.GPL ファイルで確認できます。
変更を加えたり、独自のルールを開発したりするために最新バージョンをインストールしたい場合は、このリポジトリをクローンし、ルールをコンパイルし、パッケージを編集可能モードでインストールするだけです:
git clone https://github.com/rednaga/APKiD
cd APKiD
python prep-release.py
pip install -e .[dev,test]
上記の python prep-release.py コマンドは、yara-python および yara-python-dex パッケージが既にインストールされている必要があります。
ローカルマシンや Python がインストールされている場所に依存する権限エラーにより上記が機能しない場合は、--user フラグを指定してみてください。これは仮想環境を使用していない場合に必要になる可能性があります:
pip install -e .[dev,test] --user
ルールを更新した場合は、必ず prep-release.py を実行して再コンパイルしてください。
Windows を使用している場合は、以前のバージョンの Yara をアンインストールし、コンパイル前に Yara 3.11.0 と yara-python-dex をインストールしてください
pip uninstall -y yara-python yara-python-dex
pip install yara-python==3.11.0 wheel
pip wheel --wheel-dir=yara-python-dex git+https://github.com/MobSF/yara-python-dex.git
pip install --no-index --find-links=yara-python-dex yara-python-dex
新しいバージョンをリリースする際は、apkid/init.py でバージョンが更新されていることを確認してください。
テストの実行については、.travis.yml を参照して、開発環境とテスト環境のセットアップ方法およびテストの実行方法を確認してください。
コンパイル済みルールと readme を更新し、パッケージをビルドして PyPI にアップロードします:
./prep-release.py readme
rm -f dist/*
python setup.py sdist bdist_wheel
twine upload --repository-url https://upload.pypi.org/legacy/ dist/*
詳細については、Packaging Projects を参照してください。