Wei Gao

87 papers Journal 72Unranked 15
YearRankTypeTitle / Venue / Authors
2026 J jnl
Appl. Netw. Sci.
Wei Gao, Carlo Cattani, Haci Mehmet Baskonus, Hainan Zhang
2025 conf
BIBM
Tong Zi, Mingjing Tang, Kui Jin, Yuxi Liu, Chunyan Li, Wei Gao
2025 J jnl
Eng. Appl. Artif. Intell.
Di Wu, Mingjing Tang, Shu Zhang, Wei Gao
2025 J jnl
Knowl. Based Syst.
Yufei Li, Mingjing Tang, Jun Shen, Shuaishuai Zu, Wei Gao
2024 J jnl
Discret. Math.
Wei Gao, Yiqiao Wang, Weifan Wang
2024 J jnl
Appl. Intell.
Mingtao Zhou, Juxiang Zhou, Jianhou Gan, Wei Gao, Jian Xu
2024 J jnl
Expert Syst. Appl.
Mingjing Tang, Di Wu, Shu Zhang, Wei Gao
2024 J jnl
Swarm Evol. Comput.
Hainan Zhang, Jianhou Gan, Juxiang Zhou, Wei Gao
2024 J jnl
Eng. Appl. Artif. Intell.
Hainan Zhang, Jianhou Gan, Juxiang Zhou, Wei Gao
2024 J jnl
Int. J. Model. Simul. Sci. Comput.
Pushpendra Kumar, Wei Gao, Pundikala Veeresha, Vedat Suat Ertürk, Doddabhadrappla Gowda Prakasha, Haci Mehmet Baskonus
2023 J jnl
Complex Intell. Syst.
Mingjing Tang, Tong Li, Wei Gao, Yu Xia
2023 J jnl
World Wide Web (WWW)
Yikuan Chen, Li Liang, Wei Gao
2023 J jnl
IEEE Trans. Intell. Transp. Syst.
Wei Wei, Jun Shen, Akbar Telikani, Mahdi Fahmideh, Wei Gao
2023 J jnl
Probl. Inf. Transm.
Wei Gao, Haci Mehmet Baskonus, Carlo Cattani
2023 J jnl
Connect. Sci.
Wei Gao, Weifan Wang, Yaojun Chen
2023 J jnl
Complex Intell. Syst.
Di Wu, Mingjing Tang, Shu Zhang, Ao You, Wei Gao
2023 J jnl
Eng. Appl. Artif. Intell.
Yikuan Chen, Li Liang, Wei Gao
2023 J jnl
Artif. Intell. Rev.
Mingjing Tang, Shu Zhang, Ming Zheng, Zifei Ma, Wei Gao
2022 conf
AIAM
Ke Luo, Wei Gao, Renzhi Yuan
2022 conf
ML4CS (3)
Linli Zhu, Yu Pan, Wei Gao
2022 J jnl
Int. J. Intell. Syst.
Di Wu, Zijie Li, Juxiang Zhou, Jianhou Gan, Wei Gao, Hao Li
2022 conf
ML4CS (3)
Yikuan Chen, Liang Li, Wei Gao
2022 conf
CCCI
Yikuan Chen, Li Liang, Wei Gao
2022 J jnl
Int. J. Semantic Web Inf. Syst.
Zhiwen Zheng, Juxiang Zhou, Jianhou Gan, Sen Luo, Wei Gao
2022 J jnl
Int. J. Intell. Syst.
Di Wu, Jianhou Gan, Juxiang Zhou, Jun Wang, Wei Gao
2022 J jnl
Int. J. Intell. Syst.
Wei Gao, Weifan Wang, Lina Zheng
2022 J jnl
RAIRO Oper. Res.
Zhengyue He, Li Liang, Wei Gao
2022 J jnl
J. Ambient Intell. Humaniz. Comput.
Wei Gao, Li Yan, Yingfang Li, Bo Yang
2022 J jnl
Int. J. Intell. Syst.
Zidong Sun, Li Liang, Wei Gao
2022 conf
ML4CS (3)
Juanjuan Lu, Linli Zhu, Wei Gao
2022 J jnl
Discret. Appl. Math.
Wei Gao, Weifan Wang, Yaojun Chen
2022 J jnl
Int. J. Intell. Syst.
Wei Gao, Yaojun Chen, Yunqing Zhang
2021 conf
AIAM (ACM)
Ke Luo, Wei Gao
2021 J jnl
Appl. Soft Comput.
Bo Liu, Jianhou Gan, Bin Wen, Yiping Liufu, Wei Gao
2021 J jnl
Int. J. Comput. Intell. Syst.
Shu Gong, Gang Hua, Wei Gao
2021 conf
DMBD (2)
Linli Zhu, Wei Gao
2021 J jnl
Inf. Sci.
Juxiang Zhou, Jianhou Gan, Wei Gao, Antoni Liang
2021 J jnl
Math. Comput. Simul.
Rathinavel Silambarasan, Haci Mehmet Baskonus, R. Vijay Anand, M. Dinakaran, Balamurugan Balusamy, Wei Gao
2021 conf
DMBD (1)
Meihui Lan, Wei Gao
2021 J jnl
Int. J. Intell. Syst.
Wei Gao, Yaojun Chen, Yiqiao Wang
2021 J jnl
Appl. Soft Comput.
Zhijun Yang, Lei Mao, Bin Yan, Jun Wang, Wei Gao
2021 J jnl
Axioms
Pundikala Veeresha, Haci Mehmet Baskonus, Wei Gao
2021 conf
DMBD (1)
Linli Zhu, Wei Gao
2021 J jnl
Inf. Process. Lett.
Wei Gao, Weifan Wang
2021 J jnl
Int. J. Intell. Syst.
Wei Gao, Weifan Wang, Yaojun Chen
2020 conf
ML4CS (2)
Linli Zhu, Haci Mehmet Baskonus, Wei Gao
2020 J jnl
Math. Found. Comput.
Yuantian Xia, Juxiang Zhou, Tianwei Xu, Wei Gao
2020 J jnl
Comput. Intell.
Shu Gong, Wei Gao, Francis Abza
2020 J jnl
IEEE Access
Wei Gao, Bazgha Idrees, Sohail Zafar, Tabasam Rashid
2020 J jnl
Multim. Tools Appl.
Bazgha Idrees, Sohail Zafar, Tabasam Rashid, Wei Gao
2020 conf
ML4CS (2)
Yu Pan, Haci Mehmet Baskonus, Wei Gao
2020 J jnl
Symmetry
Wei Gao, Pundikala Veeresha, Doddabhadrappla Gowda Prakasha, Haci Mehmet Baskonus, Gulnur Yel
2020 J jnl
IEEE Access
Wei Gao, Shehnaz Akhter, Zahid Iqbal, Muhammad Qasim, Adnan Aslam
2020 conf
ML4CS (1)
Meihui Lan, Wei Gao
2020 conf
ML4CS (2)
Linli Zhu, Haci Mehmet Baskonus, Wei Gao
2019 J jnl
CoRR
Bin Wen, Jianhou Gan, Juan Luis García Guirao, Wei Gao
2019 J jnl
IEEE Access
Wei Gao, Zahid Iqbal, Muhammad Ishaq, Adnan Aslam, Muhammad Aamir, Muhammad Ahsan Binyamin
2019 J jnl
Appl. Soft Comput.
Wei Gao, Jalal Alsarraf, Hossein Moayedi, Amin Shahsavar, Hoang Nguyen
2019 J jnl
Eng. Comput.
Wei Gao, Masoud Karbasi, Ali Mahmodi Derakhsh, Ahmad Jalili
2019 J jnl
IEEE Access
Wei Gao, Muhammad Aamir, Ani Bin Shabri, Raimi Dewan, Adnan Aslam
2019 J jnl
IEEE Access
Akbar Ali, Shahzad Ahmed, Zhibin Du, Wei Gao, Muhammad Aslam Malik
2019 J jnl
IEEE Access
Riste Skrekovski, Darko Dimitrov, Jiemei Zhong, Hualong Wu, Wei Gao
2019 J jnl
IEEE Access
Wei Gao, Zahid Iqbal, Muhammad Ishaq, Adnan Aslam, Rabia Sarfraz
2019 J jnl
Comput. Appl. Math.
Juan Luis García Guirao, Jaume Llibre, Wei Gao
2018 J jnl
Ars Comb.
Jianzhang Wu, Xiao Yu, Wei Gao
2018 J jnl
Int. J. Comput. Math.
Wei Gao, Weifan Wang
2018 J jnl
Eng. Comput.
Wei Gao, Masoud Karbasi, Mahdi Hasanipanah, Xun Zhang, Jia Guo
2018 J jnl
Inf. Sci.
Wei Gao, Juan Luis García Guirao, Bommanahal Basavanagoud, Jianzhang Wu
2018 J jnl
Math. Comput. Simul.
Wei Gao, Li Yan, Mohammadhossein Saeedi, Hassan Saberi Nik
2017 J jnl
Clust. Comput.
Wei Gao, Mohammad Reza Farahani, Adnan Aslam, Sunilkumar M. Hosamani
2017 J jnl
J. Intell. Fuzzy Syst.
Shu Gong, Muhammad Kamran Siddiqui, Yi Luo, Wei Gao
2017 J jnl
Comput. J.
Wei Gao, Mohammad Reza Farahani
2017 J jnl
J. Intell. Fuzzy Syst.
Linli Zhu, Yu Pan, Mohammad Reza Farahani, Wei Gao
2017 J jnl
J. Intell. Fuzzy Syst.
Hualong Wu, Jianzhou Gan, Bo Zhao, Wei Gao
2017 J jnl
Appl. Math. Comput.
Wei Gao, Mohammad Reza Farahani, Shaohui Wang, Mohamad Nazri Husin
2017 J jnl
J. Intell. Fuzzy Syst.
Wei Gao, Linli Zhu, Yun Guo, Kaiyun Wang
2016 J jnl
AKCE Int. J. Graphs Comb.
Jia-Bao Liu, Wei Gao, Muhammad Kamran Siddiqui, Muhammad Reza Farahani
2016 J jnl
CoRR
Hosam Abdo, Darko Dimitrov, Wei Gao
2016 J jnl
Clust. Comput.
Wei Gao, Yun Guo, Kaiyun Wang
2016 J jnl
J. Intell. Fuzzy Syst.
Wei Gao, Linli Zhu, Kaiyun Wang
2016 J jnl
Int. J. Inf. Technol. Manag.
Jianzhang Wu, Xiao Yu, Wei Gao
2015 J jnl
Int. J. Bifurc. Chaos
Wei Gao, Linli Zhu, Kaiyun Wang
2015 J jnl
Comput. Math. Methods Medicine
Wei Gao, Weifan Wang
2014 J jnl
Comput. Intell. Neurosci.
Wei Gao, Linli Zhu
2014 J jnl
Int. J. Comput. Appl. Technol.
Wei Gao, Li Yan, Li Liang
2014 J jnl
J. Comput.
Wei Gao, Yun Gao, Tianwei Xu, Li Liang
2013 conf
ICDIP
Wei Gao, Yungang Zhang, Yun Gao, Li Liang, Youming Xia
redb/extractors/pe_extractors/pe_resources.py
← Index redb/extractors/pe_extractors/pe_resources.py python
from hashlib import sha256
import inspect
from datetime import datetime, timezone
from typing import Any

