
apk-info v1.0.12
Analyseur APK complet
apk-info
Un analyseur apk complet.
Fonctionnalités
- Un extracteur zip compatible avec les malwares. Excellent article sur la technique
BadPack; - Un extracteur axml et arsc compatible avec les malwares ;
- Une implémentation complète d'AXML (Android Binary XML) ;
- Une implémentation complète d'ARSC (Android Resource) ;
- Prise en charge de l'extraction des informations contenues dans l'
APK Signature Block 42:- APK Signature scheme v1 ;
- APK Signature scheme v2 ;
- APK Signature scheme v3 ;
- APK Signature scheme v3.1 ;
- Stamp Block v1 & v2 ;
- Apk Channel Block ;
- Packer NG v2 ;
- Vasdolly v2 ;
- Google Play Frosting (il y a des projets, mais il existe très peu d'informations à ce sujet) ;
- Extraction correcte de la MainActivity basée sur la façon dont le système d'exploitation Android le fait ;
- Liaisons pour Python 3.10+ avec typage – plus besoin de
# type: ignore; - Et bien sûr, un analyseur rapide – 🙃
Pour commencer
CLI
Installation
cargo install apk-info-cli
Aide
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
Installation
uv pip install apk-info
Obtenir des informations de base sur un 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]}")
Obtenir des informations sur les signatures
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}")
Analyse des performances
Environnement :
- OS : macOS Tahoe 26.0.1 arm64
- CPU : Apple M3 Pro (12) @ 4.06 GHz
Le script :
- Extrait toutes les signatures disponibles d'un fichier ;
- Extrait le nom du package ;
- Extrait la version minimale du SDK ;
- Obtient la liste de toutes les Main Activities ;
- Obtient le nom de l'application ;
Bibliothèque apk-info :
- Build -
release-lto; - Liaisons Python (comparaison honnête) ;
Cas de test (collection propre) :
- 152 fichiers apk ;
- Taille totale - 20 Go ;
- Mode journalisation - avertissement ;
| # | apk-info | androguard |
|---|---|---|
| 1 | 0,98 s utilisateur 4,32 s système 80% cpu 6,584 total | 57,39 s utilisateur 4,88 s système 97% cpu 1:03,85 total |
| 2 | 0,96 s utilisateur 4,23 s système 79% cpu 6,486 total | 57,98 s utilisateur 5,04 s système 97% cpu 1:04,80 total |
| 3 | 0,95 s utilisateur 4,15 s système 79% cpu 6,422 total | 55,56 s utilisateur 4,48 s système 97% cpu 1:01,55 total |
Cas de test (collection de malwares) :
- 3084 fichiers apk ;
- Taille totale - 23 Go ;
- Mode journalisation - avertissement ;
[!IMPORTANT] Il y a beaucoup d'échantillons malveillants dans cet ensemble qu'androguard ne peut tout simplement pas analyser.
| # | apk-info | androguard |
|---|---|---|
| 1 | 2,49 s utilisateur 4,74 s système 73% cpu 9,840 total | 141,29 s utilisateur 6,86 s système 98% cpu 2:31,09 total |
| 2 | 2,50 s utilisateur 4,77 s système 75% cpu 9,641 total | 138,04 s utilisateur 6,32 s système 97% cpu 2:27,33 total |
| 3 | 2,49 s utilisateur 4,78 s système 75% cpu 9,650 total | 139,33 s utilisateur 6,65 s système 98% cpu 2:28,87 total |
En moyenne, le gain de vitesse est d'environ x10.
Le principal avantage est que apk-info peut analyser beaucoup plus de fichiers malveillants qu'androguard.
FAQ
- Pourquoi ne pas simplement utiliser androguard ?
Presque tous mes projets naissent de quelque chose qui n'est pas pratique à utiliser. Androguard est en soi un excellent outil, mais il est tout simplement impossible de le maintenir (à mon avis) et il n'est pas adapté à un code prêt pour la production. Il n'est pas non plus adapté à l'analyse d'un grand nombre de fichiers car toute la logique est écrite de manière peu optimisée.
- Je veux modifier l'apk, comment faire avec cette bibliothèque ?
La bibliothèque est conçue uniquement en mode lecture seule, car j'ai besoin d'un bon outil avec lequel je peux facilement et rapidement extraire des informations de l'apk. Il existe de nombreux autres bons outils.