Kai Chen

67 papers A* 5A 1B 4C 2Misc 6Journal 37Unranked 12
YearRankTypeTitle / Venue / Authors
2026 J jnl
Neurocomputing
Zhaorongjie Wang, Nan Li, Kai Chen, Aiping Li, Liqun Gao
2026 A* conf
AAAI
Han Yu, Xiaojuan Zhao, Aiping Li, Kai Chen, Ziniu Liu, Zhichao Peng
2026 J jnl
Neural Networks
Lei Tian, Nan Li, Zhong Zhang, Wenqing Hou, Haiyan Liu, Xin Song, Kai Chen, Bin Zhou, Liqun Gao
2025 J jnl
World Wide Web (WWW)
Kai Chen, Yunxin Li, Xiwen Zhu, Wentai Zhang, Baotian Hu
2025 J jnl
CoRR
Han Yu, Xiaojuan Zhao, Aiping Li, Kai Chen, Ziniu Liu, Zhichao Peng
2025 J jnl
CAAI Trans. Intell. Technol.
Ye Wang, Binxing Fang, Shuxian Huang, Kai Chen, Yan Jia, Aiping Li
2025 J jnl
World Wide Web (WWW)
Kai Chen, Han Yu, Xin Song, Ye Wang, Yongxue Shan, Aiping Li, Yinxuan Huang, Ziniu Liu
2025 A* conf
AAAI
Kai Chen, Xin Song, Ye Wang, Liqun Gao, Aiping Li, Xiaojuan Zhao, Bin Zhou, Yalong Xie
2025 A* conf
EMNLP
Xin Song, Haiyan Liu, Haiyang Wang, Ye Wang, Kai Chen, Bin Zhou
2025 J jnl
Health Inf. Sci. Syst.
Kai Chen, Xiwen Zhu, Wentai Zhang, Shuoran Jiang, Qingcai Chen
2025 J jnl
IEEE Trans. Inf. Forensics Secur.
Ziniu Liu, Han Yu, Kai Chen, Aiping Li
2025 J jnl
Inf. Fusion
Kai Chen, Xiaojuan Zhao, Xin Song, Ye Wang, Zhibin Dong, Feng Xie, Aiping Li, Yue Han, Changjian Li
2025 A* conf
AAAI
Yinxuan Huang, Ke Liang, Yanyi Huang, Xiang Zeng, Kai Chen, Bin Zhou
2025 A conf
ECAI
Lizhen Ou, Yiping Yao, Kai Chen, Wenjie Tang
2025 J jnl
Expert Syst. Appl.
Kai Chen, Han Yu, Ye Wang, Xin Song, Xiaojuan Zhao, Yalong Xie, Liqun Gao, Aiping Li
2024 conf
ACL (1)
Kai Chen, Ye Wang, Yitong Li, Aiping Li, Han Yu, Xin Song
2024 J jnl
CoRR
Kai Chen, Ye Wang, Yitong Li, Aiping Li, Han Yu, Xin Song
2024 J jnl
IEEE Trans. Parallel Distributed Syst.
Kai Chen, Qingjun Qu, Feng Zhu, Zhengming Yi, Wenjie Tang
2024 conf
ICIC (13)
Yinxuan Huang, Chenxi Zhu, Kai Chen, Xuechen Zhao, Liqun Gao, Kai Xiao, Yanyi Huang, Bin Zhou
2024 J jnl
World Wide Web (WWW)
Han Yu, Ziniu Liu, Hongkui Tu, Kai Chen, Aiping Li
2024 J jnl
J. Parallel Distributed Comput.
Wenjie Tang, Yiping Yao, Lizhen Ou, Kai Chen
2024 J jnl
Neurocomputing
Han Yu, Kai Chen, Ziniu Liu, Hongkui Tu, Aiping Li
2024 conf
DSC
Changjian Li, Kai Chen, Han Yu, Yinxuan Huang, Xuechen Zhao, Jianfeng Zhang, Aiping Li
2024 conf
ICONIP (9)
Kai Chen, Yingping Deng, Qingcai Chen, Dongfeng Li
2024 A* conf
IJCAI
Kai Chen, Ye Wang, Xin Song, Siwei Chen, Han Yu, Aiping Li
2024 Misc conf
ICASSP
Shuxian Huang, Ye Wang, Kai Chen, Yan Jia
2023 conf
ADMA (4)
Yingdan Shang, Bin Zhou, Xiang Zeng, Kai Chen
2023 J jnl
Complex Intell. Syst.
Yuhao Xiao, Yiping Yao, Kai Chen, Wenjie Tang, Feng Zhu
2023 J jnl
Int. J. Intell. Syst.
Lizhen Ou, Yiping Yao, Xueshan Luo, Xinmeng Li, Kai Chen
2023 J jnl
CAAI Trans. Intell. Technol.
Yan Jia, Mengqi Lin, Ye Wang, Jianming Li, Kai Chen, Joanna Siebert, Geordie Z. Zhang, Qing Liao
2022 J jnl
Int. J. Mach. Learn. Cybern.
Kai Chen, Meng Niu, Qingcai Chen
2022 J jnl
Simul. Model. Pract. Theory
Yuhao Xiao, Yiping Yao, Kai Chen, Wenjie Tang, Feng Zhu
2022 Misc conf
ICASSP
Jiancheng Gui, Yikai Li, Kai Chen, Joanna Siebert, Qingcai Chen
2022 J jnl
Image Vis. Comput.
Kai Chen, Taihe Yi, Qi Lv
2022 C conf
SIMULTECH
Yuxuan Fang, Yiping Yao, Feng Zhu, Kai Chen
2022 conf
ACL (1)
Kai Chen, Ye Wang, Yitong Li, Aiping Li
2022 J jnl
CoRR
Kai Chen, Ye Wang, Yitong Li, Aiping Li
2021 Misc conf
ICASSP
Kai Chen, Guanyu Fu, Qingcai Chen, Baotian Hu
2021 conf
DSC
Yalong Xie, Aiping Li, Ziniu Liu, Kai Chen, Hongkui Tu
2021 J jnl
Frontiers Neurorobotics
Yichen Song, Aiping Li, Hongkui Tu, Kai Chen, Chenchen Li
2021 B conf
ICPP
Zhengming Yi, Yiping Yao, Kai Chen
2021 conf
ICANN (3)
Kai Chen, Ye Wang, Yitong Li, Aiping Li, Xiaojuan Zhao
2021 conf
APSys
Zhengming Yi, Yiping Yao, Kai Chen
2021 B conf
IJCNN
Kai Chen, Chenchen Li, Aiping Li, Jingsheng Gao, Sixia Ma
2021 Misc conf
ICASSP
Meng Niu, Kai Chen, Qingcai Chen, Lufeng Yang
2021 B conf
IJCNN
Kai Chen, Ye Wang, Aiping Li, Chenchen Li, Xiaojuan Zhao, Ruidong Ding
2021 J jnl
IEEE Signal Process. Lett.
Kai Chen, Taihe Yi, Qi Lv
2021 J jnl
Knowl. Based Syst.
Kai Chen, Fayuan Li, Baotian Hu, Weihua Peng, Qingcai Chen, Hong Yu, Yang Xiang
2021 J jnl
Axioms
Yingdan Shang, Bin Zhou, Ye Wang, Aiping Li, Kai Chen, Yichen Song, Changjian Lin
2021 J jnl
CoRR
Kai Chen, Qi Lv, Taihe Yi, Zhengming Yi
2021 J jnl
Entropy
Tongliang Lu, Kai Chen, Yan Zhang, Qiling Deng
2021 C conf
SIMULTECH
Yuhao Xiao, Yiping Yao, Feng Zhu, Kai Chen
2021 J jnl
Neurocomputing
Xiaojuan Zhao, Yan Jia, Aiping Li, Rong Jiang, Kai Chen, Ye Wang
2020 J jnl
CoRR
Kai Chen, Meng Niu, Qingcai Chen
2020 J jnl
CoRR
Kai Chen, Fayuan Li, Baotian Hu, Weihua Peng, Qingcai Chen, Hong Yu
2020 Misc conf
ICASSP
Yiqing Feng, Guanyu Fu, Qingcai Chen, Kai Chen
2019 J jnl
Aust. J. Intell. Inf. Process. Syst.
Kai Chen, Baotian Hu, Qingcai Chen, Hong Yu
2018 J jnl
Comput. Intell. Neurosci.
Chi Jin, Ruochun Jin, Kai Chen, Yong Dou
2018 B conf
IJCNN
Shizhao Chen, Kai Chen, Chuanfu Xu, Long Lan
2017 J jnl
Comput. Intell. Neurosci.
Kai Chen, Rongchun Li, Yong Dou, Zhengfa Liang, Qi Lv
2017 J jnl
Neurocomputing
Kai Chen, Qi Lv, Yao Lu, Yong Dou
2016 Misc conf
ICMLC
Kai Chen, Dong Huang, Qingcai Chen, Chao Zhang
2016 conf
BIBM
Shengyu Liu, Kai Chen, Qingcai Chen, Buzhou Tang
2016 J jnl
Database J. Biol. Databases Curation
Haodi Li, Buzhou Tang, Qingcai Chen, Kai Chen, Xiaolong Wang, Baohua Wang, Zhe Wang
2014 conf
ACA
Shi-Ce Ni, Yong Dou, Kai Chen, Lin Deng
2014 J jnl
IEICE Trans. Fundam. Electron. Commun. Comput. Sci.
Shi-Ce Ni, Yong Dou, Kai Chen, Jie Zhou
2013 conf
NCCET
Shi-Ce Ni, Yong Dou, Kai Chen, Lin Deng
redb/extractors/macho_extractors/macho_similarity_hashes.py
← Index redb/extractors/macho_extractors/macho_similarity_hashes.py python
import inspect
from datetime import datetime, timezone
from typing import Any

