Cen Wang

47 papers B 2Misc 2Journal 17Unranked 26
YearRankTypeTitle / Venue / Authors
2025 conf
SIGIR-AP
Haoxiang Shi, Jiaan Wang, Cen Wang, Tetsuya Sakai
2025 conf
OFC
Cen Wang, Noboru Yoshikane, Chenxiao Zhang, Yuta Wakayama, Daiki Soma, Takehiro Tsuritani
2025 conf
OFC
Yuepeng Wu, Cen Wang, Hongxiang Guo, Yuta Wakayama, Qiuyan Li, Noboru Yoshikane, Takehiro Tsuritani, Jian Wu
2025 conf
ECOC
Chenxiao Zhang, Cen Wang, Daiki Soma, Shohei Beppu, Ryo Inohara, Yuta Wakayama, Noboru Yoshikane, Takehiro Tsuritani
2024 conf
OFC
Cen Wang, Yuta Wakayama, Noboru Yoshikane, Takehiro Tsuritani
2024 J jnl
CoRR
Haoxiang Shi, Jiaan Wang, Jiarong Xu, Cen Wang, Tetsuya Sakai
2024 J jnl
J. Opt. Commun. Netw.
Cen Wang, Noboru Yoshikane, Daniel J. Elson, Yuta Wakayama, Daiki Soma, Shohei Beppu, Takehiro Tsuritani
2023 conf
OFC
Cen Wang, Noboru Yoshikane, Daniel J. Elson, Takehiro Tsuritani
2023 conf
OFC
Cen Wang, Noboru Yoshikane, Takehiro Tsuritani
2022 J jnl
Neurocomputing
Yanhu Chen, Cen Wang, Hongxiang Guo, Xiong Gao, Jian Wu
2022 conf
OECC/PSC
Cen Wang, Filippos Balasis, Noboru Yoshikane, Takehiro Tsuritani
2022 conf
OFC
Raul Muñoz, Carlos Manso, Filippos Balasis, Ramon Casellas, Ricard Vilalta, Ricardo Martínez, Cen Wang, Noboru Yoshikane, Takehiro Tsuritani, Itsuro Morita
2022 conf
OFC
Cen Wang, Xiao Xue, Noboru Yoshikane, Filippos Balasis, Takehiro Tsuritani, Hongxiang Guo
2022 B conf
COLING
Haoxiang Shi, Rongsheng Zhang, Jiaan Wang, Cen Wang, Yinhe Zheng, Tetsuya Sakai
2022 J jnl
Photonic Netw. Commun.
Cen Wang, Noboru Yoshikane, Hongxiang Guo, Xiong Gao, Takehiro Tsuritani
2022 J jnl
Comput. Networks
Cen Wang, Noboru Yoshikane, Filippos Balasis, Takehiro Tsuritani
2022 conf
OECC/PSC
Xiao Xue, Cen Wang, Yuepeng Wu, Noboru Yoshikane, Hongxiang Guo, Takehiro Tsuritani
2022 J jnl
JOCN
Carlos Manso, Ricard Vilalta, Raúl Muñoz, Noboru Yoshikane, Ramon Casellas, Ricardo Martínez, Cen Wang, Filippos Balasis, Takehiro Tsuritani, Itsuro Morita
2021 conf
ECOC
Yuta Wakayama, Vitaly Mikhailov, Daniel J. Elson, Rachata Maneekut, Jiawei Luo, Cen Wang, Filippos Balasis, Noboru Yoshikane, Daryl Inniss, Takehiro Tsuritani
2021 B conf
SMC
Haoxiang Shi, Cen Wang, Tetsuya Sakai
2021 conf
OFC
Cen Wang, Noboru Yoshikane, Filippos Balasis, Takehiro Tsuritani
2021 conf
ECOC
Carlos Manso, Raul Muñoz, Filippos Balasis, Ramon Casellas, Ricard Vilalta, Ricardo Martínez, Cen Wang, Noboru Yoshikane, Takehiro Tsuritani, Itsuro Morita
2021 conf
OFC
Carlos Manso, Noboru Yoshikane, Ricard Vilalta, Raul Muñoz, Ramon Casellas, Ricardo Martínez, Cen Wang, Filippos Balasis, Takehiro Tsuritani, Itsuro Morita
2021 conf
EEET
Wenyu Jiang, Hao Tang, Cen Wang
2021 conf
ONDM
Cen Wang, Noboru Yoshikane, Takehiro Tsuritani
2020 conf
AACL/IJCNLP (Student Research Workshop)
Haoxiang Shi, Cen Wang, Tetsuya Sakai
2020 J jnl
Quantum Inf. Process.
Yanhu Chen, Shijie Wei, Xiong Gao, Cen Wang, Yinan Tang, Jian Wu, Hongxiang Guo
2020 J jnl
IEEE Access
Peihong Yu, Cen Wang, Zhirui Wang, Jingyi Yu, Laurent Kneip
2020 conf
ECOC
Cen Wang, Noboru Yoshikane, Filippos Balasis, Takehiro Tsuritani
2020 conf
ONDM
Cen Wang, Takehiro Tsuritani, Xiong Gao, Hongxiang Guo
2020 J jnl
IEEE Trans. Pattern Anal. Mach. Intell.
Cen Wang, Minye Wu, Ziyu Wang, Liao Wang, Hao Sheng, Jingyi Yu
2020 J jnl
CoRR
Haoxiang Shi, Cen Wang
2020 J jnl
New Media Soc.
Katherine R. Dale, Arthur A. Raney, Qihao Ji, Sophie H. Janicke-Bowles, Joshua Baldwin, Jerrica T. Rowlett, Cen Wang, Mary Beth Oliver
2019 J jnl
Nat.
Zhaoyang Li, Cen Wang, Ziying Wang, Chenggang Zhu, Jie Li, Tian Sha, Lixiang Ma, Chao Gao, Yi Yang, Yimin Sun, Jian Wang, Xiaoli Sun, Chenqi Lu, Marian Difiglia, Yanai Mei, Chen Ding, Shouqing Luo, Yongjun Dang, Yu Ding, Yiyan Fei, Boxun Lu
2019 J jnl
IEEE Access
Cen Wang, Hongxiang Guo, Xiong Gao, Yanhu Chen, Yinan Tang, Jian Wu
2019 J jnl
IEEE Access
Xiong Gao, Hongxiang Guo, Yanhu Chen, Yinan Tang, Cen Wang, Shengyao Xu, Jian Wu
2019 J jnl
CoRR
Yuanxi Ma, Cen Wang, Guli Zhang, Qilei Jiang, Shiying Li, Jingyi Yu
2019 conf
ONDM
Hongxiang Guo, Cen Wang, Yinan Tang, Yong Zhu, Jian Wu, Yong Zuo
2019 conf
OFC
Cen Wang, Hongxiang Guo, Xiong Gao, Yanhu Chen, Jian Wu
2019 conf
OECC/PSC
Rui Wang, Cen Wang, Xiong Gao, Hongxiang Guo, Jian Wu
2018 conf
OFC
Cen Wang, Hong Cao, Shenzhen Yang, Junyuan Guo, Hongxiang Guo, Jian Wu
2018 Misc conf
PSC
Cen Wang, Xiong Gao, Takehiro Tsuritani, Seiya Sumita, Hongxiang Guo, Jian Wu
2018 Misc conf
PSC
Xiong Gao, Cen Wang, Shenzhen Yang, Hongxiang Guo, Xiang Li, Jian Wu
2018 J jnl
IEEE Access
Yinan Tang, Hongxiang Guo, Tongtong Yuan, Qi Wu, Xiang Li, Cen Wang, Xiong Gao, Jian Wu
2017 J jnl
CoRR
Xuan Cao, Zhang Chen, Anpei Chen, Xin Chen, Cen Wang, Jingyi Yu
2010 conf
ICCCI (2)
Zhenghua Pan, Cen Wang, Lijuan Zhang
2008 conf
ICIC (2)
Cen Wang, Zhenghua Pan
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"