アップデート一覧に戻る
New releaseAug 17, 2026

apk-info v1.0.12

APK フル機能パーサー

共有

apk-info

Crates.io Version docs.rs PyPI - Version

フル機能のapkパーサー。

特徴

  • マルウェア対応のzip抽出器。BadPackテクニックに関する優れた記事
  • マルウェア対応のaxmlおよびarsc抽出器;
  • 完全なAXML(Android Binary XML)実装;
  • 完全なARSC(Android Resource)実装;
  • APK Signature Block 42に含まれる情報の抽出をサポート:
  • Android OSが行う方法に基づくMainActivityの正確な抽出;
  • Python 3.10+向けの型付きバインディング - もう# type: ignoreは不要;
  • そしてもちろん、ただの高速なパーサー - 🙃

はじめに

CLI

インストール

cargo install apk-info-cli

ヘルプ

A command-line tool to inspect and extract APK files

Usage: apk-info [COMMAND]

Commands:
  show        Show basic information about apk file
  extract     Unpack apk files as zip archive [aliases: x]
  axml        Read and pretty-print binary AndroidManifest.xml
  completion  Generate shell completion
  help        Print this message or the help of the given subcommand(s)

Options:
  -h, --help     Print help
  -V, --version  Print version

Python

インストール

uv pip install apk-info

APKの基本情報を取得

from apk_info import APK

apk = APK("./path-to-file.apk")
package_name = apk.get_package_name()
main_activities = apk.get_main_activities()
min_sdk = apk.get_min_sdk_version()

print(f"Package Name: {package_name}")
print(f"Minimal SDK: {min_sdk}")

if not main_activities:
    print("apk is not launchable!")
    exit()

print(f"Main Activity: {package_name}/{main_activities[0]}")

署名情報を取得

import sys

from apk_info import APK, Signature

if len(sys.argv) < 2:
    print(f"usage: {sys.argv[0]} <apk>")
    sys.exit(1)

file = sys.argv[1]
apk = APK(file)

signatures = apk.get_signatures()
for signature in signatures:
    match signature:
        case Signature.V1() | Signature.V2() | Signature.V3() | Signature.V31():
            for cert in signature.certificates:
                print(f"{cert.subject=} {cert.issuer=} {cert.valid_from=} {cert.valid_until=}")
        case Signature.ApkChannelBlock():
            print(f"got apk channel block: {signature.value}")
        case _:
            print(f"oh, cool, library added some new feature - {signature}")

パフォーマンス分析

環境:

  • OS: macOS Tahoe 26.0.1 arm64
  • CPU: Apple M3 Pro (12) @ 4.06 GHz

スクリプトexamples/bench.py

  1. ファイルから利用可能なすべての署名を抽出;
  2. パッケージ名を抽出;
  3. 最小SDKバージョンを抽出;
  4. 全てのMain Activityのリストを取得;
  5. アプリケーション名を取得;

apk-infoライブラリ:

  • ビルド - release-lto
  • Pythonバインディング(正直な比較);

テストケース(クリーンコレクション):

  • 152個のAPKファイル;
  • 総サイズ - 20GB;
  • ログモード - warning;
#apk-infoandroguard
10.98s user 4.32s system 80% cpu 6.584 total57.39s user 4.88s system 97% cpu 1:03.85 total
20.96s user 4.23s system 79% cpu 6.486 total57.98s user 5.04s system 97% cpu 1:04.80 total
30.95s user 4.15s system 79% cpu 6.422 total55.56s user 4.48s system 97% cpu 1:01.55 total

テストケース(マルウェアコレクション):

  • 3084個のAPKファイル;
  • 総サイズ - 23GB;
  • ログモード - warning;

[!IMPORTANT] このセットにはandroguardが単純に解析できない悪意のあるサンプルが多数含まれています。

#apk-infoandroguard
12.49s user 4.74s system 73% cpu 9.840 total141.29s user 6.86s system 98% cpu 2:31.09 total
22.50s user 4.77s system 75% cpu 9.641 total138.04s user 6.32s system 97% cpu 2:27.33 total
32.49s user 4.78s system 75% cpu 9.650 total139.33s user 6.65s system 98% cpu 2:28.87 total

平均して、速度は約10倍向上しています。

主な利点は、apk-infoandroguardよりもはるかに多くの悪意のあるファイルを解析できることです。

FAQ

  • なぜ単にandroguardを使わないのか?

私のプロジェクトのほとんどは、使いにくいものから生まれています。Androguard自体は素晴らしいツールですが、(私の意見では)メンテナンスが不可能であり、プロダクション対応のコードには適していません。また、すべてのロジックがあまり最適化されていない方法で書かれているため、大量のファイルを分析するのにも適していません。

  • APKを変更したい場合、このライブラリを使ってどうすればよいですか?

このライブラリは読み取り専用モードのみを対象としています。なぜなら、APKから簡単かつ迅速に情報を抽出できる優れたツールが必要だったからです。他にも多くの優れたツールがあります。

クレジット

カテゴリ