Hailun Xia

73 papers A* 1A 1B 13C 5Journal 18Unranked 35
YearRankTypeTitle / Venue / Authors
2026 J jnl
Neurocomputing
Naichuan Zheng, Hailun Xia, Zeyu Liang, Yuchen Du
2026 J jnl
CoRR
Naichuan Zheng, Hailun Xia, Zepeng Sun, Weiyi Li, Yujia Wang
2025 J jnl
CoRR
Zeyu Liang, Hailun Xia, Naichuan Zheng
2025 J jnl
CoRR
Naichuan Zheng, Hailun Xia
2025 A* conf
ACM Multimedia
Naichuan Zheng, Yuchen Du, Hailun Xia, Zeyu Liang
2025 conf
CVM (3)
Junjiang Liu, Dandan Sun, Hailun Xia, Jiangtao Bai, Xinyue Fan
2024 conf
MMAsia
Junjiang Liu, Dandan Sun, Hailun Xia, Jiangtao Bai, Xinyue Fan
2024 J jnl
Vis. Comput.
Dandan Sun, Siqi Wang, Hailun Xia, Changan Zhang, Jianlong Gao, Mingyu Mao
2024 J jnl
CoRR
Naichuan Zheng, Hailun Xia, Zeyu Liang
2024 J jnl
CoRR
Naichuan Zheng, Hailun Xia, Dapeng Liu
2024 J jnl
CoRR
Zeyu Liang, Hailun Xia, Naichuan Zheng, Huan Xu
2022 B conf
GLOBECOM
Yujie Yang, Yang Yang, Hailun Xia, Caili Guo, Mahdi Chehimi, Walid Saad
2022 A conf
ICME
Feng Gao, Hailun Xia, Zhihao Tang
2022 J jnl
IEEE Internet Things J.
Yang Yang, Yujie Yang, Mingzhe Chen, Chunyan Feng, Hailun Xia, Shuguang Cui, H. Vincent Poor
2022 B conf
WCNC
Qianwen Wu, Fangfang Liu, Hailun Xia, Tingxuan Zhang
2022 B conf
ICPR
Zhihao Tang, Hailun Xia, Xinkai Gao, Feng Gao, Chunyan Feng
2021 C conf
ICCC
Chengyang Li, Yang Yang, Lin Bai, Bei Yu, Caili Guo, Hailun Xia
2021 conf
WCNC Workshops
Siyu Wang, Fangfang Liu, Hailun Xia
2021 J jnl
CoRR
Yang Yang, Yujie Yang, Mingzhe Chen, Chunyan Feng, Hailun Xia, Shuguang Cui, H. Vincent Poor
2021 J jnl
IEEE Access
Hailun Xia, Xinkai Gao
2020 J jnl
IEEE Access
Hailun Xia, Meng Xiao
2020 conf
ICCT
Jun Jia, Chunyan Feng, Tiankui Zhang, Hailun Xia, Jinling Li, Zhongtian Du, Chenggang Li
2020 B conf
GLOBECOM
Yujie Yang, Yang Yang, Congcong Wang, Caili Guo, Hailun Xia
2019 J jnl
Sensors
Linjun Jiang, Hailun Xia, Caili Guo
2019 conf
PAKDD (3)
Ziwei Xie, Hailun Xia, Chunyan Feng
2019 conf
GlobalSIP
Xiaoqian Zhang, Fangfang Liu, Hailun Xia
2019 conf
CVPR Workshops
Rui Zhang, Zheng Zhu, Peng Li, Rui Wu, Chaoxu Guo, Guan Huang, Hailun Xia
2019 J jnl
CoRR
Rui Zhang, Zheng Zhu, Peng Li, Rui Wu, Chaoxu Guo, Guan Huang, Hailun Xia
2018 conf
GlobalSIP
Junyou He, Hailun Xia, Chunyan Feng, Yunfei Chu
2018 conf
UV
Rongduo Liu, Jiadong Du, Qi Wang, Wei Xin, Delong Song, Xu Liu, Hailun Xia
2017 J jnl
IET Commun.
Shie Wu, Zhimin Zeng, Hailun Xia
2017 C conf
ICCC
Lu Chen, Hailun Xia, Zhimin Zeng
2017 conf
ISWCS
Lu Chen, Hailun Xia, Zhimin Zeng, Shie Wu
2017 C conf
ICCC
Yingshi Li, Hailun Xia, Jinglin Shi, Shie Wu
2017 conf
ISWCS
Yingshi Li, Hailun Xia, Shie Wu, Chen Lu
2017 J jnl
IEEE Commun. Lett.
Shie Wu, Zhimin Zeng, Hailun Xia
2016 conf
ISWCS
Tang Liu, Hailun Xia, Chunyan Feng
2016 conf
IC-NIDC
Xueying Li, Hailun Xia, Zhimin Zeng
2016 J jnl
IEEE Access
Shie Wu, Fangfang Liu, Zhimin Zeng, Hailun Xia
2016 conf
IC-NIDC
Tang Liu, Hailun Xia, Chunyan Feng
2015 B conf
PIMRC
Wenqi Zuo, Hailun Xia, Chunyan Feng
2015 B conf
PIMRC
Lu Chen, Hailun Xia, Chunyan Feng, Shie Wu
2015 B conf
PIMRC
Yalan Zhao, Hailun Xia, Zhimin Zeng
2015 C conf
ICCC
Yalan Zhao, Hailun Xia, Zhimin Zeng, Shie Wu
2015 C conf
ICCC
Mei Wang, Hailun Xia, Chunyan Feng
2015 conf
WCSP
Mei Wang, Hailun Xia, Chunyan Feng
2014 conf
VTC Fall
Hao Zhou, Hailun Xia, Caili Guo, Rui Han, Yaguang Wu
2014 B conf
PIMRC
Yaguang Wu, Hailun Xia, Yao Lu, Chunyan Feng, Tiankui Zhang, Rui Han, Hao Zhou
2014 conf
WPMC
Yaguang Wu, Hailun Xia, Yao Lu, Tiankui Zhang
2014 conf
VTC Fall
Rui Han, Chunyan Feng, Hailun Xia, Yaguang Wu
2014 conf
ICT
Weiyang Gong, Hailun Xia, Chunyan Feng
2014 conf
VTC Spring
Yaguang Wu, Hailun Xia, Chunyan Feng, Rui Han, Cong Du
2014 conf
WPMC
Xi Chen, Hailun Xia, Zhimin Zeng, Shie Wu, Wenqi Zuo, Yao Lu
2014 conf
WPMC
Hao Zhou, Hailun Xia, Caili Guo, Yaguang Wu
2014 conf
VTC Fall
Shie Wu, Hailun Xia, Zhimin Zeng, Rui Han, Xi Chen, Wenqi Zuo
2014 J jnl
IEEE Commun. Lett.
Rui Han, Chunyan Feng, Hailun Xia, Tiankui Zhang
2014 B conf
PIMRC
Yongbin Wu, Xinning Zhu, Xinshulin Li, Hailun Xia, Zhimin Zeng
2014 conf
WPMC
Junlei Liu, Xuekang Sun, Yao Lu, Hailun Xia, Tiankui Zhang
2014 B conf
PIMRC
Xi Chen, Hailun Xia, Zhimin Zeng, Shie Wu, Wenqi Zuo
2013 conf
ICC Workshops
Hailun Xia, Sainan Li, Zhimin Zeng
2013 conf
ICCT
Qi Li, Hailun Xia, Zhimin Zeng, Tiankui Zhang
2013 B conf
PIMRC
Yu Cao, Hailun Xia, Chunyan Feng
2013 conf
VTC Spring
Rui Han, Chunyan Feng, Hailun Xia, Qi Li, Yu Xu
2013 conf
ICCT
Yan Zhao, Hailun Xia, Zhimin Zeng, Fangfang Liu, Rui Han, Cong Du
2013 B conf
PIMRC
Rui Han, Chunyan Feng, Hailun Xia
2013 conf
ICCT
Yu Xu, Hailun Xia, Zhimin Zeng, Tiankui Zhang, Yang Liu
2012 conf
IC-NIDC
Hailun Xia, Nana He, Hao Wu, Zhimin Zeng
2012 conf
WCSP
Hao Wu, Hailun Xia, Chunyan Feng, Sainan Li
2012 conf
VTC Fall
Zhenglei Huang, Hailun Xia, Zhimin Zeng, Yinlong Liu
2012 conf
VTC Fall
Sainan Li, Hailun Xia, Zhimin Zeng, Zhenglei Huang, Hao Wu
2011 B conf
GLOBECOM
Zhenglei Huang, Zhimin Zeng, Hailun Xia
2011 conf
VTC Spring
Zhenglei Huang, Zhimin Zeng, Hailun Xia, Junfeng Shi
2007 conf
SNPD (3)
Hailun Xia, Zhimin Zeng, Wei Ding
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"