Candong Li

15 papers Journal 12Unranked 3
YearRankTypeTitle / Venue / Authors
2023 J jnl
Neural Comput. Appl.
Liang Dai, Jia Zhang, Guodong Du, Candong Li, Rong Wei, Shaozi Li
2021 J jnl
Concurr. Comput. Pract. Exp.
Hui Weng, Lei Li, Huangwei Lei, Zhiming Luo, Candong Li, Shaozi Li
2021 J jnl
Neurocomputing
Guodong Du, Jia Zhang, Shaozi Li, Candong Li
2020 J jnl
Concurr. Comput. Pract. Exp.
Lei Li, Zhiming Luo, Mengting Zhang, Yuanzheng Cai, Candong Li, Shaozi Li
2020 J jnl
Concurr. Comput. Pract. Exp.
Liang Dai, Guodong Du, Jia Zhang, Candong Li, Rong Wei, Shaozi Li
2020 J jnl
Concurr. Comput. Pract. Exp.
Changen Zhou, Haoyi Fan, Wen Zhao, Hongben Xu, Huangwei Lei, Zhaoyang Yang, Zuoyong Li, Candong Li
2019 J jnl
Pattern Recognit.
Jia Zhang, Zhiming Luo, Candong Li, Changen Zhou, Shaozi Li
2019 J jnl
Concurr. Comput. Pract. Exp.
Liang Dai, Jia Zhang, Candong Li, Changen Zhou, Shaozi Li
2019 J jnl
Neurocomputing
Zhenqiang Sun, Jia Zhang, Liang Dai, Candong Li, Changen Zhou, Jiliang Xin, Shaozi Li
2019 J jnl
Appl. Soft Comput.
Jia Zhang, Candong Li, Zhenqiang Sun, Zhiming Luo, Changen Zhou, Shaozi Li
2018 J jnl
Knowl. Based Syst.
Jia Zhang, Candong Li, Donglin Cao, Yaojin Lin, Songzhi Su, Liang Dai, Shaozi Li
2017 J jnl
Expert Syst. Appl.
Jia Zhang, Candong Li, Yaojin Lin, Youwei Shao, Shaozi Li
2015 conf
BIBM
Zhiwei Liang, Yongyun Wang, Qianrong Liang, Xiaoyan Luo, Lini Wang, Ye Yuan, Candong Li, Yi Zhou
2015 conf
BIBM
Zhiwei Liang, Dongxu Jiang, Xiaoping Lai, XueLian Mo, Qianrong Liang, Xiaoyan Luo, Liwen Zhou, ZhongXun Yuan, JianBiao Xu, Xiaoyang Zhang, Ning Xu, Ye Yuan, Jing An, JuanHong Zeng, ShouZeng Zheng, Candong Li, Yi Zhou
2010 conf
BIBM Workshops
Xuemei Yang, Xinmei Lai, Candong Li
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())