Haiwen Chen

34 papers A* 3A 1Journal 23Unranked 7
YearRankTypeTitle / Venue / Authors
2026 J jnl
Comput. Electron. Agric.
Zhihong Cui, Peng Liu, Jinpeng Hu, Enze Guo, Zhihong He, Xiaoyu Chai, Haiwen Chen, Zhiqiang Song, Lizhang Xu
2026 J jnl
Eng. Appl. Artif. Intell.
Liyuan Zhao, Pengju Zhang, Haiwen Chen, Ting Yang, Bin Yang, Zhe Chen, Jia Su
2026 J jnl
IEEE Internet Things J.
Shupeng Zhao, Haiwen Chen, Junbo Wang, Songcan Yu, Zibin Zheng
2026 J jnl
IEEE Trans. Smart Grid
Haiwen Chen, Jianning Chen, Yuanyuan Chai, Wei Guo, Chen Jia, Bin Yang, Zhen Xin
2025 J jnl
Memetic Comput.
Lihua Liu, Haiwen Chen, Ningchao Ge, Kaiming Xiao, Jibing Wu, Xuan Li, Hongbin Huang
2025 A* conf
EMNLP
Yiheng Wu, Ningchao Ge, Yanmin Li, Liwei Qian, Mengna Zhu, Haoyu Yang, Haiwen Chen, Jibing Wu
2025 J jnl
IEEE Trans. Smart Grid
Dong Liang, Guorun He, Lin Zeng, Hsiao-Dong Chiang, Haiwen Chen
2025 J jnl
Eng. Appl. Artif. Intell.
Haopeng Duan, Kaiming Xiao, Lihua Liu, Haiwen Chen, Hongbin Huang
2024 J jnl
Comput. Biol. Medicine
Haiwen Chen, Zhiyuan Qu, Yuan Tian, Ning Jiang, Yuan Qin, Jie Gao, Ruoyan Zhang, Yanning Ma, Zuolin Jin, Guangtao Zhai
2024 J jnl
Comput. Electron. Agric.
Zhihong Cui, Jinpeng Hu, Yang Yu, Guangqiao Cao, Hao Zhang, Xiaoyu Chai, Haiwen Chen, Lizhang Xu
2024 J jnl
IEEE Trans. Ind. Informatics
Haiwen Chen, Luyang Guo, Weiyu Bao, Kaiqi Sun, Qi Liu, Mengdi Wei
2024 conf
PRICAI (2)
Haiwen Chen, Songcan Yu, Shupeng Zhao, Junbo Wang, Kaiming Zhu, Kento Sato
2024 J jnl
Displays
Yanning Ma, Yiran Li, Xulin Liu, Jie Gao, Axian Wang, Haiwen Chen, Zhi Liu, Zuolin Jin
2023 A* conf
IJCAI
Kaiming Xiao, Haiwen Chen, Hongbin Huang, Lihua Liu, Jibing Wu
2023 conf
APWeb/WAIM (3)
Ningchao Ge, Peng Peng, Jibing Wu, Lihua Liu, Haiwen Chen, Tengyun Wang
2023 J jnl
Sensors
Zhihong Cui, Lizhang Xu, Yang Yu, Xiaoyu Chai, Qian Zhang, Peng Liu, Jinpeng Hu, Yang Li, Haiwen Chen
2023 J jnl
PeerJ Comput. Sci.
Haiwen Chen, Lu Wang, Lei Zhang, Yanping Li, Zhongrong Xu, Lulu Cui, Xilai Li
2022 conf
ACAI
Lihua Liu, Mao Wang, Kaiming Xiao, Haiwen Chen
2022 J jnl
Int. J. Intell. Syst.
Jiaping Yu, Haiwen Chen, Kui Wu, Tongqing Zhou, Zhiping Cai, Fang Liu
2022 J jnl
Sensors
Haiwen Chen, Jin Chen, Zhuohuai Guan, Yaoming Li, Kai Cheng, Zhihong Cui
2021 conf
ESSCIRC
Qiang Yu, Xiong Zhou, Kefeng Hu, Zijian Huang, Haiwen Chen, Xin Si, Jinda Yang, Qiang Li
2021 J jnl
IEEE Internet Things J.
Jiaping Yu, Haiwen Chen, Kui Wu, Tongqing Zhou, Zhiping Cai, Fang Liu
2021 A* conf
AAAI
Shan Zhao, Minghao Hu, Zhiping Cai, Haiwen Chen, Fang Liu
2021 J jnl
IEEE Internet Things J.
Hongjia Wu, Jiao Zhang, Zhiping Cai, Qiang Ni, Tongqing Zhou, Jiaping Yu, Haiwen Chen, Fang Liu
2021 J jnl
Int. J. Intell. Syst.
Haiwen Chen, Jiaping Yu, Huan Zhou, Tongqing Zhou, Fang Liu, Zhiping Cai
2021 J jnl
Int. J. Intell. Syst.
Haiwen Chen, Huan Zhou, Jiaping Yu, Kui Wu, Fang Liu, Tongqing Zhou, Zhiping Cai
2020 A conf
ICDCS
Jiaping Yu, Haiwen Chen, Kui Wu, Zhiping Cai, Jinhua Cui
2020 J jnl
IEEE Access
Luyang Guo, Shouxiang Wang, Haiwen Chen, Qingyuan Shi
2020 J jnl
IEEE Internet Comput.
Haiwen Chen, Jiaping Yu, Fang Liu, Zhiping Cai, Jing Xia
2020 J jnl
IEEE Trans. Netw. Serv. Manag.
Guang Yu, Zhiping Cai, Siqi Wang, Haiwen Chen, Fang Liu, Anfeng Liu
2019 J jnl
J. Biomed. Informatics
Shan Zhao, Zhiping Cai, Haiwen Chen, Ye Wang, Fang Liu, Anfeng Liu
2019 conf
AI4I
Xinyi Hu, Haiwen Chen, Ranxin Zhang
2018 conf
VLSI Circuits
Haiwen Chen, Xiong Zhot, Qiang Yu, Fan Zhang, Qiang Li
2018 conf
ICCCS (4)
Donghui Li, Cong Shen, Xiaopeng Dai, Haiwen Chen
redb/extractors/macho_extractors/macho_dylibs.py
← Index redb/extractors/macho_extractors/macho_dylibs.py python
import hashlib
import inspect
from datetime import datetime, timezone
from typing import Any

