Carsten Saathoff

29 papers A* 2B 3C 1Journal 8Unranked 13
YearRankTypeTitle / Venue / Authors
2024 J jnl
CoRR
Ansgar Scherp, Thomas Franz, Carsten Saathoff, Steffen Staab
2012 J jnl
Int. J. Semantic Comput.
Ansgar Scherp, Daniel Eißing, Carsten Saathoff
2012 J jnl
Int. J. Semantic Comput.
Ansgar Scherp, Carsten Saathoff, Stefan Scheglmann
2012 J jnl
Multim. Tools Appl.
Ansgar Scherp, Thomas Franz, Carsten Saathoff, Steffen Staab
2011 J jnl
Comput. Vis. Image Underst.
Georgios Th. Papadopoulos, Carsten Saathoff, Hugo Jair Escalante, Vasileios Mezaris, Ioannis Kompatsiaris, Michael G. Strintzis
2011 J jnl
Appl. Ontology
Ansgar Scherp, Carsten Saathoff, Thomas Franz, Steffen Staab
2011 ch.
Multimedia Semantics
Carsten Saathoff, Krishna Chandramouli, Werner Bailer, Peter Schallauer, Raphaël Troncy
2011 conf
Description Logics
Stefan Scheglmann, Carsten Saathoff, Steffen Staab
2011 ch.
Multimedia Semantics
Nikolaos Simou, Giorgos Stoilos, Carsten Saathoff, Jan Nemrava, Vojtech Svátek, Petr Berka, Vassilis Tzouvaras
2010 conf
IMCSIT
Sönke Greve, Marcin Grzegorzek, Carsten Saathoff, Dietrich Paulus
2010 conf
COLD
Raphaël Troncy, André T. S. Fialho, Lynda Hardman, Carsten Saathoff
2010 conf
SAMT
Daniel Eißing, Ansgar Scherp, Carsten Saathoff
2010 A* conf
WWW
Carsten Saathoff, Ansgar Scherp
2009 conf
ICSC
Fernando Silva Parreiras, Carsten Saathoff, Tobias Walter, Thomas Franz, Steffen Staab
2009 conf
WIAMIS
Georgios Th. Papadopoulos, Carsten Saathoff, Marcin Grzegorzek, Vasileios Mezaris, Ioannis Kompatsiaris, Steffen Staab, Michael G. Strintzis
2009 B conf
K-CAP
Ansgar Scherp, Thomas Franz, Carsten Saathoff, Steffen Staab
2009 J jnl
i-com
Ansgar Scherp, Simon Schenk, Carsten Saathoff, Steffen Staab
2009 J jnl
J. Web Semant.
Simon Schenk, Carsten Saathoff, Steffen Staab, Ansgar Scherp
2008 B conf
ICIP
Miroslav Vacura, Vojtech Svátek, Carsten Saathoff, Thomas Franz, Raphaël Troncy
2008 conf
WIAMIS
Carsten Saathoff, Steffen Staab
2008 conf
SAMT
Carsten Saathoff, Marcin Grzegorzek, Steffen Staab
2008 A* conf
WWW
Max Braun, Klaas Dellschaft, Thomas Franz, Dominik Hering, Peter Jungen, Hagen Metzler, Eugen Müller, Alexander Rostilov, Carsten Saathoff
2008 conf
Reasoning Web
Steffen Staab, Ansgar Scherp, Richard Arndt, Raphaël Troncy, Marcin Grzegorzek, Carsten Saathoff, Simon Schenk, Lynda Hardman
2007 conf
SAMT (Posters and Demos)
Giorgos Akrivas, Georgios Th. Papadopoulos, Matthijs Douze, Johannes Heinecke, Noel E. O'Connor, Carsten Saathoff, Simon Waddington
2007 conf
ICSC
Stamatia Dasiopoulou, Johannes Heinecke, Carsten Saathoff, Michael G. Strintzis
2006 C conf
ISMIS
Steffen Staab, Thomas Franz, Olaf Görlitz, Carsten Saathoff, Simon Schenk, Sergej Sizov
2006 conf
KES (3)
Kosmas Petridis, Dionysios Anastasopoulos, Carsten Saathoff, Norman Timmermann, Yiannis Kompatsiaris, Steffen Staab
2005 conf
VLBV
Nikos Simou, Carsten Saathoff, Stamatia Dasiopoulou, Evaggelos Spyrou, Nikola Voisine, Vassilis Tzouvaras, Ioannis Kompatsiaris, Yannis Avrithis, Steffen Staab
2005 B conf
ESWC
Stephan Bloehdorn, Kosmas Petridis, Carsten Saathoff, Nikos Simou, Vassilis Tzouvaras, Yannis Avrithis, Siegfried Handschuh, Ioannis Kompatsiaris, Steffen Staab, Michael G. Strintzis
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 []