Rachid Ridouane

27 papers A 8Journal 1Unranked 18
YearRankTypeTitle / Venue / Authors
2025 A conf
INTERSPEECH
Philipp Buech, Anne Hermes, Rachid Ridouane
2024 A conf
INTERSPEECH
Minmin Yang, Rachid Ridouane
2024 conf
TALN (JEP)
Yezhou Jiang, Rachid Ridouane, Pierre A. Hallé
2024 conf
TALN (JEP)
Lei Xi, Rachid Ridouane, Frédéric Isel
2024 conf
TALN (JEP)
Xuejing Chen, Pierre A. Hallé, Rachid Ridouane
2022 A conf
INTERSPEECH
Rachid Ridouane, Philipp Buech
2022 A conf
INTERSPEECH
Philipp Buech, Rachid Ridouane, Anne Hermes
2020 conf
JEP-TALN-RECITAL (1)
Bowei Shao, Rachid Ridouane
2020 conf
JEP-TALN-RECITAL (1)
Minmin Yang, Rachid Ridouane
2019 A conf
INTERSPEECH
Julien Meyer, Laure Dentel, Silvain Gerber, Rachid Ridouane
2018 A conf
INTERSPEECH
Rachid Ridouane, Giuseppina Turco, Julien Meyer
2018 A conf
INTERSPEECH
Anne Hermes, Doris Mücke, Bastian Auris, Rachid Ridouane
2017 A conf
INTERSPEECH
Giuseppina Turco, Karim Shoul, Rachid Ridouane
2016 conf
JEP-TALN-RECITAL (1)
Emre Bayraktar, Rachid Ridouane
2016 J jnl
Lang. Linguistics Compass
Rachid Ridouane
2015 conf
ICPhS
Rachid Ridouane, Cédric Gendrot, Rajesh Khatiwada
2015 conf
ICNLSP
Fayssal Bouarourou, Béatrice Vaxelaire, Yves Laprie, Rachid Ridouane, Rudolph Sock
2015 conf
ICPhS
Julien Meyer, Bernard Gautheron, Rachid Ridouane
2012 conf
JEP-TALN-RECITAL 2012
Rachid Ridouane, Nicolas Audibert, Van Minh Nguyen
2011 conf
ICPhS
Pierre A. Hallé, Rachid Ridouane
2011 conf
ICPhS
Fayssal Bouarourou, Béatrice Vaxelaire, Rachid Ridouane, Fabrice Hirsch, Camille Fauth, Rudolph Sock
2011 conf
ICPhS
Anne Hermes, Rachid Ridouane, Doris Mücke, Martine Grice
2011 conf
ICPhS
Rachid Ridouane, Pierre A. Hallé
2011 conf
ICPhS
Martine Grice, Timo B. Roettger, Rachid Ridouane, Cécile Fougeron
2011 conf
ICPhS
Chakir Zeroual, John H. Esling, Philip Hoole, Rachid Ridouane
2006 conf
ExLing
George N. Clements, Rachid Ridouane
2006 conf
ExLing
George N. Clements, Rachid Ridouane
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 []