Walter Scholger

19 papers Unranked 18
YearRankTypeTitle / Venue / Authors
2023 ed.
DH
Anne Baillot, Toma Tasovac, Walter Scholger, Georg Vogeler
2023 conf
DH
Susan Schreibman, Constantinos Papadopoulos, Marianne Ping Huang, Walter Scholger, Koraljka Kuzman Slogar
2022 conf
DHd
Walter Scholger, Vanessa Hannesschläger, Pawel Kamocki, Koraljka Kuzman Slogar
2022 conf
DHd
Walter Scholger, Vanessa Hannesschläger, Pawel Kamocki, Koraljka Kuzman Slogar
2022 conf
DHd
Manuel Burghardt, Alexander Czmiel, Lisa Dieckmann, Svenja Guhr, Janina Jacke, Nils Reiter, Walter Scholger, Ulrike Wuttke
2022 conf
DHd
Svenja Guhr, Timo Steyer, Walter Scholger, Manuel Burghardt, Lisa Dieckmann, Nils Reiter, Ulrike Wuttke
2020 conf
DH
Tanja Wissik, Hendrik Schmeer, Frank Fischer, Franciska de Jong, Walter Scholger, Leon Wessels
2020 conf
DHd
Walter Scholger, Vanessa Hannesschläger
2020 conf
DH
Vanessa Hannesschläger, Erik Ketzan, Kim Nayyer, Padmini Ray Murray, Walter Scholger, Benito Trollip
2020 conf
DH
Vanessa Hannesschläger, Koraljka Kuzman Slogar, Walter Scholger
2019 conf
DHd
Timo Steyer, Katrin Neumann, Melanie Seltmann, Walter Scholger
2018 conf
DH
Diane Jakacki, Raymond G. Siemens, Katherine M. Faull, Angelica Huizar, Esteban Romero-Frías, Brian Croxall, Tanja Wissik, Walter Scholger, Erik Simpson, Elisabeth Burr
2018 conf
DHd
Vanessa Hannesschläger, Pawel Kamocki, Walter Scholger
2017 conf
DHd
Vanessa Hannesschläger, Joachim Losehand, Pawel Kamocki, Walter Scholger, Andreas Witt, Seyavash Amini
2014 conf
DH
Walter Scholger, Claire Clivaz, Toma Tasovac
2014 conf
DHd
Manfred Thaller, Walter Scholger
2014 conf
DHd
Walter Scholger
2014 conf
DHd
Johannes Stigler, Walter Scholger, Martina Semlak, Elisabeth Steiner, Gunter Vasold, Georg Vogeler
2014 conf
DH
Walter Scholger
redb/extractors/pe_extractor.py
← Index redb/extractors/pe_extractor.py python
import logging
from abc import ABCMeta, abstractmethod
import inspect

import magic
import pefile
from dotnetfile import DotNetPE

from redb.extractors.extractor import Extractor

logger = logging.getLogger(__name__)


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

    def __init__(
        self,
        filepath,
        log,
        exporters=None,
        index_prefix=None,
        elastic_index=None,
        known_benign=False,
        known_malicious=False,
        pe=None,
    ):
        super().__init__(
            filepath,
            log,
            exporters,
            index_prefix,
            elastic_index,
            known_benign,
            known_malicious
        )
        self.pe = pe if pe else self._generate_pefile_object()
        self.dotnet = None

    def _generate_pefile_object(self):
        pe = None
        try:
            pe = pefile.PE(self.filepath)
            if not pe:
                raise pefile.PEFormatError("Empty file?")
        except pefile.PEFormatError as e:
            self.log.error(f"Format error {self.hash.sha256} Full error : {e}")
        return pe

    def _generate_dotnetfile_object(self):
        self.log.debug(inspect.currentframe().f_code.co_name)
        dotnet = None
        error = None
        try:
            dotnet = DotNetPE(self.filepath)
            if not dotnet:
                raise Exception("Empty file?")
        except Exception as e:
            self.log.error(
                f"Format error dotnet file {self.hash.sha256} Full error : {e}"
            )
            error = e
        return dotnet, error

    def _check_dotnet(self):
        try:
            file_type = magic.from_buffer(self.binary)
            if ".Net" in file_type:
                return True
            for entry in self.pe.OPTIONAL_HEADER.DATA_DIRECTORY:
                # IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR is typically 14
                if (
                    entry.name == "IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR"
                    and entry.Size > 0
                ):
                    return True
            return False
        except AttributeError as e:
            self.log.error(
                f"AttributeError error dotnet file {self.hash.sha256} Full error : {e}"
            )
            return False

    def _is_signed(self):
        address = self.pe.OPTIONAL_HEADER.DATA_DIRECTORY[
            pefile.DIRECTORY_ENTRY["IMAGE_DIRECTORY_ENTRY_SECURITY"]
        ].VirtualAddress
        if address == 0:
            return False
        return True

    def _has_overlay(self):
        return bool(self.pe.get_overlay())