
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 3.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}] [-st] [-j]
[-o DIR] [-m] [--print-filter RULES] [--include-types]
[FILE ...]
APKiD - Android Application Identifier v3.2.0
positional arguments:
FILE apk, dex, or directory (default: None)
options:
-h, --help show this help message and exit
-v, --verbose log debug messages (default: False)
scanning:
-t TIMEOUT, --timeout TIMEOUT Yara scan timeout (in seconds) (default: 30)
-r, --recursive recurse into subdirectories (default: False)
--scan-depth SCAN_DEPTH how deep to go when scanning nested zips (default: 2)
--entry-max-scan-size ENTRY_MAX_SCAN_SIZE max zip entry size to scan in bytes, 0 = no limit
(default: 104857600)
--typing {magic,filename,none} method to decide which files to scan (default: magic)
-st, --scan-trackers scans for embedded trackers (default: False)
output:
-j, --json output scan results in JSON format (default: False)
-o DIR, --output-dir DIR write individual results here (implies --json)
(default: None)
-m, --print-matches print matched rules and strings to stdout (default:
False)
--print-filter RULES filter printed matches: comma-separated rule names to
include ('+' or no prefix) or exclude ('-' prefix).
Implies --print-matches. Use '=' when the value starts
with '-', e.g. --print-filter=-is_apk,-is_signed_apk
(default: )
--include-types include file type info for matched files (default:
False)
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 を参照してください。