From ce7c80f8e534f04aedd91c97d23a0cfcd5b648d5 Mon Sep 17 00:00:00 2001 From: trpyn Date: Fri, 19 Jun 2026 23:35:38 +0200 Subject: [PATCH 1/3] Upgrade Androguard version to latest --- Pipfile | 4 ++-- quark/core/apkinfo.py | 4 ++-- setup.py | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Pipfile b/Pipfile index ae9f8a576..fdc64a33c 100644 --- a/Pipfile +++ b/Pipfile @@ -15,7 +15,7 @@ tqdm = "<=4.66.5" colorama = "<=0.4.4" quark-engine = {editable = true,path = "."} click = "<=8.1.7" -androguard = "==3.4.0a1" +androguard = "==4.1.4" graphviz = "<=0.18.2" requests = "<=2.32.5" plotly = "<=5.4.0" @@ -28,7 +28,7 @@ r2pipe = "==1.8.0" pathvalidate = "==3.2.3" [requires] -python_version = "3.10" +python_version = ">=3.10" [pipenv] allow_prereleases = true diff --git a/quark/core/apkinfo.py b/quark/core/apkinfo.py index b2029e4da..b694f7ec2 100644 --- a/quark/core/apkinfo.py +++ b/quark/core/apkinfo.py @@ -16,9 +16,9 @@ from typing import Dict, List, Optional, Set, Union from androguard.core.analysis.analysis import MethodAnalysis -from androguard.core.bytecodes.dvm_types import Operand +from androguard.core.dex.dex_types import Operand from androguard.misc import AnalyzeAPK, get_default_session -from androguard.core.bytecodes.dvm import Instruction45cc, Instruction4rcc, get_kind, Kind +from androguard.core.dex import Instruction45cc, Instruction4rcc, get_kind, Kind from quark.core.interface.baseapkinfo import BaseApkinfo from quark.core.struct.bytecodeobject import BytecodeObject diff --git a/setup.py b/setup.py index 9a23081ce..d89fdf0fc 100644 --- a/setup.py +++ b/setup.py @@ -7,7 +7,7 @@ required_requirements = [ "prettytable>=1.0.0", - "androguard==3.4.0a1", + "androguard==4.1.4", "tqdm", "colorama", "graphviz", From 076ef0fb01734396595cd91278a14e1e7b20a9a4 Mon Sep 17 00:00:00 2001 From: trpyn Date: Thu, 16 Jul 2026 22:01:59 +0200 Subject: [PATCH 2/3] supress androguard logs messing with quark-engine output --- quark/core/apkinfo.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/quark/core/apkinfo.py b/quark/core/apkinfo.py index b694f7ec2..fc4d4668e 100644 --- a/quark/core/apkinfo.py +++ b/quark/core/apkinfo.py @@ -19,6 +19,7 @@ from androguard.core.dex.dex_types import Operand from androguard.misc import AnalyzeAPK, get_default_session from androguard.core.dex import Instruction45cc, Instruction4rcc, get_kind, Kind +from loguru import logger as _androguard_logger from quark.core.interface.baseapkinfo import BaseApkinfo from quark.core.struct.bytecodeobject import BytecodeObject @@ -26,6 +27,9 @@ from quark.evaluator.pyeval import PyEval +_androguard_logger.disable("androguard") + + class AndroguardImp(BaseApkinfo): """Information about apk based on androguard analysis""" From 7f5ff864a55b46e1cc03efbff228e1719d5be366 Mon Sep 17 00:00:00 2001 From: haeter525 Date: Sun, 19 Jul 2026 13:15:05 +0000 Subject: [PATCH 3/3] fix: add numpy as an explicit dependency numpy was implicitly available as a transitive dependency through androguard 3.x pulling in matplotlib. androguard 4.x removed matplotlib, so numpy must be declared explicitly. Also updates string count assertions in forensic and script tests to match androguard 4.x output. Co-Authored-By: Claude Sonnet 4.6 --- setup.py | 1 + tests/forensic/test_forensic.py | 4 ++-- tests/script/test_script.py | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/setup.py b/setup.py index d89fdf0fc..4e36292bd 100644 --- a/setup.py +++ b/setup.py @@ -8,6 +8,7 @@ required_requirements = [ "prettytable>=1.0.0", "androguard==4.1.4", + "numpy", "tqdm", "colorama", "graphviz", diff --git a/tests/forensic/test_forensic.py b/tests/forensic/test_forensic.py index c39aedeb1..ba0642c68 100644 --- a/tests/forensic/test_forensic.py +++ b/tests/forensic/test_forensic.py @@ -22,7 +22,7 @@ def forensic(scope="function"): class TestForensic: def test_all_strings(self, forensic): - assert len(forensic.get_all_strings()) == 1005 + assert len(forensic.get_all_strings()) == 4409 def test_get_url(self, forensic): assert len(forensic.get_url()) == 4 @@ -48,7 +48,7 @@ def test_get_file(self, forensic): assert len(forensic.get_file()) == 0 def test_get_base64(self, forensic): - assert len(forensic.get_base64()) == 102 + assert len(forensic.get_base64()) == 604 def test_get_android_api(self, forensic): assert len(forensic.get_android_api()) == 640 diff --git a/tests/script/test_script.py b/tests/script/test_script.py index 3750764b6..6bfea8904 100644 --- a/tests/script/test_script.py +++ b/tests/script/test_script.py @@ -418,7 +418,7 @@ def testMethodGetXrefFrom(QUARK_ANALYSIS_RESULT_FOR_RULE_68): @staticmethod def testGetAllStrings(QUARK_ANALYSIS_RESULT_FOR_RULE_68): - assert len(QUARK_ANALYSIS_RESULT_FOR_RULE_68.getAllStrings()) == 1005 + assert len(QUARK_ANALYSIS_RESULT_FOR_RULE_68.getAllStrings()) == 4409 @staticmethod def testIsHardCoded(QUARK_ANALYSIS_RESULT_FOR_RULE_68):