Xianxiang Chen

63 papers C 9Journal 33Unranked 21
YearRankTypeTitle / Venue / Authors
2026 J jnl
Inf. Fusion
Yizhuo Feng, Beibei Wang, Zirui Wang, Ke Jiang, Peng Wang, Lidong Du, Xianxiang Chen, Pang Wu, Zhenfeng Li, Junxian Song, Libin Jiang, Zhen Fang
2026 J jnl
Inf. Fusion
Sunxiaohe Li, Dongfang Zhao, Zirui Wang, Hao Zhang, Pang Wu, Zhenfeng Li, Lidong Du, Xianxiang Chen, Hongtao Niu, Xiaopan Li, Jingen Xia, Ting Yang, Peng Wang, Zhen Fang
2026 J jnl
Displays
Mengxue Yan, Zirui Wang, Zhenfeng Li, Peng Wang, Pang Wu, Xianxiang Chen, Lidong Du, Li Li, Hongbo Chang, Zhen Fang
2026 J jnl
Knowl. Based Syst.
Beibei Wang, Yizhuo Feng, Peng Wang, Zirui Wang, Zhenfeng Li, Pang Wu, Xianxiang Chen, Junxian Song, Hongbo Chang, Lidong Du, Zhen Fang
2026 J jnl
Biomed. Signal Process. Control.
Sunxiaohe Li, Peng Wang, Jihang Xue, Zirui Wang, Fanglin Geng, Hao Zhang, Zhongrui Bai, Lidong Du, Xianxiang Chen, Huadong Zhu, Yecheng Liu, Junxian Song, Gang Cheng, Zhenfeng Li, Zhen Fang
2025 J jnl
Biomed. Signal Process. Control.
Xianya Yu, Yonggang Zou, Xiuying Mou, Siying Li, Zhongrui Bai, Lidong Du, Zhenfeng Li, Peng Wang, Xianxiang Chen, Xiaoran Li, Fenghua Li, Huaiyong Li, Zhen Fang
2025 J jnl
IEEE Internet Things J.
Guangqiang He, Weijie Wu, Hao Zhang, Peng Wang, Pang Wu, Zhenfeng Li, Xianxiang Chen, Lidong Du, Xueying Qin, Zhen Fang, Yirong Wu
2025 J jnl
Biomed. Signal Process. Control.
Zhongrui Bai, Fanglin Geng, Hao Zhang, Xianxiang Chen, Lidong Du, Peng Wang, Pang Wu, Gang Cheng, Zhen Fang, Yirong Wu
2025 J jnl
Biomed. Signal Process. Control.
Yicheng Yao, Hao Zhang, Pan Xia, Changyu Liu, Fanglin Geng, Zhongrui Bai, Lidong Du, Xianxiang Chen, Peng Wang, Weifeng Yao, Ziqing Hei, Zhen Fang
2024 J jnl
Biomed. Signal Process. Control.
Yonggang Zou, Xianya Yu, Siying Li, Xiuying Mou, Lidong Du, Xianxiang Chen, Zhenfeng Li, Peng Wang, Xiaoran Li, Mingyan Du, Zhen Fang
2024 J jnl
Int. J. Imaging Syst. Technol.
Siying Li, Pan Xia, Yonggang Zou, Lidong Du, Zhenfeng Li, Peng Wang, Xianxiang Chen, Yundai Chen, Yajun Shi, Zhen Fang
2024 J jnl
Biomed. Signal Process. Control.
Bokai Huang, Yizi Shao, Hao Zhang, Peng Wang, Xianxiang Chen, Zhenfeng Li, Lidong Du, Zhen Fang, Hui Zhao, Bing Han
2024 J jnl
Comput. Biol. Medicine
Yizi Shao, Bokai Huang, Lidong Du, Peng Wang, Zhenfeng Li, Zhe Liu, Lei Zhou, Yuanlin Song, Xianxiang Chen, Zhen Fang
2024 J jnl
IEEE Internet Things J.
Yicheng Yao, Hao Zhang, Changyu Liu, Fanglin Geng, Peng Wang, Lidong Du, Xianxiang Chen, Baoshi Han, Ting Yang, Zhen Fang
2023 conf
CinC
Siying Li, Yonggang Zou, Xianya Yu, Xiuying Mou, Yueqi Li, Bokai Huang, Changyu Liu, Xianxiang Chen
2023 conf
ICBBE
Siying Li, Pan Xia, Hao Zhang, Peng Wang, Xianxiang Chen, Zhenfeng Li, Lidong Du, Zhen Fang
2023 J jnl
Biomed. Signal Process. Control.
Zhengling He, Minfang Tang, Peng Wang, Lidong Du, Xianxiang Chen, Gang Cheng, Zhen Fang
2023 C conf
BSN
Yicheng Yao, Lirui Xu, Pan Xia, Hao Zhang, Lidong Du, Xianxiang Chen, Zhen Fang
2023 J jnl
Biomed. Signal Process. Control.
Pang Wu, Zhongrui Bai, Lirui Xu, Peng Wang, Xianxiang Chen, Lidong Du, Xiaoran Li, Zhan Zhao, Zhen Fang
2023 C conf
BSN
Fanglin Geng, Hao Zhang, Yicheng Yao, Pan Xia, Peng Wang, Xianxiang Chen, Zhenfeng Li, Lidong Du, Zhen Fang
2023 J jnl
Biomed. Signal Process. Control.
Hao Zhang, Pu Jian, Yicheng Yao, Changyu Liu, Peng Wang, Xianxiang Chen, Lidong Du, Chengyu Zhuang, Zhen Fang
2023 J jnl
Expert Syst. Appl.
Baiju Yan, Peng Wang, Lidong Du, Xianxiang Chen, Zhen Fang, Yirong Wu
2023 J jnl
Eng. Appl. Artif. Intell.
Yicheng Yao, Hao Zhang, Pan Xia, Changyu Liu, Fanglin Geng, Zhongrui Bai, Lidong Du, Xianxiang Chen, Peng Wang, Baoshi Han, Ting Yang, Zhen Fang
2022 J jnl
Biomed. Signal Process. Control.
Minfang Tang, Zhiwei Zhang, Zhengling He, Weisong Li, Xiuying Mou, Lidong Du, Peng Wang, Zhan Zhao, Xianxiang Chen, Xiaoran Li, Hongbo Chang, Zhen Fang
2022 J jnl
IEEE Internet Things J.
Yicheng Yao, Changyu Liu, Hao Zhang, Baiju Yan, Pu Jian, Peng Wang, Lidong Du, Xianxiang Chen, Baoshi Han, Zhen Fang
2022 J jnl
Biomed. Signal Process. Control.
Baiju Yan, Hao Zhang, Yicheng Yao, Changyu Liu, Pu Jian, Peng Wang, Lidong Du, Xianxiang Chen, Zhen Fang, Yirong Wu
2022 J jnl
Comput. Biol. Medicine
Zhengling He, Lidong Du, Peng Wang, Pan Xia, Zhe Liu, Yuanlin Song, Xianxiang Chen, Zhen Fang
2021 conf
CinC
Pan Xia, Zhengling He, Yusi Zhu, Zhongrui Bai, Xianya Yu, Yuqi Wang, Fanglin Geng, Lidong Du, Xianxiang Chen, Peng Wang, Zhen Fang
2021 J jnl
Frontiers Digit. Health
Rongjian Zhao, Lidong Du, Zhan Zhao, Xianxiang Chen, Jie Sun, Zhenzhen Man, Baogeng Cao, Zhen Fang
2021 J jnl
Comput. Methods Programs Biomed.
Ruishi Zhou, Chenshuo Wang, Pengfei Zhang, Xianxiang Chen, Lidong Du, Peng Wang, Zhan Zhao, Mingyan Du, Zhen Fang
2021 J jnl
Biomed. Signal Process. Control.
Zhengling He, Lidong Du, Song Du, Bin Wu, Zhiqi Fan, Binmu Xin, Xianxiang Chen, Zhen Fang, Jiexin Liu
2020 conf
CinC
Zhengling He, Pengfei Zhang, Lirui Xu, Zhongrui Bai, Hao Zhang, Weisong Li, Pan Xia, Xianxiang Chen
2020 J jnl
Comput. Methods Programs Biomed.
Chenshuo Wang, Xianxiang Chen, Lidong Du, Qingyuan Zhan, Ting Yang, Zhen Fang
2020 conf
CSAE
Lei Wang, Kunqin Li, Xianxiang Chen
2020 conf
ICIT
Feng Tian, Song Wang, Xianxiang Chen
2019 conf
CinC
Zhengling He, Xianxiang Chen, Zhen Fang, Weidong Yi, Chenshuo Wang, Li Jiang, Zhongkai Tong, Zhongrui Bai, Yueqi Li, Yichen Pan
2018 conf
ICIA
Pengfei Zhang, Rongjian Zhao, Zhan Zhao, Xianxiang Chen, Zhen Fang
2018 conf
COMPSAC (2)
Zhongkai Tong, Xianxiang Chen, Zhengling He, Kai Tong, Zhen Fang, Xianlong Wang
2018 conf
ICIMCS
Zhengchao Fang, Wenting Li, Xianxiang Chen, Yan Han
2018 conf
ICCCS (5)
Lei Wang, Kunqin Li, Xianxiang Chen
2018 J jnl
Comput. Ind.
Jiankang Liu, Xianxiang Chen, Lipeng Fang, Junxia Li, Ting Yang, Qingyuan Zhan, Kai Tong, Zhen Fang
2018 conf
ICIA
Minfang Tang, Xianxiang Chen, Zhan Zhao, Zhengling He, Zhen Fang
2017 J jnl
Comput. Ind.
Zhihong Xu, Jiexin Liu, Xianxiang Chen, Yilong Wang, Zhan Zhao
2017 C conf
Healthcom
Zhengling He, Xianxiang Chen, Zhen Fang, Minfang Tang, Junxia Li, Shanhong Xia
2017 J jnl
Comput. Ind.
Lu Han, Qiang Zhang, Xianxiang Chen, Qingyuan Zhan, Ting Yang, Zhan Zhao
2017 C conf
Healthcom
Jiankang Liu, Xianxiang Chen, Zhen Fang, Kai Tong, Lipeng Fang, Junxia Li
2017 C conf
Healthcom
Lipeng Fang, Xianxiang Chen, Zhen Fang, Kai Tong, Jiankang Liu, Zhengling He, Junxia Li
2017 J jnl
Comput. Ind.
Qiang Zhang, Xianxiang Chen, Qingyuan Zhan, Ting Yang, Shanhong Xia
2017 C conf
Healthcom
Tingyu Sheng, Zhen Fang, Xianxiang Chen, Zhan Zhao, Junxia Li
2016 conf
COMPSAC Workshops
Yang Zheng, Xianxiang Chen, Zhen Fang, Shanhong Xia
2016 conf
ICIA
Xianxiang Chen, Xun Bao, Zhen Fang, Shanhong Xia
2016 conf
BHI
Qiang Zhang, Xianxiang Chen, Zhen Fang, Shanhong Xia
2015 conf
ICIA
Zhihong Xu, Zhen Fang, Zhan Zhao, Xianxiang Chen, Diliang Chen, Fangmin Sun, Lidong Du, Yangming Qian, Huaiyong Li, Lili Tian
2015 J jnl
Int. J. Wirel. Mob. Comput.
Ren Ren, Xianxiang Chen, Xinyu Hu, Yu Wang, Shanhong Xia
2014 conf
COMPSAC Workshops
Xianxiang Chen, Xinyu Hu, Ren Ren, Bing Zhou, Xiao Tan, Jiabai Xie, Zhen Fang, Yangmin Qian, Huaiyong Li, Lili Tian, Shanhong Xia
2013 C conf
Healthcom
Bing Zhou, Xianxiang Chen, Xinyu Hu, Ren Ren, Xiao Tan, Zhen Fang, Shanhong Xia
2013 conf
ICIA
Diliang Chen, Zhen Fang, Zhan Zhao, Zhihong Xu, Fangmin Sun, Xianxiang Chen, Xinyu Hu
2013 conf
GreenCom/iThings/CPScom
Zhihong Xu, Zhen Fang, Zhan Zhao, Xianxiang Chen, Diliang Chen, Fangmin Sun, Lidong Du, Yangmin Qian, H. Y. Hui, Lili Tian
2013 conf
ICIA
Xiao Tan, Xianxiang Chen, Ren Ren, Xinyu Hu, Bing Zhou, Zhen Fang, Shanhong Xia
2012 conf
CWSN
Zhen Fang, Zhan Zhao, Yundong Xuan, Lidong Du, Xianxiang Chen, Xunxue Cui, Huaiyong Li, Lili Tian
2012 C conf
Healthcom
Xianxiang Chen, Yuansheng Lv, Ren Ren, Zhen Fang, Shanhong Xia, Huaiyong Li, Lili Tian
2012 J jnl
J. Syst. Control. Eng.
Jianmei Song, Gaohua Cai, Xianxiang Chen, Lixia Kong
2012 C conf
Healthcom
Zhen Fang, Zhan Zhao, Fangmin Sun, Xianxiang Chen, Lidong Du, Huaiyong Li, Lili Tian
redb/extractors/macho_extractors/macho_universal.py
← Index redb/extractors/macho_extractors/macho_universal.py python
import hashlib
import inspect
import json
from datetime import datetime, timezone
from typing import Any, List

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


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

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

    def _extract_universal_info(self):
        """Extract Universal/FAT binary architecture information using new API."""
        self.log.debug(inspect.currentframe().f_code.co_name)

        if not self.macho:
            return None

        try:
            # Parse at Universal level first (new API requirement)
            self.macho.parse()

            # Get architectures using new API
            architectures = self.macho.get_architectures()
            if not architectures:
                return None

            # Check if this is a FAT binary
            is_fat = len(architectures) > 1

            architecture_info = []

            # Extract info for each architecture
            for arch_name in architectures:
                try:
                    # Get general info for this architecture
                    general_info = self.macho.get_general_info(arch=arch_name)

                    # Get header info for this architecture
                    header_info = self.macho.get_macho_header(arch=arch_name)

                    # Get architecture-specific MachO instance for detailed analysis
                    arch_macho = self.macho.get_macho_for_arch(arch_name)

                    # Calculate architecture slice hash (if we can access the raw data)
                    arch_sha256 = None
                    arch_md5 = None
                    arch_sha1 = None

                    # For FAT binaries, try to get slice-specific info
                    if is_fat and arch_macho:
                        try:
                            # This would require access to the slice data
                            # For now, we'll use the general file info
                            arch_sha256 = general_info.get('SHA256', '') if general_info else ''
                            arch_md5 = general_info.get('MD5', '') if general_info else ''
                            arch_sha1 = general_info.get('SHA1', '') if general_info else ''
                        except Exception as e:
                            self.log.debug(f"Could not extract slice hash for {arch_name}: {e}")

                    architecture_info.append({
                        'architecture': arch_name,
                        'arch_sha256': arch_sha256,
                        'arch_md5': arch_md5,
                        'arch_sha1': arch_sha1,
                        'cputype': header_info.get('cputype') if header_info else None,
                        'cpusubtype': header_info.get('cpusubtype') if header_info else None,
                        'filetype': header_info.get('filetype') if header_info else None
                    })

                except Exception as e:
                    self.log.warning(f"Error extracting info for architecture {arch_name}: {e}")
                    continue

            # Create Universal dataclass
            macho_universal = MachOUniversal(
                is_fat=is_fat,
                architecture_count=len(architectures),
                architectures=architectures,
                architecture_info=architecture_info,
                fat_hash=self.sha256,
                fat_md5=self.md5,
                fat_sha1=self.sha1
            )

            return macho_universal

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

    def _extract_fat_architecture_mappings(self):
        """Extract detailed FAT binary architecture mappings for database relationships."""
        self.log.debug(inspect.currentframe().f_code.co_name)

        if not self.macho:
            return []

        try:
            # Parse at Universal level first
            self.macho.parse()

            # Get architectures using new API
            architectures = self.macho.get_architectures()
            if not architectures or len(architectures) <= 1:
                return []  # Not a FAT binary

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

            # For each architecture, create a mapping record
            for arch_name in architectures:
                try:
                    # Get general info
                    general_info = self.macho.get_general_info()

                    # Create mapping record for FAT binary architecture table
                    mapping = {
                        'fat_hash': self.sha256,  # SHA256 of the FAT binary
                        'architecture': arch_name,
                        'arch_sha256': general_info.get('SHA256', '') if general_info else '',  # Will need proper slice extraction
                        'arch_md5': general_info.get('MD5', '') if general_info else '',
                        'arch_sha1': general_info.get('SHA1', '') if general_info else '',
                        'arch_filename': f"{general_info.get('Filename', '')}.{arch_name}" if general_info else '',
                        'analysis_date': current_time
                    }
                    mappings.append(mapping)

                except Exception as e:
                    self.log.warning(f"Error creating mapping for architecture {arch_name}: {e}")
                    continue

            return mappings

        except Exception as e:
            self.log.error(f"Error extracting FAT architecture mappings: {e}")
            return []

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

    def extract_fat_binary_basic_properties_data(self):
        """Extract data needed for creating multiple BasicProperties records for FAT binaries.

        Returns:
            Tuple: (is_fat, fat_sha256, architectures_info) where:
                - is_fat: bool indicating if this is a FAT binary
                - fat_sha256: SHA256 of the FAT wrapper
                - architectures_info: dict with arch names and their hashes
        """
        self.log.debug(inspect.currentframe().f_code.co_name)

        if not self.macho:
            return False, None, {}

        try:
            # Parse at Universal level first
            self.macho.parse()

            # Get architectures using new API
            architectures = self.macho.get_architectures()
            if not architectures or len(architectures) <= 1:
                return False, None, {}  # Not a FAT binary

            # This is a FAT binary
            architectures_info = {}

            for arch_name in architectures:
                try:
                    # Get general info for this architecture
                    general_info = self.macho.get_general_info(arch=arch_name)

                    if general_info:
                        architectures_info[arch_name] = {
                            'sha256': general_info.get('SHA256', ''),
                            'md5': general_info.get('MD5', ''),
                            'sha1': general_info.get('SHA1', ''),
                            'filename': general_info.get('Filename', ''),
                            'filesize': general_info.get('Filesize', 0)
                        }
                except Exception as e:
                    self.log.warning(f"Error extracting info for architecture {arch_name}: {e}")
                    continue

            return True, self.sha256, architectures_info

        except Exception as e:
            self.log.error(f"Error extracting FAT binary data: {e}")
            return False, None, {}

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

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

            # Get architecture info for the binary
            try:
                if universal_info.is_fat:
                    # For FAT binaries, architecture fields should be NULL since it contains multiple
                    architecture_raw = None
                    architecture_str = None
                else:
                    # For single-arch binaries, get the actual architecture info
                    header_info = self.macho.get_macho_header()
                    architecture_raw = header_info.get('cputype', 0) if header_info else 0
                    architecture_str = universal_info.architectures[0] if universal_info.architectures else None
            except Exception as e:
                self.log.warning(f"Could not get architecture info for binary: {e}")
                architecture_raw = None
                architecture_str = None

            # Main Universal binary record
            data.append([
                self.sha256,                              # sha256
                self.md5,                                 # md5
                self.sha1,                                # sha1
                None,                                     # parent_sha256 (always None for main FAT binary)
                architecture_raw,                         # architecture (raw CPU type)
                architecture_str,                         # architecture_str (human-readable)
                universal_info.is_fat,                    # is_fat
                universal_info.architecture_count,       # architecture_count
                universal_info.architectures,            # architectures (array)
                json.dumps(universal_info.architecture_info[0] if len(universal_info.architecture_info) == 1 else {"architectures": universal_info.architecture_info}) if universal_info.architecture_info else None,  # architecture_info (JSON)
                current_time,                             # analysis_date
            ])

            column_names = [
                'sha256', 'md5', 'sha1', 'parent_sha256', 'architecture', 'architecture_str',
                'is_fat', 'architecture_count', 'architectures', 'architecture_info',
                'analysis_date'
            ]

            column_type_names = [
                'FixedString(64)', 'FixedString(32)', 'FixedString(40)',
                'Nullable(FixedString(64))', 'Nullable(UInt32)', 'LowCardinality(Nullable(String))',
                'UInt8', 'UInt32', 'Array(LowCardinality(String))', 'JSON',
                'DateTime64(3, \'UTC\')'
            ]

            return (data, column_names, column_type_names)

        return None

    def prepare_fat_architecture_export_data(self) -> Any:
        """Prepare export data for the FAT binary architecture mapping table."""
        mappings = self._extract_fat_architecture_mappings()
        if not mappings:
            return None

        data = []
        for mapping in mappings:
            data.append([
                mapping['fat_hash'],
                mapping['architecture'],
                mapping['arch_sha256'],
                mapping['arch_md5'],
                mapping['arch_sha1'],
                mapping['arch_filename'],
                mapping['analysis_date'],
            ])

        column_names = [
            'fat_hash', 'architecture', 'arch_sha256', 'arch_md5', 'arch_sha1',
            'arch_filename', 'analysis_date'
        ]

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

        return (data, column_names, column_type_names)

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

    # def get_fat_architecture_table(self) -> str:
    #     """Return table name for FAT binary architecture mappings."""
    #     return "redb_fat_binary_architectures"