Wei Zhang

65 papers A 2B 12C 7Misc 5Journal 36Unranked 2
YearRankTypeTitle / Venue / Authors
2026 J jnl
IEEE Trans. Image Process.
Wanhao Ma, Wei Zhang, Shuai Wan, Fuzheng Yang
2026 J jnl
IEEE Trans. Circuits Syst. Video Technol.
Xiao Huo, Wei Zhang, Fuzheng Yang
2025 B conf
DCC
Anthony Trioux, Wei Zhang, Wenjie Wu, Yusong Gao, Giuseppe Valenzise, Fuzheng Yang
2025 B conf
DCC
Xiao Huo, Wei Zhang, Fuzheng Yang
2025 J jnl
Expert Syst. Appl.
Yifan Wang, Fei Yang, Luka Murn, Juil Sock, Marc Górriz Blanch, Shuai Wan, Wei Zhang, Fuzheng Yang, Luis Herranz
2025 J jnl
IEEE Signal Process. Lett.
Yimo Cao, Wei Zhang, Xiao Huo, Fuzheng Yang
2025 A conf
ICME
Anthony Trioux, Wei Zhang, Giuseppe Valenzise, Fuzheng Yang
2025 B conf
DCC
Yueru Chen, Wei Zhang, Dingquan Li, Jing Wang, Ge Li
2025 J jnl
CoRR
Yueru Chen, Wei Zhang, Dingquan Li, Jing Wang, Ge Li
2025 Misc conf
ICASSP
Ren Huang, Wei Zhang, Jiangxue Han, Fuzheng Yang
2025 J jnl
IEEE Signal Process. Lett.
Wei Zhang, Pengpeng Yu, Yueru Chen, Dingquan Li, Wen Gao
2025 J jnl
IEEE Geosci. Remote. Sens. Lett.
Wei Zhang, Jiayao Xu, Yueru Chen, Dingquan Li, Wen Gao
2025 J jnl
CoRR
Yuanchao Yue, Zhengxin Li, Wei Zhang, Hui Yuan
2025 J jnl
IEEE Trans. Circuits Syst. Video Technol.
Zehan Wang, Yuxuan Wei, Hui Yuan, Wei Zhang, Peng Li
2025 J jnl
CoRR
Wanhao Ma, Wei Zhang, Shuai Wan, Fuzheng Yang
2025 B conf
DCC
Youguang Yu, Wei Zhang, Xiaoliang Lu, Fuzheng Yang
2025 J jnl
IEEE Signal Process. Lett.
Yi Zhang, Wei Zhang, Wanhao Ma, Fuzheng Yang
2024 J jnl
IEEE Trans. Consumer Electron.
Jinrui Xing, Hui Yuan, Wei Zhang, Tian Guo, Chen Chen
2024 B conf
DCC
Yifan Wang, Shuyun Yang, Wei Zhang, Fuzheng Yang
2024 J jnl
IEEE Signal Process. Lett.
Yifan Wang, Shixuan Feng, Wei Zhang, Kai Li, Fuzheng Yang
2024 C conf
ISCAS
Shidi Hao, Shuai Wan, Tengya Tian, Wei Zhang, Fuzheng Yang
2024 J jnl
IEEE J. Sel. Top. Appl. Earth Obs. Remote. Sens.
Wei Zhang, Dingquan Li, Haihua Zhang, Pengpeng Yu, Wen Gao
2024 B conf
DCC
Wei Zhang, Dingquan Li, Ge Li, Wen Gao
2024 C conf
PCS
Wei Zhang, Fuzheng Yang, Yingzhan Xu, Marius Preda
2024 J jnl
IEEE Signal Process. Lett.
Yifan Wang, Shixuan Feng, Wei Zhang, Fuzheng Yang
2023 J jnl
IEEE Trans. Circuits Syst. Video Technol.
Youguang Yu, Wei Zhang, Ge Li, Fuzheng Yang
2023 Misc conf
ICASSP
Yifan Wang, Luka Murn, Luis Herranz, Fei Yang, Marta Mrak, Wei Zhang, Shuai Wan, Marc Górriz Blanch
2023 J jnl
CoRR
Wei Zhang, Dingquan Li, Ge Li, Wen Gao
2023 J jnl
IEEE Trans. Multim.
Youguang Yu, Wei Zhang, Fuzheng Yang, Ge Li
2023 J jnl
J. Vis. Commun. Image Represent.
Yifan Wang, Fuzheng Yang, Ying Chen, Wei Zhang
2022 A conf
ICME
Wei Zhang, Youguang Yu, Fuzheng Yang
2022 C conf
VCIP
Youguang Yu, Wei Zhang, Fuzheng Yang
2022 B conf
ICIP
Tian Chen, Wei Zhang, Fuzheng Yang, Jing Wang, Ge Li
2022 B conf
ICIP
Jingyun Lu, Wei Zhang, Lihui Yang, Fuzheng Yang
2021 J jnl
IEEE Trans. Circuits Syst. Video Technol.
Wenjie Zou, Wei Zhang, Fuzheng Yang
2021 J jnl
IEEE Trans. Circuits Syst. Video Technol.
Jiarun Song, Fuzheng Yang, Wei Zhang, Zhibin Ma
2020 J jnl
IEEE Trans. Multim.
Jiarun Song, Fuzheng Yang, Wei Zhang, Wenjie Zou, Yuqun Fan, Peiyun Di
2020 J jnl
CoRR
Dongyang Jin, Saiping Zhang, Xiao Huo, Wei Zhang, Fuzheng Yang
2020 conf
ICME Workshops
Lei Wei, Shuai Wan, Zexing Sun, Xiaobin Ding, Wei Zhang
2019 C conf
PCS
Sujun Zhang, Wei Zhang, Fuzheng Yang, Junyan Huo
2019 J jnl
IEEE Access
Wenjie Zou, Wei Zhang, Jiarun Song, Fuzheng Yang, Patrick Le Callet
2019 J jnl
IEEE Access
Jiarun Song, Fuzheng Yang, Wei Zhang
2019 B conf
QoMEX
Lucie Lévêque, Wei Zhang, Hantao Liu
2019 J jnl
Signal Process. Image Commun.
Wei Zhang, Wenjie Zou, Fuzheng Yang
2019 B conf
ICIP
Lucie Leveque, Wei Zhang, Hantao Liu
2019 Misc conf
ICASSP
Wei Zhang, Wenjie Zou, Fuzheng Yang, Lucie Lévêque, Hantao Liu
2019 Misc conf
ICASSP
Wei Zhang, Wenjie Zou, Fuzheng Yang
2018 J jnl
IEEE Access
Wenjie Zou, Fuzheng Yang, Wei Zhang, Yi Li, Haoping Yu
2018 J jnl
IEEE Trans. Circuits Syst. Video Technol.
Wei Zhang, Ralph R. Martin, Hantao Liu
2018 J jnl
IEEE Trans. Multim.
Wenjie Zou, Fuzheng Yang, Jiarun Song, Shuai Wan, Wei Zhang, Hong Ren Wu
2018 J jnl
IEEE Access
Youguang Yu, Fuzheng Yang, Hantao Liu, Wei Zhang
2017 J jnl
Neurocomputing
Wei Zhang, Hantao Liu
2017 J jnl
IEEE Trans. Image Process.
Wei Zhang, Hantao Liu
2017 J jnl
IEEE Access
Lucie Leveque, Wei Zhang, Christine Cavaro-Ménard, Patrick Le Callet, Hantao Liu
2017 J jnl
IEEE Access
Lucie Leveque, Wei Zhang, Pamela Parker, Hantao Liu
2017 J jnl
IEEE Trans. Image Process.
Wei Zhang, Hantao Liu
2017
Wei Zhang
2016 Misc conf
ICASSP
Wei Zhang, Yi Tian, Xiaojie Zha, Hantao Liu
2016 C conf
MMSP
Wei Zhang, Hantao Liu
2016 C conf
MMSP
Wei Zhang, Hantao Liu
2016 J jnl
IEEE Trans. Neural Networks Learn. Syst.
Wei Zhang, Ali Borji, Zhou Wang, Patrick Le Callet, Hantao Liu
2015 conf
Human Vision and Electronic Imaging
Ulrich Engelke, Wei Zhang, Patrick Le Callet, Hantao Liu
2015 B conf
ICIP
Juan Vicente Talens-Noguera, Wei Zhang, Hantao Liu
2015 B conf
ICIP
Wei Zhang, Juan Vicente Talens-Noguera, Hantao Liu
2014 C conf
VCIP
Wei Zhang, Ali Borji, Fuzheng Yang, Ping Jiang, Hantao Liu
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"