From 0d55851347a6d4ba82f16ec602202d8d16f4a759 Mon Sep 17 00:00:00 2001 From: Jean-Marie Mineau Date: Thu, 14 Nov 2024 11:43:42 +0100 Subject: [PATCH] add min max target sdk collection --- android_class_shadowing_scanner/__init__.py | 6 ++++++ android_class_shadowing_scanner/analysis.py | 5 +++++ android_class_shadowing_scanner/data.py | 3 +++ 3 files changed, 14 insertions(+) diff --git a/android_class_shadowing_scanner/__init__.py b/android_class_shadowing_scanner/__init__.py index c893fa6..bf2c8d9 100644 --- a/android_class_shadowing_scanner/__init__.py +++ b/android_class_shadowing_scanner/__init__.py @@ -11,6 +11,8 @@ from pathlib import Path from getpass import getpass from datetime import datetime +from androguard.core.apk import APK # type: ignore + from .androzoo import download_apk from .data import ApkData, load_from_directory @@ -146,6 +148,7 @@ def main(): if args.output_dir and (args.output_dir / sha256).exists(): continue + androguard_apk = APK(str(apk_path)) with apk_path.open("rb") as file: with zipfile.ZipFile(file) as apk: try: @@ -156,6 +159,7 @@ def main(): json_out = None entry = analyze( apk, + androguard_apk, sha256, json_out=json_out, sdk34_dir=args.output_dir_def_sdk34_classes, @@ -220,6 +224,7 @@ def main(): apk_bin = download_apk(sha256, api_key, logfile=logfile) if apk_bin is None: continue + androguard_apk = APK(apk_bin) with zipfile.ZipFile(io.BytesIO(apk_bin)) as apk: try: if args.json: @@ -228,6 +233,7 @@ def main(): json_out = None entry = analyze( apk, + androguard_apk, sha256, json_out=json_out, sdk34_dir=args.output_dir_def_sdk34_classes, diff --git a/android_class_shadowing_scanner/analysis.py b/android_class_shadowing_scanner/analysis.py index 10073bf..8d2ac66 100644 --- a/android_class_shadowing_scanner/analysis.py +++ b/android_class_shadowing_scanner/analysis.py @@ -7,6 +7,7 @@ from pathlib import Path import androguard.core.dex # type: ignore from androguard.core.dex import DEX # type: ignore +from androguard.core.apk import APK # type: ignore # loguru -> logging framework used by androgard from loguru import logger # type: ignore @@ -198,6 +199,7 @@ def scan_classes( def analyze( apk: zipfile.ZipFile, + androguard_apk: APK, sha256: str, json_out: dict | None = None, sdk34_dir: Path | None = None, @@ -283,6 +285,9 @@ def analyze( has_classes_dex_over_10=any(map(lambda x: x >= 10, dex_numbers)), has_non_numeric_classes_dex=has_non_numeric_classes_dex, has_non_consecutive_classes_dex=has_non_consecutive_classes_dex, + min_sdk_version=int(androguard_apk.get_min_sdk_version() or "-1"), + max_sdk_version=int(androguard_apk.get_max_sdk_version() or "-1"), + target_sdk_version=int(androguard_apk.get_target_sdk_version() or "-1"), ) if json_out is not None: json_out["entry"] = asdict(entry) diff --git a/android_class_shadowing_scanner/data.py b/android_class_shadowing_scanner/data.py index c0758c4..0be6e27 100644 --- a/android_class_shadowing_scanner/data.py +++ b/android_class_shadowing_scanner/data.py @@ -29,6 +29,9 @@ class ApkData: has_classes_dex_over_10: bool has_non_numeric_classes_dex: bool has_non_consecutive_classes_dex: bool + min_sdk_version: int = -1 + max_sdk_version: int = -1 + target_sdk_version: int = -1 year: int = -1 vt_detection: int = -1