
apk-info v1.0.12
Analizador de APK con todas las funciones
apk-info
Un analizador apk completo.
Características
- Un extractor zip amigable con malware. Excelente artículo sobre la técnica
BadPack; - Un extractor axml y arsc amigable con malware;
- Una implementación completa de AXML (Android Binary XML);
- Una implementación completa de ARSC (Recursos de Android);
- Soporte para extraer información contenida en el
APK Signature Block 42:- APK Signature scheme v1;
- APK Signature scheme v2;
- APK Signature scheme v3;
- APK Signature scheme v3.1;
- Stamp Block v1 y v2;
- Bloque de Canal de APK;
- Packer NG v2;
- Vasdolly v2
- Google Play Frosting (hay planes, pero hay muy poca información al respecto);
- Extracción correcta de la MainActivity basada en cómo lo hace el sistema operativo Android;
- Bindings para Python 3.10+ con tipados - no más
# type: ignore; - Y por supuesto, solo un analizador rápido - 🙃
Primeros pasos
CLI
Instalación
cargo install apk-info-cli
Ayuda
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
Instalación
uv pip install apk-info
Obtener información básica sobre el 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]}")
Obtener información sobre las firmas
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}")
Análisis de rendimiento
Entorno:
- OS: macOS Tahoe 26.0.1 arm64
- CPU: Apple M3 Pro (12) @ 4.06 GHz
El script:
- Extraer todas las firmas disponibles de un archivo;
- Extraer el nombre del paquete;
- Extraer la versión mínima del SDK;
- Obtener una lista de todas las actividades principales;
- Obtener el nombre de la aplicación;
Biblioteca apk-info:
- Compilación -
release-lto; - Bindings de Python (comparación honesta);
caso de prueba (colección limpia):
- 152 archivos apk;
- Tamaño total - 20GB;
- Modo de registro - 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 |
caso de prueba (colección de malware):
- 3084 archivos apk;
- Tamaño total - 23GB;
- Modo de registro - warning;
[!IMPORTANT] Hay muchas muestras maliciosas en este conjunto que androguard simplemente no puede analizar.
| # | 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 |
En promedio, la ganancia de velocidad es de aproximadamente x10.
La principal ventaja es que apk-info puede analizar muchos más archivos maliciosos que androguard.
Preguntas frecuentes
- ¿Por qué no simplemente usar androguard?
Casi todos mis proyectos nacen de algo que es incómodo de usar. Androguard es una gran herramienta en sí misma, pero simplemente no es posible mantenerla (en mi opinión) y no es adecuada para código listo para producción. Tampoco es adecuada para analizar una gran cantidad de archivos debido a que toda la lógica está escrita de una manera no muy optimizada.
- Quiero modificar el apk, ¿cómo lo hago usando esta biblioteca?
La biblioteca está diseñada solo para modo de solo lectura, porque necesito una buena herramienta con la que pueda extraer información del apk de manera fácil y rápida. Hay muchas otras buenas herramientas disponibles.