import magic
from magika import Magika
import pefile
from pefile import UnicodeStringWrapperPostProcessor

from redb.extractors.enum import Tag
from redb.extractors.pe_extractor import PEExtractor
from redb.models.dataclasses import PEResource


class PEResourceExtractor(PEExtractor):

    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,
            pe,
        )
        self.elastic_index = self.index_prefix + "-pe_resources"
        self.log.debug(inspect.currentframe().f_code.co_name)

    def tag(self):
        return Tag.PE_RESOURCE.value

    def _extract_resources(self):
        """
        Returns:
        resources: a list of dictionaries, one per each resources type found.
                    each dictionary the key represents the name of the content,
                    which is the value itself.
                    Empty list if no resources present.
        """
        self.log.debug(inspect.currentframe().f_code.co_name)
        resources_list = []
        try:
            if hasattr(self.pe, "DIRECTORY_ENTRY_RESOURCE"):
                for resource_type in self.pe.DIRECTORY_ENTRY_RESOURCE.entries:
                    # if resource_type.name is not None:
                    #     name = resource_type.name
                    # else:
                    #     name = pefile.RESOURCE_TYPE.get(resource_type.struct.Id)
                    # if not name:
                    #     name = resource_type.struct.Id
                    name = (
                        resource_type.name
                        if resource_type.name is not None
                        else pefile.RESOURCE_TYPE.get(resource_type.struct.Id)
                    )
                    if isinstance(name, UnicodeStringWrapperPostProcessor):
                        name = name.decode()
                    try:
                        if hasattr(resource_type, "directory"):
                            for resource_id in resource_type.directory.entries:
                                if hasattr(resource_id, "directory"):
                                    for resource_lang in resource_id.directory.entries:
                                        rsrc_data = self.pe.get_data(
                                            resource_lang.data.struct.OffsetToData,
                                            resource_lang.data.struct.Size,
                                        )
                                        file_type = magic.from_buffer(rsrc_data)
                                        magik = Magika().identify_bytes(rsrc_data).output.label

                                        rsrc_entropy = (
                                            "%.2f"
                                            % pefile.SectionStructure.entropy_H(
                                                self.pe, rsrc_data
                                            )
                                        )
                                        rsrc_sha256 = sha256(rsrc_data).hexdigest()
                                        lang = pefile.LANG.get(
                                            resource_lang.data.lang, "*unknown*"
                                        )
                                        sublang = pefile.get_sublang_name_for_lang(
                                            resource_lang.data.lang,
                                            resource_lang.data.sublang,
                                        )
                                        pe_resource = PEResource(
                                            _id=rsrc_sha256,
                                            resource_type=name,
                                            resource_entropy=rsrc_entropy,
                                            resource_sha256=rsrc_sha256,
                                            resource_filetype=file_type,
                                            resource_magika=magik,
                                            resource_language=lang,
                                            resource_rva=resource_lang.data.struct.OffsetToData,
                                            resource_size=resource_lang.data.struct.Size,
                                            resource_sub_lang=sublang,
                                        )
                                        resources_list.append(pe_resource)
                    except Exception as e:
                        self.log.warning(
                            f"Continue after Error in {self.hash.sha256}: {resource_type.name} "
                            f"Exception: {e}",
                            stack_info=True,
                        )
                        # resources_list.append({f"{e} - {resource_type.name}"})
                        continue
        except Exception as e:
            self.log.exception(
                f"Extract exports error {self.hash.sha256} Exception: {e}"
            )
        self.log.debug(f"Resource list {resources_list}")
        return resources_list

    def extract(self):
        try:
            self.log.debug(inspect.currentframe().f_code.co_name)
            resources = self._extract_resources()
            # self.export_to_elastic(resources)  # Let the exporters handle this
            return resources
        except Exception as e:
            self.log.error(f"Extract resources error {self.hash.sha256} Exception: {e}")
            return None

    def prepare_export_data(self, exporter_type: str) -> Any:
        if exporter_type == "ElasticsearchExporter":
            return self.extract()
        elif exporter_type == "ClickHouseExporter":
            resources = self.extract()
            if resources is None:
                return None
            
            data = []
            current_time = datetime.now(timezone.utc)
            
            for resource in resources:
                data.append([
                    self.sha256,                    # sha256
                    self.md5,                       # md5
                    self.sha1,                      # sha1
                    resource.resource_type,         # resource_type
                    resource.resource_entropy,      # resource_entropy
                    resource.resource_sha256,       # resource_sha256
                    resource.resource_filetype,     # resource_filetype
                    resource.resource_magika,       # resource_magika
                    resource.resource_language,     # resource_language
                    resource.resource_sub_lang,     # resource_sub_lang
                    resource.resource_size,         # resource_size
                    resource.resource_rva,          # resource_rva
                    current_time                    # analysis_date
                ])
            
            column_names = [
                'sha256', 'md5', 'sha1', 'resource_type', 'resource_entropy',
                'resource_sha256', 'resource_filetype', 'resource_magika',
                'resource_language', 'resource_sub_lang', 'resource_size',
                'resource_rva', 'analysis_date'
            ]
            
            if not data:
                return None

            column_type_names = [
                'FixedString(64)', 'FixedString(32)', 'FixedString(40)',
                'LowCardinality(Nullable(String))', 'Float64',
                'FixedString(64)', 'LowCardinality(Nullable(String))', 'LowCardinality(Nullable(String))',
                'LowCardinality(Nullable(String))', 'LowCardinality(Nullable(String))', 'UInt64',
                'UInt64', 'DateTime64(3, \'UTC\')'
            ]

            return (data, column_names, column_type_names)

    def get_clickhouse_table(self) -> str:
        return "redb_pe_resources"