from redb.extractors.enum import Tag
from redb.extractors.macho_extractor import MachOExtractor
from redb.models.dataclasses import MachODylib


class MachODylibExtractor(MachOExtractor):

    def __init__(
        self,
        filepath,
        log,
        exporters=None,
        index_prefix=None,
        elastic_index=None,
        known_benign=False,
        known_malicious=False,
        macho=None,
    ):
        super().__init__(
            filepath,
            log,
            exporters,
            index_prefix,
            elastic_index,
            known_benign,
            known_malicious,
            macho,
        )
        self.elastic_index = self.index_prefix + "-macho_dylibs"
        self.log.debug(inspect.currentframe().f_code.co_name)

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

    def _extract_dylibs(self):
        """Extract dynamic library information from all architectures in the MachO binary."""
        self.log.debug(inspect.currentframe().f_code.co_name)
        dylibs = []

        if not self.macho:
            return dylibs

        try:
            # Get architectures using new API (already parsed in base class)
            architectures = self.macho.get_architectures()
            if not architectures:
                return dylibs

            # Process each architecture
            for arch_name in architectures:
                # Get dylib commands using new API with architecture parameter
                dylib_commands = self.macho.get_dylib_commands(arch=arch_name)
                if not dylib_commands:
                    continue

                # Extract dylib commands for this architecture
                for dylib_cmd in dylib_commands:
                    try:
                        dylib_name = dylib_cmd.get('dylib_name', 'Unknown')
                        if isinstance(dylib_name, bytes):
                            dylib_name = dylib_name.decode('utf-8', errors='replace')

                        # Create dylib dataclass with architecture info
                        macho_dylib = MachODylib(
                            dylib_name=dylib_name,
                            dylib_timestamp=dylib_cmd.get('dylib_timestamp', 0),
                            dylib_current_version=dylib_cmd.get('dylib_current_version', 0),
                            dylib_compat_version=dylib_cmd.get('dylib_compat_version', 0),
                        )
                        # Add architecture info to the dylib
                        macho_dylib.architecture = arch_name
                        dylibs.append(macho_dylib)

                    except Exception as e:
                        self.log.warning(
                            f'Unable to process dylib "{dylib_cmd.get("dylib_name", "Unknown")}" for architecture {arch_name} in {self.hash.sha256}: {e}'
                        )
                        continue

            return dylibs

        except Exception as e:
            self.log.error(f"Error extracting MachO dylibs: {e}")
            return dylibs

    def extract(self):
        self.log.debug(inspect.currentframe().f_code.co_name)
        try:
            dylibs = self._extract_dylibs()
            return dylibs
        except Exception as e:
            self.log.error(f"Error extracting MachO dylibs: {e}")
            return None

    def prepare_export_data(self, exporter_type: str) -> Any:
        if exporter_type == "ElasticsearchExporter":
            return self.extract()
        elif exporter_type == "ClickHouseExporter":
            if not self.macho:
                return None

            # Get architectures (macho is already parsed in base class)
            try:
                architectures = self.macho.get_architectures()
                is_fat = len(architectures) > 1
            except Exception as e:
                self.log.error(f"Could not get architectures: {e}")
                return None

            data = []
            current_time = datetime.now(timezone.utc)

            # Loop through each architecture (1 for single, multiple for FAT)
            for arch_name in architectures:
                # Get architecture-specific sha256
                try:
                    arch_general_info = self.macho.get_general_info(arch=arch_name)
                    arch_header_raw = self.macho.get_macho_header(arch=arch_name)
                    arch_sha256 = arch_general_info.get('SHA256', self.sha256)
                    arch_cputype_raw = arch_header_raw.get('cputype', 0) if arch_header_raw else 0
                except Exception as e:
                    self.log.warning(f"Could not get arch-specific data for {arch_name}: {e}")
                    arch_sha256 = self.sha256
                    arch_cputype_raw = 0

                # Get dylib commands for this architecture
                dylib_commands = self.macho.get_dylib_commands(arch=arch_name)
                if not dylib_commands:
                    continue

                # Process each dylib for this architecture
                for dylib_cmd in dylib_commands:
                    try:
                        dylib_name = dylib_cmd.get('dylib_name', 'Unknown')
                        if isinstance(dylib_name, bytes):
                            dylib_name = dylib_name.decode('utf-8', errors='replace')

                        data.append([
                            arch_sha256,                          # sha256 (architecture-specific)
                            dylib_name,                           # dylib_name
                            dylib_cmd.get('dylib_timestamp', 0), # dylib_timestamp
                            dylib_cmd.get('dylib_current_version', 0), # dylib_current_version
                            dylib_cmd.get('dylib_compat_version', 0),  # dylib_compat_version
                            current_time,                         # analysis_date
                        ])
                    except Exception as e:
                        self.log.warning(
                            f'Unable to process dylib "{dylib_cmd.get("dylib_name", "Unknown")}" for architecture {arch_name}: {e}'
                        )
                        continue

            column_names = [
                'sha256',
                'dylib_name', 'dylib_timestamp', 'dylib_current_version',
                'dylib_compat_version', 'analysis_date'
            ]

            if not data:
                return None

            column_type_names = [
                'FixedString(64)',
                'String', 'UInt32', 'UInt32',
                'UInt32', 'DateTime64(3, \'UTC\')'
            ]

            return (data, column_names, column_type_names)

        return None

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