Jalel Ktari

19 papers A 1C 2Journal 8Unranked 8
YearRankTypeTitle / Venue / Authors
2025 conf
SSD
Nesrine Affes, Jalel Ktari, Mohamed Abid
2024 J jnl
PeerJ Comput. Sci.
Lotfi Ezzeddini, Jalel Ktari, Tarek Frikha, Naif Abdo Alsharabi, Abdulaziz M. Alayba, Abdullah J. Alzahrani, Amr Jadi, Abdulsalam Alkholidi, Habib Hamam
2024 J jnl
IEEE Access
Jalel Ktari, Tarek Frikha, Monia Hamdi, Habib Hamam
2024 J jnl
J. Signal Process. Syst.
Tarek Frikha, Jalel Ktari, Nader Ben Amor, Faten Chaabane, Monia Hamdi, Fehmi Denguir, Habib Hamam
2024 J jnl
Future Internet
Lassaad Zaway, Nader Ben Amor, Jalel Ktari, Mohamed Jallouli, Larbi Chrifi-Alaoui, Laurent Delahoche
2024 J jnl
J. Cloud Comput.
Naif Abdo Alsharabi, Jalel Ktari, Tarek Frikha, Abdulaziz M. Alayba, Abdullah J. Alzahrani, Amr Jadi, Habib Hamam
2023 conf
ICSC
Lassaad Zaway, Jalel Ktari, Nader Ben Amor, Mohamed Jallouli, Maher Talmoudi
2023 conf
DTTIS
Lassaad Zaway, Nader Ben Amor, Jalel Ktari, Mohamed Jallouli, Larbi Chrifi-Alaoui, Laurent Delahoche
2023 conf
DTTIS
Hedi Choura, Jalel Ktari, Mouna Baklouti, Faten Chaabane, Najoua Ben Slima, Khouloud Yaich, Ameni Guesmi, Tarek Frikha
2023 conf
ICSC
Jalel Ktari, Mariem Ben Kalia
2023 conf
DTTIS
Jalel Ktari, Hedi Choura, Tarek Frikha, Mouna Baklouti, Dhia Mejdi, Molka Kotti, Ahmed Zribi, Hassine Touil, Ghaith Oueslati
2022 C conf
CRiSIS
Tarek Frikha, Jalel Ktari, Habib Hamam
2022 C conf
SIN
Lotfi Ezzeddini, Jalel Ktari, Iheb Zouaoui, Amira Talha, Nizar Jarray, Tarek Frikha
2022 J jnl
Big Data Cogn. Comput.
Jalel Ktari, Tarek Frikha, Monia Hamdi, Hela Elmannai, Habib Hmam
2022 J jnl
Future Internet
Faten Chaabane, Jalel Ktari, Tarek Frikha, Habib Hamam
2022 conf
ISDA (3)
Nesrine Affes, Jalel Ktari, Nader Ben Amor, Tarek Frikha, Habib Hamam
2011 conf
SITIS
Tarek Ouni, Arij Lassoued, Jalel Ktari, Mohamed Abid
2009 J jnl
J. Low Power Electron.
Jalel Ktari, Mohamed Abid
2008 A conf
ESA
Jalel Ktari, Mohamed Abid
redb/extractors/apk_extractor.py
← Index redb/extractors/apk_extractor.py python
import logging
import zipfile
from abc import ABCMeta, abstractmethod

from redb.extractors.extractor import Extractor

logger = logging.getLogger(__name__)


@abstractmethod
class APKExtractor(Extractor, metaclass=ABCMeta):

    def __init__(
        self,
        filepath,
        log,
        exporters=None,
        index_prefix=None,
        known_benign=False,
        known_malicious=False,
        apk=None,
    ):
        # Read binary data before calling super().__init__ so that the
        # binary property override is available during hash computation.
        with open(filepath, "rb") as f:
            self._binary_data = f.read()

        self.apk = apk if apk else self._generate_apk_object(filepath)

        super().__init__(
            filepath,
            log,
            exporters,
            index_prefix,
            known_benign=known_benign,
            known_malicious=known_malicious,
        )

    @property
    def binary(self):
        """Override to use already-read binary data."""
        return self._binary_data

    def _generate_apk_object(self, filepath):
        """Parse APK using androguard."""
        apk = None
        try:
            # Suppress verbose androguard loguru DEBUG/INFO output
            from loguru import logger as loguru_logger
            loguru_logger.disable("androguard")
            from androguard.core.apk import APK
            apk = APK(filepath)
            if not apk.is_valid_APK():
                logger.warning(
                    f"APK validation warning for {filepath}"
                )
                # Still return the object — partial parsing may still work
        except Exception as e:
            logger.error(
                f"Format error parsing APK {filepath}: {e}"
            )
        return apk

    def _is_valid_apk(self):
        """Check if the APK object was parsed successfully."""
        return self.apk is not None

    def _get_zip_file(self):
        """Get a zipfile.ZipFile handle for direct archive inspection."""
        try:
            return zipfile.ZipFile(self.filepath, 'r')
        except (zipfile.BadZipFile, Exception) as e:
            self.log.error(f"Failed to open APK as ZIP: {e}")
            return None

    def _list_files(self):
        """List all files in the APK archive."""
        if not self._is_valid_apk():
            return []
        try:
            return self.apk.get_files()
        except Exception as e:
            self.log.error(f"Error listing APK files: {e}")
            return []