Ou Wu

13 papers A 1B 1C 3Journal 4Unranked 4
YearRankTypeTitle / Venue / Authors
2026 J jnl
Concurr. Comput. Pract. Exp.
Ou Wu, Yang Wang, Bocong Zhao, Chaoran Luo
2026 J jnl
CoRR
Shuxin Liu, Ou Wu
2024 C conf
ISPDC
Junyu Jia, Ou Wu, Shanshan Li, Rufei Ma, He Zhang
2023 J jnl
CCF Trans. High Perform. Comput.
Ou Wu, Binbin Huang, Shanshan Li, Yanze Wang, Haoming Li
2023 J jnl
Parallel Comput.
Ou Wu, Shanshan Li, He Zhang, Liwen Liu, Haoming Li, Yanze Wang, Ziyi Zhang
2022 conf
MONAMI
Ou Wu, Binbin Huang, Shanshan Li, Yanze Wang, Haoming Li
2022 conf
ISPA/BDCloud/SocialCom/SustainCom
Ou Wu, Shanshan Li, He Zhang, Liwen Liu, Yanze Wang, Haoming Li
2022 B conf
ICPADS
Ou Wu, Shanshan Li, Yanze Wang, Haoming Li, He Zhang
2022 A conf
EASE
Ou Wu, Shanshan Li, Liwen Liu, He Zhang, Xin Zhou, Qinghua Lu
2017 C conf
APSEC
Liming Dong, Bohan Liu, Zheng Li, Ou Wu, Muhammad Ali Babar, Bingbing Xue
2017 conf
APSEC Workshops
Ou Wu
2016 C conf
QRS
Ou Wu
2015 conf
ASE Workshops
Guoping Rong, He Zhang, Dong Shao, Ou Wu
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())