Hai Liu

34 papers A 1C 4Journal 16Unranked 13
YearRankTypeTitle / Venue / Authors
2025 J jnl
Knowl. Based Syst.
Bangfeng Zhang, Hai Liu, Youliang Tian, Shigong Long, Liang Wan, Changgen Peng
2025 J jnl
Comput.
Zhigang Chen, Xinxia Song, Liqun Chen, Hai Liu
2024 C conf
ISPA
Hongfa Ding, Peiwang Fu, Yingxuan Luo, Heling Jiang, Hai Liu
2024 J jnl
Axioms
Xun Yang, Shuwen Xiang, Changgen Peng, Weijie Tan, Yue Wang, Hai Liu, Hongfa Ding
2024 A conf
ICWS
Shiyun He, Hongfa Ding, Tian Tian, Hai Liu, Heling Jiang
2024 J jnl
IEEE J. Biomed. Health Informatics
Hai Liu, Dequan Xu, Youliang Tian, Changgen Peng, Zhenqiang Wu, Ziyue Wang
2023 J jnl
CAAI Trans. Intell. Technol.
Shengnan Guo, Xibin Wang, Shigong Long, Hai Liu, Liu Hai, Toong Hai Sam
2023 conf
ACNS Workshops
Dequan Xu, Changgen Peng, Youliang Tian, Hai Liu, Ziyue Wang, Weizheng Wang
2023 J jnl
IEEE Trans. Consumer Electron.
Dequan Xu, Changgen Peng, Weizheng Wang, Hai Liu, Shoaib Ahmed Shaikh, Youliang Tian
2023 J jnl
Inf. Sci.
Hai Liu, Youliang Tian, Changgen Peng, Zhenqiang Wu
2022 J jnl
Entropy
Hai Liu, Changgen Peng, Youliang Tian, Shigong Long, Feng Tian, Zhenqiang Wu
2022 J jnl
Symmetry
Nannan Zhou, Shigong Long, Hai Liu, Hai Liu
2022 J jnl
Int. J. Secur. Networks
Jun Yan, Yupan Tian, Hai Liu, Zhenqiang Wu
2021 C conf
PDCAT
Heng Ouyang, Hongqin Lyu, Shigong Long, Hai Liu, Hongfa Ding
2021 J jnl
Secur. Commun. Networks
Hai Liu, Changgen Peng, Youliang Tian, Shigong Long, Zhenqiang Wu
2021 conf
NaNA
Cuicui Niu, Zhengzhi Pan, Wuchao Shi, Hai Liu
2020 J jnl
Theor. Comput. Sci.
Hai Liu, Zhenqiang Wu, Changgen Peng, Feng Tian, Laifeng Lu
2020 J jnl
Int. Arab J. Inf. Technol.
Hai Liu, Zhenqiang Wu, Changgen Peng, Feng Tian, Laifeng Lu
2019 conf
NaNA
Ziwei Han, Laifeng Lu, Hai Liu
2019 J jnl
J. Inf. Sci. Eng.
Jing Hu, Jun Yan, Zhenqiang Wu, Hai Liu, Yihui Zhou
2019 conf
NaNA
Hai Liu, Zhenqiang Wu, Changgen Peng, Xiujuan Lei, Feng Tian, Laifeng Lu
2019 conf
NaNA
Feng Tian, Zhenqiang Wu, Hai Liu, Laifeng Lu, Xiaolin Gui
2018 conf
NaNA
Ziwei Han, Hai Liu, Zhenqiang Wu
2018 C conf
CIS
Ge Wen, Hai Liu, Jun Yan, Zhenqiang Wu
2018 conf
NaNA
Guangchen Song, Yihui Zhou, Hai Liu, Ge Wen, Ping'an Ren
2018 conf
NaNA
Laifeng Lu, Yanping Li, Yihui Zhou, Feng Tian, Hai Liu
2018 J jnl
KSII Trans. Internet Inf. Syst.
Hai Liu, Zhenqiang Wu, Changgen Peng, Feng Tian, Laifeng Lu
2018 conf
NaNA
Yihui Zhou, Guangchen Song, Hai Liu, Laifeng Lu
2017 conf
NaNA
Feng Tian, Shuangyue Zhang, Laifeng Lu, Hai Liu, Xiaolin Gui
2017 conf
NaNA
Hai Liu, Zhenqiang Wu, Changgen Peng, Xiujuan Lei
2017 C conf
ICICS
Hai Liu, Zhenqiang Wu, Changgen Peng, Shuangyue Zhang, Feng Tian, Laifeng Lu
2017 conf
NaNA
Jing Hu, Wuchao Shi, Hai Liu, Jun Yan, Yuan Tian, Zhenqiang Wu
2016 conf
NaNA
Hai Liu, Zhenqiang Wu, Lin Zhang
2015 J jnl
计算机科学
Hai Liu, Changgen Peng, Hong Zhang, Zhijing Ren
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())