from redb.extractors.enum import Tag
from redb.extractors.macho_extractor import MachOExtractor


class MachOSimilarityHashExtractor(MachOExtractor):
    """Extract Mach-O similarity hashes using machofile API.

    Similarity hashes are MD5 fingerprints of sorted, deduplicated binary components:
    - dylib_hash: MD5 of dynamic library names
    - import_hash: MD5 of imported function names
    - export_hash: MD5 of exported symbol names
    - entitlement_hash: MD5 of entitlement names and array values
    - symhash: MD5 of external undefined symbols

    For FAT binaries:
    - Inserts one row per architecture slice with per-slice hashes
    - Inserts one row for the FAT container with combined hashes

    For single-arch binaries:
    - Inserts one row with that architecture's hashes

    Note: parent_sha256 and architecture relationships are tracked in redb_basic_properties,
    not duplicated here. Use JOIN with redb_basic_properties when needed.
    """

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

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

    def _extract_similarity_hashes(self, arch_name=None):
        """Extract similarity hashes for a specific architecture."""
        self.log.debug(inspect.currentframe().f_code.co_name)

        if not self.macho:
            return None

        try:
            similarity_hashes = self.macho.get_similarity_hashes(arch=arch_name)
            return similarity_hashes if similarity_hashes else None
        except Exception as e:
            self.log.error(f"Error extracting similarity hashes for arch {arch_name}: {e}")
            return None

    def extract(self):
        self.log.debug(inspect.currentframe().f_code.co_name)
        try:
            if not self.macho:
                return None

            architectures = self.macho.get_architectures()
            if not architectures:
                return None

            if len(architectures) > 1:
                # FAT binary - return combined hashes + per-arch hashes
                results = []

                # First add combined hashes for the FAT container
                all_hashes = self.macho.get_similarity_hashes()
                combined_hashes = all_hashes.get('combined', {}) if all_hashes else {}
                if combined_hashes:
                    combined_hashes['arch_identifier'] = 'fat'
                    results.append(combined_hashes)

                # Then add per-arch hashes
                for arch_name in architectures:
                    hashes = self._extract_similarity_hashes(arch_name)
                    if hashes:
                        hashes['arch_identifier'] = arch_name
                        results.append(hashes)
                return results
            else:
                # Single architecture - return single result
                return self._extract_similarity_hashes(architectures[0])
        except Exception as e:
            self.log.error(f"Error extracting similarity hashes: {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

            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)

            # For FAT binaries, first insert a row for the container with combined hashes
            if is_fat:
                all_hashes = self.macho.get_similarity_hashes()  # Without arch returns all including 'combined'
                combined_hashes = all_hashes.get('combined', {}) if all_hashes else {}
                if combined_hashes:
                    data.append([
                        self.sha256,                                    # sha256 (FAT container)
                        combined_hashes.get('dylib_hash'),              # dylib_hash
                        combined_hashes.get('import_hash'),             # import_hash
                        combined_hashes.get('export_hash'),             # export_hash
                        combined_hashes.get('entitlement_hash'),        # entitlement_hash
                        combined_hashes.get('symhash'),                 # symhash
                        current_time,                                   # analysis_date
                    ])

            # Insert rows for each architecture slice
            for arch_name in architectures:
                # Get architecture-specific sha256
                try:
                    arch_general_info = self.macho.get_general_info(arch=arch_name)
                    arch_sha256 = arch_general_info.get('SHA256', self.sha256)
                except Exception as e:
                    self.log.warning(f"Could not get arch-specific sha256 for {arch_name}: {e}")
                    arch_sha256 = self.sha256

                # Get similarity hashes for this architecture
                similarity_hashes = self._extract_similarity_hashes(arch_name)
                if not similarity_hashes:
                    continue

                data.append([
                    arch_sha256,                                    # sha256 (arch-specific)
                    similarity_hashes.get('dylib_hash'),            # dylib_hash
                    similarity_hashes.get('import_hash'),           # import_hash
                    similarity_hashes.get('export_hash'),           # export_hash
                    similarity_hashes.get('entitlement_hash'),      # entitlement_hash
                    similarity_hashes.get('symhash'),               # symhash
                    current_time,                                   # analysis_date
                ])

            if not data:
                return None

            column_names = [
                'sha256',
                'macho_dylib_hash', 'macho_import_hash', 'macho_export_hash',
                'macho_entitlement_hash', 'macho_symhash',
                'analysis_date'
            ]

            column_type_names = [
                'FixedString(64)',
                'Nullable(FixedString(32))', 'Nullable(FixedString(32))', 'Nullable(FixedString(32))',
                'Nullable(FixedString(32))', 'Nullable(FixedString(32))',
                'DateTime64(3, \'UTC\')'
            ]

            return (data, column_names, column_type_names)

        return None

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