Chang Ding

31 papers B 1Journal 22Unranked 8
YearRankTypeTitle / Venue / Authors
2026 J jnl
Microelectron. J.
Yu-Hang Liu, Fan-Yi Meng, Chang Ding, Huilin Mu, Jian-Qiao Han, Xumin Ding, Chunsheng Guan, Lei Tu, Yong Yu, Qun Wu
2025 J jnl
Microelectron. J.
Haoyuan Wang, Fanyi Meng, Lei Tu, Rong Liu, Zijun Zheng, Yuxin Wang, Chang Ding, Ruizhi Liu
2024 J jnl
Remote. Sens.
Hang Ren, Zheng Lu, Gaopeng Li, Yun Zhang, Xueying Yang, Yalin Guo, Long Li, Xin Qi, Qinglong Hua, Chang Ding, Huilin Mu, Yong Du
2024 J jnl
Remote. Sens.
Chang Ding, Huilin Mu, Yun Zhang
2024 J jnl
IEEE Trans. Instrum. Meas.
Chang Ding, Huilin Mu, Jianfeng Lv, Chunsheng Guan, Dou Tian, Bingyue Qu, Fan-Yi Meng, Jiafu Wang
2024 J jnl
IEEE Trans. Geosci. Remote. Sens.
Huilin Mu, Chang Ding, Chunsheng Guan, Yun Zhang, Tong Cai, Fan-Yi Meng, Jiafu Wang
2023 J jnl
Remote. Sens.
Chang Ding, Zhendong Luo, Yifeng Hou, Siyang Chen, Weidong Zhang
2023 J jnl
IEEE Access
Guohou Li, Jia Li, Gongchao Chen, Zhibin Wang, Songlin Jin, Chang Ding, Weidong Zhang
2023 J jnl
Appl. Intell.
Zhenhua Tan, Zhenche Xia, Pengfei Wang, Chang Ding, Weichao Zhai
2023 J jnl
Comput. Electr. Eng.
Guohou Li, Fangyuan Wang, Ling Zhou, Songlin Jin, Xiwang Xie, Chang Ding, Xipeng Pan, Weidong Zhang
2022 J jnl
IEEE Trans. Geosci. Remote. Sens.
Huilin Mu, Yun Zhang, Yicheng Jiang, Chang Ding
2021 J jnl
IEEE Geosci. Remote. Sens. Lett.
Huilin Mu, Yun Zhang, Chang Ding, Yicheng Jiang, Meng Hwa Er, Alex C. Kot
2021 J jnl
KSII Trans. Internet Inf. Syst.
Juan Wang, Chang Ding, Minghu Wu, Yuanyuan Liu, Guanhai Chen
2021 conf
EITCE
Chang Ding, Deng Chen
2021 conf
ICIG (1)
Chang Ding, Xingyu Gao, Jun Li, Zeng Hu, Weidong Zhang, Ziku Wu
2020 J jnl
IEEE Access
Chang Ding, Xipeng Pan, Xingyu Gao, Lihua Ning, Ziku Wu
2019 J jnl
IEEE Geosci. Remote. Sens. Lett.
Yun Zhang, Huilin Mu, Yicheng Jiang, Chang Ding, Yong Wang
2019 J jnl
Comput. Stat. Data Anal.
Dalei Yu, Chang Ding, Na He, Ruiwu Wang, Xiaohua Zhou, Lei Shi
2017 conf
WASA
Weiqing Huang, Chang Ding, Siye Wang, Junyu Lin, Shao-yi Zhu, Yue Cui
2015 J jnl
Comput. Sci. Inf. Syst.
Weiqing Huang, Chang Ding, Siye Wang
2015 J jnl
Comput. Stat. Data Anal.
Dalei Yu, Peng Bai, Chang Ding
2015 conf
TrustCom/BigDataSE/ISPA (1)
Weiqing Huang, Chang Ding, Siye Wang, Shuang Hu
2014 conf
ICSAI
Wei-qing Huang, Chang Ding, Siye Wang, Xiang Jing, Yuan-Jian Luo, Yanfang Zhang, Zhujun Zhang
2013 J jnl
Comput. Stat. Data Anal.
Chang Ding, Siu-keung Tse, Ronghai Yang
2012 conf
CSO
Dalei Yu, Kelvin K. W. Yau, Chang Ding
2012 conf
CSO
Chang Ding, Dalei Yu
2011 J jnl
Expert Syst. Appl.
Shiwei Yu, Chang Ding, Kejun Zhu
2011 J jnl
Appl. Soft Comput.
Haixiang Guo, Xiuwu Liao, Kejun Zhu, Chang Ding, Yanhui Gao
2010 conf
ICEE
Chang Ding, Lanlan Li
2010 J jnl
Expert Syst. Appl.
Haixiang Guo, Kejun Zhu, Chang Ding, Lanlan Li
2009 B conf
IJCNN
Haixiang Guo, Lanlan Li, Kejun Zhu, Chang Ding
redb/extractors/pe_extractors/pe_imports.py
← Index redb/extractors/pe_extractors/pe_imports.py python
import inspect
from typing import Any, List, Tuple
from datetime import datetime, timezone

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


class PEImportExtractor(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_imports"
        self.log.debug(inspect.currentframe().f_code.co_name)

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

    def _extract_imports(self):
        self.log.debug(inspect.currentframe().f_code.co_name)

        imports_symbols = []
        imports_lib = []
        imports_total = 0
        # pe_import = None
        try:
            directory_entry_import = getattr(self.pe, "DIRECTORY_ENTRY_IMPORT", [])
            imports_total = len(directory_entry_import)
            for entry in directory_entry_import:
                symbols = []
                tmp_import = {}
                libname = entry.dll.decode() if entry.dll else ""
                imports_lib.append(libname)
                # replace . with _ to avoid issues with elastic
                # entryname = entryname.replace(".", "_")
                for symbol in entry.imports:
                    if symbol.name:
                        symbols.append(symbol.name.decode())
                # imports_symbols[entryname] = symbols
                tmp_import[libname] = symbols
                imports_symbols.append(tmp_import)
            return PEImport(
                pe_imports_total=imports_total,
                pe_import_libraryName=imports_lib if imports_lib else None,
                pe_import_functions=imports_symbols if imports_symbols else None,
            )
        except Exception as e:
            self.log.error(f"Extract imports error {self.hash.sha256} Exception: {e}")
        return pe_import

    def extract(self):
        try:
            self.log.debug(inspect.currentframe().f_code.co_name)
            return self._extract_imports()
        except Exception as e:
            self.log.error(f"Extract imports 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":
            imports = self.extract()
            if (
                imports is None
                or imports.pe_imports_total == 0
                or (
                    imports.pe_import_libraryName is None
                    and imports.pe_import_functions is None
                )
            ):
                return None

            # Flatten the data - one row per function import
            data = []
            current_time = datetime.now(timezone.utc)

            for lib_funcs in imports.pe_import_functions:
                for lib, funcs in lib_funcs.items():
                    for func in funcs:
                        data.append(
                            [
                                self.sha256,  # sha256
                                self.md5,  # md5
                                self.sha1,  # sha1
                                lib,  # library_name
                                func,  # function_name
                                current_time,  # analysis_date
                            ]
                        )

            column_names = [
                "sha256",
                "md5",
                "sha1",
                "library_name",
                "function_name",
                "analysis_date",
            ]

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

            if not data:
                return None

            return (data, column_names, column_type_names)

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