Xiaobo Ma

84 papers A* 12A 1B 5Misc 1Journal 50Unranked 15
YearRankTypeTitle / Venue / Authors
2026 J jnl
IEEE Trans. Circuits Syst. Video Technol.
Dongjingdian Liu, Yan Hu, Kaiwen Hua, Yijing Lu, Zi Zhang, Xiaobo Ma, Zhaoman Zhong, Pengpeng Chen
2025 A* conf
INFOCOM
Jianfeng Li, Dongliang Wang, Yixuan Liu, Yifei Gao, Xiaorong Zhang, Zheng Lin, Xiaobo Ma, Xiapu Luo, Xiaohong Guan
2025 J jnl
J. Intell. Transp. Syst.
Xiaobo Ma, Abolfazl Karimpour, Yao-Jan Wu
2025 J jnl
CoRR
Xiaobo Ma, Hyunsoo Noh, Ryan Hatch, James Tokishi, Zepu Wang
2025 J jnl
IEEE Trans. Inf. Forensics Secur.
Zhihao Wang, Lei Xue, Xiapu Luo, Xiaobo Ma, Guofei Gu
2025 J jnl
CoRR
Xiaobo Ma, Hyunsoo Noh, James Tokishi, Ryan Hatch
2025 J jnl
IEEE Trans. Inf. Forensics Secur.
Xu Han, Haocong Li, Wei Wang, Haining Wang, Xiaobo Ma, Shouling Ji, Qiang Li
2025 A* conf
CCS
Tianyu Qi, Lei Xue, Yufeng Zhan, Xiaobo Ma
2025 J jnl
CoRR
Tianyu Qi, Lei Xue, Yufeng Zhan, Xiaobo Ma
2025 Misc conf
ICASSP
Zepu Wang, Xiaobo Ma, Huajie Yang, Weimin Lyu, Yang Liu, Peng Sun, Sharath Chandra Guntuku
2025 J jnl
CoRR
Yangyang Liu, Lei Xue, Sishan Wang, Xiapu Luo, Kaifa Zhao, Pengfei Jing, Xiaobo Ma, Yajuan Tang, Haiying Zhou
2025 J jnl
IEEE Trans. Intell. Transp. Syst.
Yangyang Liu, Lei Xue, Sishan Wang, Xiapu Luo, Kaifa Zhao, Pengfei Jing, Xiaobo Ma, Yajuan Tang, Haiying Zhou
2024 J jnl
CoRR
Xiaobo Ma, Pengyu Pan, Jianfeng Li, Wei Wang, Weizhi Meng, Xiaohong Guan
2024 J jnl
IEEE/ACM Trans. Netw.
Yang Li, Zhenhua Li, Zhenhua Han, Quanlu Zhang, Xiaobo Ma
2024 A* conf
INFOCOM
Jianfeng Li, Zheng Lin, Xiaobo Ma, Jianhao Li, Jian Qu, Xiapu Luo, Xiaohong Guan
2024 J jnl
CoRR
Xiaobo Ma, Hyunsoo Noh, Ryan Hatch, James Tokishi, Zepu Wang
2024 J jnl
J. Intell. Transp. Syst.
Xiaobo Ma, Abolfazl Karimpour, Yao-Jan Wu
2024 J jnl
IEEE Trans. Inf. Forensics Secur.
Xiaohan Yuan, Jiqiang Liu, Bin Wang, Wei Wang, Bin Wang, Tao Li, Xiaobo Ma, Witold Pedrycz
2024 J jnl
CoRR
Zijian Zhang, Yujie Sun, Zepu Wang, Yuqi Nie, Xiaobo Ma, Peng Sun, Ruolin Li
2024 J jnl
IEEE/ACM Trans. Netw.
Jian Qu, Xiaobo Ma, Wenmao Liu, Hongqing Sang, Jianfeng Li, Lei Xue, Xiapu Luo, Zhenhua Li, Li Feng, Xiaohong Guan
2024 J jnl
IEEE/ACM Trans. Netw.
Jianfeng Li, Zheng Lin, Jian Qu, Shuohan Wu, Hao Zhou, Yangyang Liu, Xiaobo Ma, Ting Wang, Xiapu Luo, Xiaohong Guan
2024 J jnl
CoRR
Jian Qu, Xiaobo Ma, Jianfeng Li
2024 J jnl
CoRR
Zepu Wang, Xiaobo Ma, Huajie Yang, Weimin Lvu, Peng Sun, Sharath Chandra Guntuku
2024 J jnl
IEEE/ACM Trans. Netw.
Xiaobo Ma, Jian Qu, Mawei Shi, Bingyu An, Jianfeng Li, Xiapu Luo, Junjie Zhang, Zhenhua Li, Xiaohong Guan
2023 J jnl
CoRR
Xiaobo Ma, Adrian Cottam, Mohammad Razaur Rahman Shaon, Yao-Jan Wu
2023 A* conf
USENIX Security Symposium
Jian Qu, Xiaobo Ma, Jianfeng Li, Xiapu Luo, Lei Xue, Junjie Zhang, Zhenhua Li, Li Feng, Xiaohong Guan
2023 J jnl
Comput. Secur.
Qing Wang, Cong Dong, Shijie Jian, Dan Du, Zhigang Lu, Yinhao Qi, Dongxu Han, Xiaobo Ma, Fei Wang, Yuling Liu
2023 J jnl
CoRR
Xiaobo Ma, Abolfazl Karimpour, Yao-Jan Wu
2023 J jnl
IEEE Trans. Syst. Man Cybern. Syst.
Jinpeng Han, Manzhi Yang, Xiaoguang Chen, Hongtao Liu, Yuntao Wang, Jianhao Li, Zhou Su, Zhen Li, Xiaobo Ma
2023 J jnl
Knowl. Based Syst.
Jian Qu, Xiaobo Ma, Wenmao Liu
2022 J jnl
CAAI Trans. Intell. Technol.
Xiaobo Ma, Yongbin Liu, Chunping Ouyang
2022 J jnl
Remote. Sens.
Jingtao Liang, Jihong Dong, Su Zhang, Cong Zhao, Bin Liu, Lei Yang, Shengwu Yan, Xiaobo Ma
2022 A* conf
USENIX Security Symposium
Jianfeng Li, Hao Zhou, Shuohan Wu, Xiapu Luo, Ting Wang, Xian Zhan, Xiaobo Ma
2022 J jnl
IEEE/ACM Trans. Netw.
Xiaobo Ma, Jian Qu, Jianfeng Li, John C. S. Lui, Zhenhua Li, Wenmao Liu, Xiaohong Guan
2022 J jnl
Remote. Sens.
Cong Zhao, Jingtao Liang, Su Zhang, Jihong Dong, Shengwu Yan, Lei Yang, Bin Liu, Xiaobo Ma, Weile Li
2022 A* conf
INFOCOM
Jian Qu, Xiaobo Ma, Wenmao Liu, Hongqing Sang, Jianfeng Li, Lei Xue, Xiapu Luo, Zhenhua Li, Li Feng, Xiaohong Guan
2022 J jnl
IEEE Trans. Instrum. Meas.
Bing Sun, Xinjiang Wang, Xiaobo Ma, Zhongyuan Sun, Zhiqiang Wang, Zuxing Zhang, Kaiming Zhou
2022 J jnl
IEEE Trans. Mob. Comput.
Liangyi Gong, Zhenhua Li, Hongyi Wang, Hao Lin, Xiaobo Ma, Yunhao Liu
2022 J jnl
IEEE Trans. Software Eng.
Lei Xue, Hao Zhou, Xiapu Luo, Le Yu, Dinghao Wu, Yajin Zhou, Xiaobo Ma
2022 A* conf
NDSS
Jianfeng Li, Shuohan Wu, Hao Zhou, Xiapu Luo, Ting Wang, Yangyang Liu, Xiaobo Ma
2021 conf
DSA
Xin Wang, Xiaobo Ma, Jian Qu
2021 A* conf
INFOCOM
Xiaobo Ma, Mawei Shi, Bingyu An, Jianfeng Li, Daniel Xiapu Luo, Junjie Zhang, Xiaohong Guan
2021 conf
DSA
Shuangshuang Huang, Xiaobo Ma, Huafeng Bian
2021 conf
DSA
Pengyu Pan, Xiaobo Ma, Huafeng Bian
2021 conf
VTC Spring
Jianfeng Li, Kaifa Zhao, Yajuan Tang, Xiapu Luo, Xiaobo Ma
2021 J jnl
IEEE Access
Xin Wang, Xiaobo Ma, Jiahao Peng, Jianfeng Li, Lei Xue, Wenjun Hu, Li Feng
2021 conf
DSA
Huafeng Bian, Xiaobo Ma, Pengyu Pan
2021 J jnl
IEEE Commun. Mag.
Xiaobo Ma, Jian Qu, Feitong Chen, Wenmao Liu, Jianfeng Li, Jing Tao, Hongshan Jiao, Mawei Shi, Zhi-Li Zhang
2021 conf
DSA
Jian Qu, Xiaobo Ma, Wenmao Liu
2021 J jnl
IEEE Trans. Parallel Distributed Syst.
Liangyi Gong, Hao Lin, Zhenhua Li, Feng Qian, Yang Li, Xiaobo Ma, Yunhao Liu
2020 conf
WCSP
Binbin Wu, Bangning Zhang, Bing Zhao, Daoxing Guo, Xiaobo Ma, Guofeng Wei
2020 conf
ICAIT
Xianlei Zhang, Xiaobo Ma, Xiao Han, Bo She, Wei Li
2020 conf
CCKS
Xiaobo Ma, Yongbin Liu, Chunping Ouyang
2020 A* conf
INFOCOM
Xiaobo Ma, Jian Qu, Jianfeng Li, John C. S. Lui, Zhenhua Li, Xiaohong Guan
2020 conf
ICCT
Jun Zhang, Daoxing Guo, Xiaobo Ma
2020 J jnl
IEEE Trans. Dependable Secur. Comput.
Xiaobo Ma, Bo An, Mengchen Zhao, Xiapu Luo, Lei Xue, Zhenhua Li, Tony T. N. Miu, Xiaohong Guan
2020 J jnl
Future Gener. Comput. Syst.
Yang Hu, John C. S. Lui, Wenjun Hu, Xiaobo Ma, Jianfeng Li, Xiao Liang
2019 J jnl
Int. J. Softw. Eng. Knowl. Eng.
Tao Zhang, Wenjun Hu, Xiapu Luo, Xiaobo Ma
2019 J jnl
ACM Trans. Model. Perform. Evaluation Comput. Syst.
Zhenhua Li, Yongfeng Zhang, Yunhao Liu, Tianyin Xu, Ennan Zhai, Yao Liu, Xiaobo Ma, Zhenyu Li
2019 conf
SecureComm (1)
Shuang Zhao, Xiaobo Ma, Wei Zou, Bo Bai
2019 J jnl
Inf. Sci.
Xiaobo Ma, Jianfeng Li, Yajuan Tang, Bo An, Xiaohong Guan
2018 J jnl
IEEE Intell. Syst.
Xiaobo Ma, Yihui He, Xiapu Luo, Jianfeng Li, Mengchen Zhao, Bo An, Xiaohong Guan
2018 A* conf
INFOCOM
Jianfeng Li, Xiaobo Ma, Guodong Li, Xiapu Luo, Junjie Zhang, Wei Li, Xiaohong Guan
2018 J jnl
Secur. Commun. Networks
Shuang Zhao, Xiapu Luo, Xiaobo Ma, Bo Bai, Yankang Zhao, Wei Zou, Zeming Yang, Man Ho Au, Xinliang Qiu
2018 J jnl
IEEE Trans. Inf. Forensics Secur.
Lei Xue, Xiaobo Ma, Xiapu Luo, Edmond W. W. Chan, TungNgai Miu, Guofei Gu
2018 B conf
NSS
Yankang Zhao, Xiaobo Ma, Jianfeng Li, Shui Yu, Wei Li
2018 B conf
NSS
Jiahao Peng, Xiaobo Ma, Jianfeng Li, Lei Xue, Wenjun Hu
2017 B conf
SRDS
Shengtuo Hu, Xiaobo Ma, Muhui Jiang, Xiapu Luo, Man Ho Au
2017 A* conf
INFOCOM
Lei Xue, Xiaobo Ma, Xiapu Luo, Le Yu, Shuai Wang, Ting Chen
2017 J jnl
Inf. Sci.
Jianfeng Li, Xiaobo Ma, Junjie Zhang, Jing Tao, Pinghui Wang, Xiaohong Guan
2017 J jnl
CoRR
Xiaobo Ma, Yihui He, Xiapu Luo, Jianfeng Li, Mengchen Zhao, Bo An, Xiaohong Guan
2016 conf
ACISP (1)
Shuang Zhao, Xiapu Luo, Bo Bai, Xiaobo Ma, Wei Zou, Xinliang Qiu, Man Ho Au
2016 conf
FNC/MobiSPC
Yang Hu, John C. S. Lui, Wenjun Hu, Xiaobo Ma, Jianfeng Li, Xiao Liang
2016 J jnl
CoRR
Yang Hu, John C. S. Lui, Wenjun Hu, Xiaobo Ma, Jianfeng Li, Xiao Liang
2015 J jnl
J. Netw. Comput. Appl.
Xiaobo Ma, Junjie Zhang, Zhenhua Li, Jianfeng Li, Jing Tao, Xiaohong Guan, John C. S. Lui, Don Towsley
2015 A* conf
INFOCOM
Jianfeng Li, Jing Tao, Xiaobo Ma, Junjie Zhang, Xiaohong Guan
2015 J jnl
Remote. Sens.
Shanyu Huang, Yuxin Miao, Guangming Zhao, Fei Yuan, Xiaobo Ma, Chuanxiang Tan, Weifeng Yu, Martin L. Gnyp, Victoria I. S. Lenz-Wiedemann, Uwe Rascher, Georg Bareth
2014 J jnl
IEEE Trans. Inf. Forensics Secur.
Xiaobo Ma, Junjie Zhang, Jing Tao, Jianfeng Li, Jue Tian, Xiaohong Guan
2014 B conf
ICCCN
Wenjun Hu, Jing Tao, Xiaobo Ma, Wenyu Zhou, Shuang Zhao, Ting Han
2013 J jnl
CoRR
Junzhou Zhao, Pinghui Wang, Jing Tao, Xiaobo Ma, Xiaohong Guan
2013 conf
ICC
Jianfeng Li, Xiaobo Ma, Jing Tao, Xiaohong Guan
2012 A conf
ACSAC
Shuang Zhao, Patrick P. C. Lee, John C. S. Lui, Xiaohong Guan, Xiaobo Ma, Jing Tao
2012 B conf
GLOBECOM
Xiaobo Ma, Jianfeng Li, Jing Tao, Xiaohong Guan
2010 conf
ICC
Xiaobo Ma, Xiaohong Guan, Jing Tao, Qinghua Zheng, Yun Guo, Lu Liu, Shuang Zhao
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"