Han Meng

46 papers A* 5A 1B 3Journal 29Unranked 8
YearRankTypeTitle / Venue / Authors
2026 J jnl
IEEE Wirel. Commun. Lett.
Bingxin Tian, Han Meng, Ruoguang Li, Lei Wang, Zijun Huang, Zhenning Huang, Bin Wei, Hao Zhang, Zhu Han
2026 J jnl
CoRR
Dong Xu, Han Meng, Xinyu Chen, Dengcheng Zhu, Wei Tang, Fei Liu, Liguang Xie, Wu Xiang, Rui Shi, Yue Li, Henry Hu, Hui Zhang, Jianping Jiang, Dong Li
2026 conf
CHI Extended Abstracts
Peinuan Qin, Jingzhu Chen, Yitian Yang, Han Meng, Zicheng Zhu, Yi-Chieh Lee
2026 J jnl
CoRR
Peinuan Qin, Jingzhu Chen, Yitian Yang, Han Meng, Zicheng Zhu, Yi-Chieh Lee
2026 J jnl
CoRR
Yang Li, Han Meng, Chenan Wang, Haipeng Chen
2026 A* conf
CHI
Han Meng, Qiuyuan Lyu, Peinuan Qin, Yitian Yang, Renwen Zhang, Wen-Chieh Lin, Yi-Chieh Lee
2026 J jnl
CoRR
Han Meng, Qiuyuan Lyu, Peinuan Qin, Yitian Yang, Renwen Zhang, Wen-Chieh Lin, Yi-Chieh Lee
2026 J jnl
ACM Trans. Comput. Hum. Interact.
Han Meng, Yitian Yang, Wayne Fu, Jungup Lee, Yunan Li, Yi-Chieh Lee
2025 J jnl
Comput. Phys. Commun.
Keivan Esfarjani, Harold T. Stokes, Safoura Nayeb Sadeghi, Yuan Liang, Bikash Timalsina, Han Meng, Junichiro Shiomi, Bolin Liao, Ruoshi Sun
2025 A conf
SDM
Han Meng, Ruoqiao Chen, Bin Chen, Jiayu Zhou
2025 J jnl
Nat. Comput. Sci.
Renwen Zhang, Han Meng, Marion Neubronner, Yi-Chieh Lee
2025 J jnl
CoRR
Shihan Fang, Hongzheng Chen, Niansong Zhang, Jiajie Li, Han Meng, Adrian Liu, Zhiru Zhang
2025 A* conf
CHI
Han Meng, Renwen Zhang, Ganyi Wang, Yitian Yang, Peinuan Qin, Jungup Lee, Yi-Chieh Lee
2025 J jnl
CoRR
Han Meng, Renwen Zhang, Ganyi Wang, Yitian Yang, Peinuan Qin, Jungup Lee, Yi-Chieh Lee
2025 conf
CHI Extended Abstracts
Yugin Tan, Kai Xin Soh, Renwen Zhang, Jungup Lee, Han Meng, Biswadeep Sen, Yi-Chieh Lee
2025 J jnl
CoRR
Yugin Tan, Kai Xin Soh, Renwen Zhang, Jungup Lee, Han Meng, Biswadeep Sen, Yi-Chieh Lee
2025 conf
CHI Extended Abstracts
Han Meng
2025 A* conf
AAAI
Yang Li, Han Meng, Zhenyu Bi, Ingolv T. Urnes, Haipeng Chen
2025 J jnl
SoftwareX
Yujie Su, Hong Gao, Han Meng, Jinming Wang, Gang Mei
2025 J jnl
CoRR
Han Meng, Gang Mei, Hong Tian, Nengxiong Xu, Jianbing Peng
2025 A* conf
CHI
Renwen Zhang, Han Li, Han Meng, Jinyuan Zhan, Hongyuan Gan, Yi-Chieh Lee
2025 conf
ACL (1)
Han Meng, Yancan Chen, Yunan Li, Yitian Yang, Jungup Lee, Renwen Zhang, Yi-Chieh Lee
2025 J jnl
CoRR
Han Meng, Yancan Chen, Yunan Li, Yitian Yang, Jungup Lee, Renwen Zhang, Yi-Chieh Lee
2024 J jnl
CoRR
Renwen Zhang, Han Li, Han Meng, Jinyuan Zhan, Hongyuan Gan, Yi-Chieh Lee
2024 J jnl
CoRR
Han Meng, Yitian Yang, Yunan Li, Jungup Lee, Yi-Chieh Lee
2024 J jnl
SoftwareX
Han Meng, Gang Mei, John C. Tipper
2024 J jnl
Neural Networks
Han Meng, Christian Wagner, Isaac Triguero
2023 conf
FUZZ
Han Meng, Christian Wagner, Isaac Triguero
2023 J jnl
J. Ambient Intell. Humaniz. Comput.
Yue Pan, Dechang Pi, Izhar Ahmed Khan, Han Meng
2023 J jnl
Inf. Sci.
Han Meng, Christian Wagner, Isaac Triguero
2023 J jnl
CoRR
Xiaodan Zhang, Sandeep Vemulapalli, Nabasmita Talukdar, Sumyeong Ahn, Jiankun Wang, Han Meng, Sardar Mehtab Bin Murtaza, Aakash Ajay Dave, Dmitry Leshchiner, Dimitri F. Joseph, Martin Witteveen-Lane, Dave Chesla, Jiayu Zhou, Bin Chen
2023 conf
ICBASE
Zhengzhong Gao, Minghang Yu, Zhenhuan You, Han Meng, Xiucheng Yin
2023 conf
ICNC-FSKD
Lili Liang, Di Miao, Han Meng
2023 J jnl
Expert Syst. Appl.
Yue Pan, Izhar Ahmed Khan, Han Meng
2022 B conf
PIMRC
Han Meng, Lingyi Han, Lu Hou
2022 B conf
ICALT
Yunxin Geng, Han Meng, Junyi Dou
2022 B conf
SMC
Han Meng, Christian Wagner, Isaac Triguero
2022 A* conf
KDD
Mengying Sun, Jing Xing, Han Meng, Huijun Wang, Bin Chen, Jiayu Zhou
2022 conf
ICCSIE
Han Meng
2022 J jnl
CoRR
Han Meng, Yuexing Peng, Wenbo Wang, Peng Cheng, Yonghui Li, Wei Xiang
2022 J jnl
IEEE Trans. Aerosp. Electron. Syst.
Han Meng, Yuexing Peng, Wenbo Wang, Peng Cheng, Yonghui Li, Wei Xiang
2021 J jnl
J. Ambient Intell. Humaniz. Comput.
Yue Pan, Dechang Pi, Izhar Ahmed Khan, Zaheer Ullah Khan, Junfu Chen, Han Meng
2021 J jnl
Neural Comput. Appl.
Yue Pan, Dechang Pi, Junfu Chen, Han Meng
2018 J jnl
计算机科学
Han Meng, Ji Wu, Jinghui Hu, Chao Liu, Haiyan Yang, Xinying Sun
2018 J jnl
计算机科学
Jinghui Hu, Ji Wu, Han Meng, Chao Liu, Haiyan Yang
1997 J jnl
Fuzzy Sets Syst.
Han Meng, Guangwu Meng
redb/extractors/macho_extractors/macho_exports.py
← Index redb/extractors/macho_extractors/macho_exports.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
from redb.models.dataclasses import MachOExport


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

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

    def _extract_exports(self, arch_name=None):
        """Extract export information from the MachO binary for a specific architecture."""
        self.log.debug(inspect.currentframe().f_code.co_name)

        if not self.macho:
            return None

        try:
            # Get exported symbols using new API for specific architecture
            exported_symbols = self.macho.get_exported_symbols(arch=arch_name)

            # Extract all exported symbols (may be empty for some binaries)
            # Handle None or empty dict
            if not exported_symbols:
                exported_symbols = {}
            all_symbols = []
            for dylib_name, symbols in exported_symbols.items():
                # Process symbol names
                for symbol in symbols:
                    if isinstance(symbol, bytes):
                        symbol = symbol.decode('utf-8', errors='replace')
                    all_symbols.append(symbol)

            # Create export dataclass
            macho_export = MachOExport(
                macho_exports_total=len(all_symbols),
                macho_export_symbols=all_symbols  # Empty list is fine, but None is not allowed for Array type
            )

            return macho_export

        except Exception as e:
            self.log.error(f"Error extracting MachO exports for arch {arch_name}: {e}")
            return None

    def extract(self):
        self.log.debug(inspect.currentframe().f_code.co_name)
        try:
            # Get architectures (macho is already parsed in base class)
            architectures = self.macho.get_architectures()
            if len(architectures) > 1:
                # FAT binary - return list of exports for each architecture
                results = []
                for arch_name in architectures:
                    exports = self._extract_exports(arch_name)
                    if exports:
                        exports.arch_identifier = arch_name
                        results.append(exports)
                return results
            else:
                # Single architecture - return single result
                return self._extract_exports(architectures[0] if architectures else None)
        except Exception as e:
            self.log.error(f"Error extracting MachO exports: {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 exports for this architecture
                macho_export = self._extract_exports(arch_name)
                if not macho_export:
                    continue

                data.append([
                    arch_sha256,                          # sha256 (arch-specific)
                    macho_export.macho_exports_total,     # macho_exports_total
                    macho_export.macho_export_symbols,    # macho_export_symbols (keep as array!)
                    current_time,                         # analysis_date
                ])

            column_names = [
                'sha256',
                'macho_exports_total', 'macho_export_symbols',
                'analysis_date'
            ]

            if not data:
                return None

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

            return (data, column_names, column_type_names)

        return None

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