Wei Zhang

90 papers B 1C 2Journal 81Unranked 6
YearRankTypeTitle / Venue / Authors
2026 J jnl
IEEE Commun. Lett.
Hao Wang, Zhuolun Wu, Wei Zhang, Yihan Wang, Yanyan Liu
2026 J jnl
IEEE Wirel. Commun. Lett.
Wenbo Liu, Zhuolun Wu, Wei Zhang, Jianhan Zhao, Yaofeng Jiang, Yanyan Liu
2026 J jnl
Pattern Recognit.
Yimeng Fan, Changsong Liu, Mingyang Li, Yuzhou Dai, Yanyan Liu, Wei Zhang
2026 J jnl
IEEE Signal Process. Lett.
Zhuolun Wu, Yushan Zhang, Wei Zhang, Yanyan Liu
2026 J jnl
Expert Syst. Appl.
Dongze Liu, Yimeng Fan, Wenrui Lu, Changsong Liu, Wei Zhang
2025 J jnl
IEEE Trans. Very Large Scale Integr. Syst.
Yuzhou Dai, Wei Zhang, Lin Shi, Qitao Li, Zhuolun Wu, Yanyan Liu
2025 J jnl
IEEE Signal Process. Lett.
Zhuolun Wu, Wei Zhang, Yihan Wang, Yushan Zhang, Yanyan Liu
2025 J jnl
IEEE Trans. Commun.
Zhuolun Wu, Wei Zhang, Yihan Wang, Hao Wang, Yanyan Liu
2025 J jnl
Neurocomputing
Changsong Liu, Wei Zhang, Yanyan Liu, Mingyang Li, Wenlin Li, Yimeng Fan, Xiangnan Bai, Liang Zhang
2025 J jnl
IEEE Signal Process. Lett.
Yanyan Chang, Wei Zhang, Zhuolun Wu, Yanyan Liu
2025 J jnl
IEEE Trans. Very Large Scale Integr. Syst.
Zhihao Zhou, Wei Zhang, Xinyi Guo, Jianhan Zhao, Yanyan Liu
2025 J jnl
Knowl. Based Syst.
Changsong Liu, Yimeng Fan, Mingyang Li, Wei Zhang, Yanyan Liu, Yuming Li, Wenlin Li, Liang Zhang
2025 J jnl
Medical Biol. Eng. Comput.
Wenrui Lu, Wei Zhang, Yanyan Liu, Lingyun Xu, Yimeng Fan, Zhaowei Meng, Qiang Jia
2024 J jnl
Microelectron. J.
Jie Wang, Dongning Hao, Wei Zhang, Xiubo Liu, Zhangyong Li, Yanyan Liu
2024 J jnl
Microelectron. J.
Ni Wang, Yu Liang, Wei Zhang, Tingting Wu, Dongning Hao
2024 J jnl
IEEE Trans. Commun.
Jianhan Zhao, Wei Zhang, Yanyan Liu
2024 J jnl
Eng. Appl. Artif. Intell.
Rudong Jing, Wei Zhang, Yanyan Liu, Wenlin Li, Yuming Li, Changsong Liu
2024 J jnl
IEEE Commun. Lett.
Zhuolun Wu, Wei Zhang, Yihan Wang, Yanyan Liu
2024 J jnl
IEEE Trans. Commun.
Yanyan Chang, Wei Zhang, Hao Wang, Yanyan Liu
2024 J jnl
IEEE Commun. Lett.
Yihan Wang, Wei Zhang, Lina Shi, Yanyan Chang, Yanyan Liu
2024 J jnl
CoRR
Changsong Liu, Wei Zhang, Yanyan Liu, Mingyang Li, Wenlin Li, Yimeng Fan, Xiangnan Bai, Liang Zhangd
2024 J jnl
Inf. Process. Manag.
Rudong Jing, Wei Zhang, Yuzhuo Li, Wenlin Li, Yanyan Liu
2024 B conf
ITW
Jianhan Zhao, Wei Zhang, Yanyan Liu
2024 J jnl
Expert Syst. Appl.
Rudong Jing, Wei Zhang, Yuzhuo Li, Wenlin Li, Yanyan Liu
2024 conf
CISP-BMEI
Wenlin Li, Wei Zhang, Yanyan Liu, Changsong Liu, Rudong Jing, Liang Zhang
2024 J jnl
Appl. Intell.
Changsong Liu, Wei Zhang, Yanyan Liu, Yuming Li, Rudong Jing
2024 J jnl
CoRR
Changsong Liu, Wei Zhang, Yanyan Liu, Yimeng Fan, Mingyang Li, Wenlin Li
2024 J jnl
IEICE Trans. Fundam. Electron. Commun. Comput. Sci.
Yanyan Chang, Wei Zhang, Hao Wang, Lina Shi, Yanyan Liu
2023 J jnl
IEEE Trans. Very Large Scale Integr. Syst.
Zhuolun Wu, Wei Zhang, Peng Jing, Yanyan Liu
2023 J jnl
IEEE Signal Process. Lett.
Xiaoling Liu, Wei Zhang, Yanyan Chang, Yanyan Liu
2023 J jnl
CoRR
Jianhan Zhao, Wei Zhang, Yanyan Liu
2023 J jnl
IEEE Commun. Lett.
Lina Shi, Wei Zhang, Yanyan Chang, Hao Wang, Yanyan Liu
2023 J jnl
IEEE Trans. Circuits Syst. II Express Briefs
Xiubo Liu, Wei Zhang, Dongning Hao, Yanyan Liu
2023 J jnl
BMC Medical Imaging
Chengyu Song, Shan Zhu, Yanyan Liu, Wei Zhang, Zhi Wang, Wangxiao Li, Zhenye Sun, Peng Zhao, Shengzhang Tian
2023 J jnl
BMC Medical Imaging
Ruyi Zhang, Peng Wang, Yanzhu Bian, Yan Fan, Jianming Li, Xuehui Liu, Jie Shen, Yujing Hu, Xianghe Liao, He Wang, Chengyu Song, Wangxiao Li, Xiaojie Wang, Momo Sun, Jianping Zhang, Miao Wang, Shen Wang, Yiming Shen, Xuemei Zhang, Qiang Jia, Jian Tan, Ning Li, Sen Wang, Lingyun Xu, Weiming Wu, Wei Zhang, Zhaowei Meng
2023 J jnl
IEEE Commun. Lett.
Xinyi Guo, Wei Zhang, Hao Wang, Jianhan Zhao, Yanyan Liu
2023 J jnl
IEEE Commun. Lett.
Yanyan Chang, Wei Zhang, Dazhou Wei, Hao Wang, Yanyan Liu
2023 J jnl
IEEE Trans. Very Large Scale Integr. Syst.
Peng Jing, Wei Zhang, Long Yan, Yanyan Liu
2022 J jnl
Neurocomputing
Yuming Li, Wei Zhang, Yanyan Liu, Xiaorui Shao
2022 J jnl
Appl. Intell.
Yuming Li, Wei Zhang, Yanyan Liu, Yao Jin
2022 J jnl
Multim. Tools Appl.
Rong Zhang, Wei Zhang, Yanyan Liu, Pu Li, Jianhan Zhao
2022 J jnl
Eng. Appl. Artif. Intell.
Yuming Li, Wei Zhang, Yanyan Liu, Rudong Jing, Changsong Liu
2022 J jnl
Entropy
Hao Wang, Wei Zhang, Yizhe Jing, Yanyan Chang, Yanyan Liu
2022 J jnl
IEEE Commun. Lett.
Yizhe Jing, Wei Zhang, Hao Wang, Yanyan Chang, Yanyan Liu
2022 J jnl
Entropy
Hao Wang, Wei Zhang, Yanyan Chang, Jiajing Gao, Yanyan Liu
2022 J jnl
Expert Syst. Appl.
Yongjie Wang, Wei Zhang, Dongxiao Huang, Yanyan Liu, Jianghua Zhu
2021 J jnl
IEEE Commun. Lett.
Jianhan Zhao, Wei Zhang, Yanyan Liu
2021 J jnl
IEEE Wirel. Commun. Lett.
Jianhan Zhao, Wei Zhang, Yanyan Liu, Jiajing Gao, Rong Zhang
2021 J jnl
IEEE Commun. Lett.
Yanyan Chang, Wei Zhang, Hao Wang, Yanyan Liu
2021 J jnl
IEEE Trans. Very Large Scale Integr. Syst.
Jiajing Gao, Wei Zhang, Yanyan Liu, Hao Wang, Jianhan Zhao
2021 conf
ICCCS
Hao Wang, Wei Zhang, Yanyan Liu
2021 J jnl
Signal Process. Image Commun.
Yongjie Wang, Wei Zhang, Dongxiao Huang, Yanyan Liu
2021 J jnl
IEEE Commun. Lett.
Hao Wang, Wei Zhang, Xiangyu An, Yanyan Liu
2020 J jnl
IET Image Process.
Wei Zhang, Yongjie Wang, Yanyan Liu, Jianghua Zhu
2020 J jnl
IEEE Commun. Lett.
Hao Wang, Wei Zhang, Yu Liang, Yanyan Liu
2020 J jnl
IEEE Commun. Lett.
Wei Zhang, Shuming Zou, Yanyan Liu
2020 J jnl
Neurocomputing
Yongjie Wang, Wei Zhang, Yanyan Liu, Jianghua Zhu
2020 J jnl
IET Image Process.
Yongjie Wang, Wei Zhang, Yanyan Liu
2020 J jnl
IET Image Process.
Yongjie Wang, Wei Zhang, Dongxiao Huang, Yanyan Liu, Jianghua Zhu
2020 J jnl
Neurocomputing
Yongjie Wang, Wei Zhang, Yanyan Liu, Jianghua Zhu
2019 J jnl
IET Image Process.
Weijia Mu, Yu Liang, Shiwei Xu, Wei Zhang, Yanyan Liu
2019 J jnl
IEEE Commun. Lett.
Wei Zhang, Shuya Wang, Haowen Luo, Yanyan Liu
2019 J jnl
IEEE Trans. Circuits Syst. II Express Briefs
Wei Lu, Yu Liang, Yanyan Liu, Zhibin Liang, Wei Zhang
2018 J jnl
Microelectron. J.
Youzhong Liu, Wei Zhang, Yanyan Liu
2017 J jnl
IEEE Trans. Very Large Scale Integr. Syst.
Haowen Luo, Wei Zhang, Yang Wang, Yan Hu, Yanyan Liu
2017 J jnl
IEEE Commun. Lett.
Yang Wang, Wei Zhang, Yanyan Liu, Lingyu Wang, Yu Liang
2017 J jnl
IEEE Commun. Lett.
Yanyan Liu, Zhibin Liang, Yang Wang, Wei Lu, Wei Zhang
2017 J jnl
IEEE Trans. Very Large Scale Integr. Syst.
Yufeng Tong, Wei Zhang, Yung-Cheng Ma, Yanyan Liu, Yu Liang, Tai Zhang, Haowen Luo
2017 J jnl
J. Signal Process. Syst.
Zhibin Liang, Wei Zhang
2017 J jnl
IET Image Process.
Changkun Wu, Wei Zhang, Qi Jia, Yanyan Liu
2017 J jnl
IET Commun.
Lingyu Wang, Wei Zhang, Yang Wang, Yan Hu, Yanyan Liu
2016 J jnl
J. Circuits Syst. Comput.
Wanhang Gao, Wei Zhang, Yanyan Liu
2016 J jnl
Frontiers Inf. Technol. Electron. Eng.
Xingru Peng, Wei Zhang, Yanyan Liu
2016 J jnl
IET Commun.
Wenjie Ji, Wei Zhang, Xingru Peng, Yanyan Liu
2015 conf
DSP
Wenjie Ji, Wei Zhang, Xingru Peng, Zhibin Liang
2015 J jnl
IET Commun.
Xuemei Li, Wei Zhang, Yanyan Liu
2015 conf
SoCC
Na Bao, Zhe Jiang, Zhiheng Qi, Wei Zhang
2015 J jnl
IEEE Commun. Lett.
Xingru Peng, Wei Zhang, Wenjie Ji, Zhibin Liang, Yanyan Liu
2014 J jnl
Microelectron. J.
Jian Zhang, Wei Zhang, Yanyan Liu
2014 J jnl
ACM Trans. Archit. Code Optim.
Zhibin Liang, Wei Zhang, Yung-Cheng Ma
2013 C conf
ISCAS
Wei Zhang, Jing Wang, Xinmiao Zhang
2013 J jnl
J. Circuits Syst. Comput.
Hao Wang, Wei Zhang, Yanyan Liu
2013 J jnl
IEEE Trans. Very Large Scale Integr. Syst.
Wei Zhang, Hao Wang, Boyang Pan
2012 J jnl
IEEE Trans. Circuits Syst. II Express Briefs
Wei Zhang, Zhe Jiang, Zhiyu Gao, Yanyan Liu
2012 J jnl
IEEE Trans. Circuits Syst. II Express Briefs
Xinmiao Zhang, Jiangli Zhu, Wei Zhang
2012 conf
APCCAS
Hao Wang, Wei Zhang, Jing Wang, Zhe Jiang
2012 conf
APCCAS
Wei Zhang, Xinmiao Zhang, Hao Wang
2012 J jnl
J. Signal Process. Syst.
Xinmiao Zhang, Jiangli Zhu, Wei Zhang
2012 C conf
ISCAS
Hao Wang, Wei Zhang, Boyang Pan
2010 J jnl
J. Circuits Syst. Comput.
Xuepo Ma, Wei Zhang, Yang Liu
redb/extractors/macho_extractors/macho_features.py
← Index redb/extractors/macho_extractors/macho_features.py python
import inspect
import json
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 MachO


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

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

    def _extract_macho_features_for_arch(self, arch_name):
        """Extract basic MachO features for a specific architecture."""
        self.log.debug(inspect.currentframe().f_code.co_name)

        if not self.macho:
            return None

        try:
            # Get general info using new API
            general_info = self.macho.get_general_info()
            if not general_info:
                return None

            # Get header info for this specific architecture
            header_raw = self.macho.get_macho_header(arch=arch_name)
            header_formatted = self.macho.get_macho_header(arch=arch_name, formatted=True)

            if not header_raw or not header_formatted:
                return None

            # Get entry point using new API
            entry_point = None
            try:
                entry_point_info = self.macho.get_entry_point(arch=arch_name)
                if entry_point_info:
                    if isinstance(entry_point_info, dict):
                        entry_point = entry_point_info.get('entryoff') or entry_point_info.get('entry_address')
                    else:
                        entry_point = entry_point_info
            except Exception as e:
                self.log.debug(f"No entry point found: {e}")

            # Get UUID using new API
            uuid = None
            try:
                uuid_info = self.macho.get_uuid(arch=arch_name)
                if uuid_info:
                    uuid = str(uuid_info)
            except Exception as e:
                self.log.debug(f"No UUID found: {e}")

            # Get version info using new API with formatting
            version_info = None
            version_info_str = None
            try:
                version_info = self.macho.get_version_info(arch=arch_name)
                version_info_str = self.macho.get_version_info(arch=arch_name, formatted=True)
            except Exception as e:
                self.log.debug(f"No version info found: {e}")

            # Get segments using new API
            segments = self.macho.get_segments(arch=arch_name)
            number_of_segments = len(segments) if segments else 0

            # Get dylib info using new API
            dylib_names = self.macho.get_dylib_names(arch=arch_name)
            number_of_dylibs = len(dylib_names) if dylib_names else 0

            # Count imports using new API
            imported_functions = self.macho.get_imported_functions(arch=arch_name)
            number_of_imports = sum(len(funcs) for funcs in imported_functions.values()) if imported_functions else 0

            # Count exports using new API
            exported_symbols = self.macho.get_exported_symbols(arch=arch_name)
            number_of_exports = sum(len(symbols) for symbols in exported_symbols.values()) if exported_symbols else 0

            # Get unique load command types using new API
            load_commands_set = self.macho.get_load_commands_set(arch=arch_name, formatted=True)
            if isinstance(load_commands_set, set):
                load_commands_set = sorted(list(load_commands_set))

            # Get architectures for listing purposes
            architectures = self.macho.get_architectures()

            # Determine binary properties
            is_64bit = header_raw.get('magic') in [0xFEEDFACF, 0xCFFAEDFE]  # MH_MAGIC_64, MH_CIGAM_64
            is_signed = self._is_signed()
            
            # Create MachO dataclass
            macho_features = MachO(
                # Raw values from new API
                magic=header_raw.get('magic', 0),
                cputype=header_raw.get('cputype', 0),
                cpusubtype=header_raw.get('cpusubtype', 0),
                filetype=header_raw.get('filetype', 0),
                ncmds=header_raw.get('ncmds', 0),
                sizeofcmds=header_raw.get('sizeofcmds', 0),
                flags=header_raw.get('flags', 0),
                architecture=header_raw.get('cputype', 0),  # Use cputype as architecture
                architectures=[arch_info.get('cputype', 0) for arch_info in [self.macho.get_macho_header(arch=arch) for arch in architectures] if arch_info],
                # Human-readable values from formatted API
                magic_str=header_formatted.get('magic', ''),
                cputype_str=header_formatted.get('cputype', ''),
                cpusubtype_str=header_formatted.get('cpusubtype', ''),
                filetype_str=header_formatted.get('filetype', ''),
                flags_str=header_formatted.get('flags', '').split(', ') if header_formatted.get('flags') else [],
                architecture_str=header_formatted.get('cputype', ''),
                architectures_str=[arch_info.get('cputype', '') for arch_info in [self.macho.get_macho_header(arch=arch, formatted=True) for arch in architectures] if arch_info],
                # Additional properties
                is_64bit=is_64bit,
                is_signed=is_signed,
                number_of_load_commands=header_raw.get('ncmds', 0),
                load_commands_set=load_commands_set,
                number_of_segments=number_of_segments,
                number_of_dylibs=number_of_dylibs,
                number_of_imports=number_of_imports,
                number_of_exports=number_of_exports,
                entry_point=entry_point,
                uuid=uuid,
                version_info=version_info,
                version_info_str=version_info_str
            )
            
            return macho_features
            
        except Exception as e:
            self.log.error(f"Error extracting MachO features: {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

            # For FAT binaries, return features for all architectures
            # For single arch, return just the single result
            if len(architectures) > 1:
                # FAT binary - return list of features for each architecture
                results = []
                for arch_name in architectures:
                    features = self._extract_macho_features_for_arch(arch_name)
                    if features:
                        # Add architecture identifier to the result
                        if hasattr(features, '__dict__'):
                            # If it's a dataclass, we can access its dict
                            features.arch_identifier = arch_name
                        results.append(features)
                return results
            else:
                # Single architecture - return single result
                return self._extract_macho_features_for_arch(architectures[0])
        except Exception as e:
            self.log.error(f"Error extracting MachO features: {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 __init__)
            try:
                architectures = self.macho.get_architectures()
            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:
                # Extract features for this specific architecture
                macho_features = self._extract_macho_features_for_arch(arch_name)
                if not macho_features:
                    continue

                # 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 hash for {arch_name}: {e}")
                    arch_sha256 = self.sha256

                # Architecture field (kept in features table for ORDER BY)
                architecture = macho_features.cputype    # Raw CPU type value

                data.append([
                    arch_sha256,                          # sha256 (architecture-specific)
                    architecture,                         # architecture (raw CPU type)
                    # Raw values
                    macho_features.magic,                 # magic
                    macho_features.cputype,               # cputype
                    macho_features.cpusubtype,            # cpusubtype
                    macho_features.filetype,              # filetype
                    macho_features.ncmds,                 # ncmds
                    macho_features.sizeofcmds,            # sizeofcmds
                    macho_features.flags,                 # flags
                    # Human-readable values
                    macho_features.magic_str,             # magic_str
                    macho_features.cputype_str,           # cputype_str
                    macho_features.cpusubtype_str,        # cpusubtype_str
                    macho_features.filetype_str,          # filetype_str
                    macho_features.flags_str,             # flags_str
                    # Other fields
                    macho_features.is_64bit,              # is_64bit
                    macho_features.is_signed,             # is_signed
                    macho_features.entry_point if macho_features.entry_point else None,           # entry_point
                    macho_features.uuid if macho_features.uuid else None,  # uuid
                    json.dumps(macho_features.version_info) if macho_features.version_info else "{}",  # version_info
                    json.dumps(macho_features.version_info_str) if macho_features.version_info_str else "{}",  # version_info_str
                    macho_features.load_commands_set,     # load_commands_set
                    macho_features.number_of_segments,    # number_of_segments
                    macho_features.number_of_dylibs,      # number_of_dylibs
                    macho_features.number_of_imports,     # number_of_imports
                    macho_features.number_of_exports,     # number_of_exports
                    current_time,                         # analysis_date
                ])

            column_names = [
                'sha256', 'architecture',
                # Raw values
                'magic', 'cputype', 'cpusubtype', 'filetype', 'ncmds', 'sizeofcmds', 'flags',
                # Human-readable values
                'magic_str', 'cputype_str', 'cpusubtype_str', 'filetype_str', 'flags_str',
                # Other fields
                'is_64bit', 'is_signed',
                'entry_point', 'uuid', 'version_info', 'version_info_str', 'load_commands_set',
                'number_of_segments', 'number_of_dylibs', 'number_of_imports', 'number_of_exports',
                'analysis_date'
            ]

            if not data:
                return None

            column_type_names = [
                'FixedString(64)', 'Nullable(UInt32)',
                # Raw values
                'UInt32', 'UInt32', 'UInt32', 'UInt32', 'UInt32', 'UInt32', 'UInt32',
                # Human-readable values
                'LowCardinality(String)', 'LowCardinality(String)', 'LowCardinality(String)', 'LowCardinality(String)', 'Array(LowCardinality(String))',
                # Other fields
                'UInt8', 'UInt8',
                'Nullable(UInt64)', 'Nullable(String)', 'JSON', 'JSON', 'Array(Nullable(String))',
                'UInt32', 'UInt32', 'UInt32', 'UInt32', 'DateTime64(3, \'UTC\')'
            ]

            return (data, column_names, column_type_names)
        
        return None

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