
新发布Aug 17, 2026
apk-info v1.0.12
APK全功能解析器
apk-info
一个功能齐全的apk解析器。
特性
- 一个对恶意软件友好的zip提取器。关于BadPack技术的优秀文章;
- 一个对恶意软件友好的axml和arsc提取器;
- 完整的AXML(Android Binary XML)实现;
- 完整的ARSC(Android Resource)实现;
- 支持提取
APK签名块42中包含的信息:- APK签名方案v1;
- APK签名方案v2;
- APK签名方案v3;
- APK签名方案v3.1;
- 印章块v1和v2;
- Apk通道块;
- Packer NG v2;
- Vasdolly v2
- Google Play Frosting(有相关计划,但相关信息极为有限);
- 基于Android OS的实际做法正确提取MainActivity;
- 提供python 3.10+的绑定及类型注解 - 不再需要
# type: ignore; - 当然,还是一个快速解析器 - 🙃
快速开始
命令行工具
安装
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}")
性能分析
环境:
- 操作系统:macOS Tahoe 26.0.1 arm64
- CPU:Apple M3 Pro (12) @ 4.06 GHz
脚本:
- 从文件中提取所有可用签名;
- 提取包名;
- 提取最小SDK版本;
- 获取所有Main Activity列表;
- 获取应用名称;
apk-info 库:
- 构建 -
release-lto; - Python绑定(诚实对比);
测试用例(干净集合):
- 152个apk文件;
- 总大小 - 20GB;
- 日志级别 - warning;
| # | apk-info | androguard |
|---|---|---|
| 1 | 0.98s user 4.32s system 80% cpu 6.584 total | 57.39s user 4.88s system 97% cpu 1:03.85 total |
| 2 | 0.96s user 4.23s system 79% cpu 6.486 total | 57.98s user 5.04s system 97% cpu 1:04.80 total |
| 3 | 0.95s user 4.15s system 79% cpu 6.422 total | 55.56s user 4.48s system 97% cpu 1:01.55 total |
测试用例(恶意样本集合):
- 3084个apk文件;
- 总大小 - 23GB;
- 日志级别 - warning;
[!IMPORTANT] 该集合包含大量恶意样本,androguard根本无法解析。
| # | apk-info | androguard |
|---|---|---|
| 1 | 2.49s user 4.74s system 73% cpu 9.840 total | 141.29s user 6.86s system 98% cpu 2:31.09 total |
| 2 | 2.50s user 4.77s system 75% cpu 9.641 total | 138.04s user 6.32s system 97% cpu 2:27.33 total |
| 3 | 2.49s user 4.78s system 75% cpu 9.650 total | 139.33s user 6.65s system 98% cpu 2:28.87 total |
平均速度提升约10倍。
主要优势在于apk-info能够解析比androguard更多的恶意文件。
常见问题
- 为什么不直接使用androguard?
我几乎所有的项目都源于某些工具使用起来不够方便。Androguard本身是一个很好的工具,但(在我看来)它几乎无法维护,并且不适合生产级代码。由于所有逻辑编写得不够优化,它也不适用于分析大量文件。
- 我想修改apk,如何使用这个库?
该库仅设计为只读模式,因为我需要一个能够轻松快速提取apk信息的优秀工具。市面上还有许多其他优秀的工具可供修改使用。