Weipeng Hu

45 papers A* 2B 1Journal 42
YearRankTypeTitle / Venue / Authors
2026 J jnl
Neurocomputing
Jianhui Li, Weipeng Hu, Xingyue Wang, Jiun Tian Hoe, Ping Hu, Xudong Jiang, Yap-Peng Tan
2026 J jnl
IEEE Trans. Image Process.
Runzhong Zhang, Fengrui Tian, Yueqi Duan, Chen Cai, Ziwei Wang, Weipeng Hu, Peijun Bao, Yang Chen, Suchen Wang, Yap-Peng Tan
2026 J jnl
Inf. Fusion
Xingyue Wang, Weipeng Hu, Jiun Tian Hoe, Jianhui Li, Ping Hu, Yap-Peng Tan
2025 J jnl
Int. J. Bifurc. Chaos
Zhengqi Han, Songmei Han, Weiping Wang, Weipeng Hu, Zhijun Qiao
2025 J jnl
CoRR
Shuai Shen, Wanhua Li, Yunpeng Zhang, Weipeng Hu, Yap-Peng Tan
2025 J jnl
IEEE Trans. Circuits Syst. Video Technol.
Runzhong Zhang, Yueqi Duan, Yang Chen, Weipeng Hu, Chen Cai, Suchen Wang, Yap-Peng Tan
2025 J jnl
IEEE Trans. Pattern Anal. Mach. Intell.
Weipeng Hu, Jiun Tian Hoe, Jianhui Li, Haifeng Hu, Xudong Jiang, Yap-Peng Tan
2025 J jnl
IEEE Trans. Neural Networks Learn. Syst.
Yiming Yang, Weipeng Hu, Qiaolin He, Haifeng Hu
2025 A* conf
ACM Multimedia
Ronghao Lin, Shuai Shen, Weipeng Hu, Qiaolin He, Aolin Xiong, Li Huang, Haifeng Hu, Yap-Peng Tan
2025 J jnl
CoRR
Ronghao Lin, Shuai Shen, Weipeng Hu, Qiaolin He, Aolin Xiong, Li Huang, Haifeng Hu, Yap-Peng Tan
2025 J jnl
CoRR
Jiun Tian Hoe, Weipeng Hu, Wei Zhou, Chao Xie, Ziwei Wang, Chee Seng Chan, Xudong Jiang, Yap-Peng Tan
2025 J jnl
Inf. Fusion
Weipeng Hu, Jiun Tian Hoe, Runzhong Zhang, Yiming Yang, Haifeng Hu, Yap-Peng Tan
2025 J jnl
IEEE Trans. Inf. Forensics Secur.
Yiming Yang, Weipeng Hu, Haifeng Hu
2025 J jnl
IEEE Trans. Image Process.
Chao Xie, Linfeng Fei, Huanjie Tao, Yaocong Hu, Wei Zhou, Jiun Tian Hoe, Weipeng Hu, Yap-Peng Tan
2025 J jnl
IEEE Trans. Multim.
Wei Zhou, Kang Lin, Weipeng Hu, Chao Xie, Tao Su, Haifeng Hu, Yap-Peng Tan
2024 J jnl
CoRR
Yiming Yang, Weipeng Hu, Haifeng Hu
2024 A* conf
CVPR
Jiun Tian Hoe, Xudong Jiang, Chee Seng Chan, Yap-Peng Tan, Weipeng Hu
2024 J jnl
IEEE Trans. Image Process.
Weipeng Hu, Yiming Yang, Haifeng Hu
2024 J jnl
ACM Trans. Multim. Comput. Commun. Appl.
Yiming Yang, Weipeng Hu, Haifeng Hu
2024 J jnl
IEEE Trans. Inf. Forensics Secur.
Yiming Yang, Weipeng Hu, Haifeng Hu
2023 J jnl
CoRR
Jiun Tian Hoe, Xudong Jiang, Chee Seng Chan, Yap-Peng Tan, Weipeng Hu
2023 J jnl
Appl. Math. Lett.
Weipeng Hu, Zhengqi Han, Thomas J. Bridges, Zhijun Qiao
2023 J jnl
IEEE Trans. Circuits Syst. Video Technol.
Yiming Yang, Weipeng Hu, Haifeng Hu
2023 J jnl
IEEE Trans. Image Process.
Yiming Yang, Weipeng Hu, Haiqi Lin, Haifeng Hu
2022 J jnl
IEEE Trans. Circuits Syst. Video Technol.
Weipeng Hu, Bohong Liu, Haitang Zeng, Yanke Hou, Haifeng Hu
2022 J jnl
IEEE Trans. Inf. Forensics Secur.
Weipeng Hu, Haifeng Hu
2022 J jnl
IEEE Trans. Circuits Syst. Video Technol.
Weipeng Hu, Wenjun Yan, Haifeng Hu
2022 J jnl
Symmetry
Weipeng Hu, Tao Liu, Zhengqi Han
2022 J jnl
IEEE Trans. Circuits Syst. Video Technol.
Weipeng Hu, Haifeng Hu
2021 J jnl
IEEE Trans. Multim.
Weipeng Hu, Haifeng Hu
2021 J jnl
Int. J. Bifurc. Chaos
Zhen Wang, Weipeng Hu
2021 J jnl
IEEE Signal Process. Lett.
Weipeng Hu, Haifeng Hu
2021 J jnl
IEEE Trans. Inf. Forensics Secur.
Weipeng Hu, Haifeng Hu
2020 J jnl
IEEE Trans. Multim.
Weipeng Hu, Haifeng Hu
2020 J jnl
BMC Bioinform.
Yong Zhang, Yongsheng Chen, Huixin Xu, Junbin Fang, Zijian Zhao, Weipeng Hu, Xiaoqin Yang, Jia Ye, Yun Cheng, Jiayin Wang, Weiqiang Sun, Jian Wang, Huanming Yang, Jing Yan, Lin Fang
2020 J jnl
Appl. Math. Lett.
Weipeng Hu, Zhen Wang, Yunping Zhao, Zichen Deng
2020 J jnl
Commun. Nonlinear Sci. Numer. Simul.
Weipeng Hu, Chuanzeng Zhang, Zichen Deng
2019 J jnl
Comput. Vis. Image Underst.
Weipeng Hu, Haifeng Hu
2019 J jnl
Neural Process. Lett.
Weipeng Hu, Haifeng Hu
2019 J jnl
IEEE Access
Weipeng Hu, Haifeng Hu, Xinlong Lu
2019 J jnl
Entropy
Bei Liu, Shengyou Qian, Weipeng Hu
2017 J jnl
Commun. Nonlinear Sci. Numer. Simul.
Weipeng Hu, Zichen Deng, Tingting Yin
2016 B conf
ICIP
Jianquan Gu, Haifeng Hu, Haoxi Li, Weipeng Hu
2014 J jnl
Comput. Phys. Commun.
Weipeng Hu, Zichen Deng, Yu Zhang
2013 J jnl
J. Comput. Phys.
Weipeng Hu, Zichen Deng, Songmei Han, Wenrong Zhang
redb/extractors/decompiler/bninja/similarity/minhasher.py
← Index redb/extractors/decompiler/bninja/similarity/minhasher.py python
import logging
import random
from enum import Enum

from ..analysis.medium_level_normalization import MediumLevelNormalization

try:
    from .minhashcustom import MinHashCustom
    from ..analysis.low_level_normalization import LowLevelNormalization
except ImportError:
    # Fallback to absolute imports (for multiprocessing spawned processes)
    from redb.extractors.decompiler.bninja.similarity.minhashcustom import MinHashCustom
    from redb.extractors.decompiler.bninja.analysis.low_level_normalization import LowLevelNormalization

## Values for this configuration were extracted from https://github.com/danielplohmann/mcrit/blob/main/mcrit/config/MinHashConfig.py#L10
# Length in number of Shingles of which a minhash consists
# this value represents the length of sha256sum hash truncated
MINHASH_SIGNATURE_LENGTH: int = 64
# Number of bits per signature element (1-32 bits)
MINHASH_SIGNATURE_BITS: int = 8


class TokenKind(Enum):
    LLIL = "llil"
    TYPED_LLIL = "typed_llil"
    MLIL = "mlil"
    TYPED_MLIL = "typed_mlil"


class MinHasher:
    # stick to the default method
    MINHASH_STRATEGY_HASH_ALL = 1

    def __init__(self, seed, il_function, kind: TokenKind = TokenKind.LLIL):
        self._minhash_seeds = []
        self.il_func = il_function
        self.kind = kind
        self._minhash_permutation = []
        self._signature_segments = []
        self._initMinhashing(seed)

    def _initMinhashing(self, MINHASH_SEED=None):
        random.seed(MINHASH_SEED)
        # init sequence of seeds
        self._minhash_seeds = [
            random.randint(0, MinHashCustom.getHashMax()) for _ in range(MINHASH_SIGNATURE_LENGTH)
        ]

    def make_ngrams(self, tokens, n=3):
        """Take the ngrams of the IL we try to pass into the functions"""
        return [tuple(tokens[i:i+n]) for i in range(len(tokens) - n + 1)]

    def _extract_tokens(self):
        """Extract the IL tokens from the IL function, picking the right
        normalizer (LLIL/MLIL) and the right normalization mode
        (skeleton/typed) based on self.kind."""
        if self.kind in (TokenKind.LLIL, TokenKind.TYPED_LLIL):
            normalizer = LowLevelNormalization()
        elif self.kind in (TokenKind.MLIL, TokenKind.TYPED_MLIL):
            normalizer = MediumLevelNormalization()
        else:
            raise ValueError(f"Unsupported token kind: {self.kind}")

        # typed variants include operand type info, skeleton variants don't
        if self.kind in (TokenKind.TYPED_LLIL, TokenKind.TYPED_MLIL):
            normalize = normalizer.normalize_instr_with_operands
        else:
            normalize = normalizer.normalize_instruction_all_levels

        instructions = []
        for basic_block in self.il_func.basic_blocks:
            for il in basic_block:
                instructions.append(normalize(il))

        return instructions

    def calculateMinHash(self):
        """Calculate hash function every time, then take minimum shingle per shingler"""
        minhash_result = MinHashCustom(minhash_bits=MINHASH_SIGNATURE_BITS)
        minhash_signature = []

        tokens = self._extract_tokens()
        shingles = self.make_ngrams(tokens, n=3)

        # Functions with fewer than 3 IL instructions can't produce n-grams
        # Return empty minhash for such small functions (thunks, stubs, etc.)
        # Triggered by 39d8ad95b0323c37bd3134ab93ac4af44c66a1a8443a41c1ac02cec19bb2816a
        if not shingles:
            return []

        # Generate the MinHash
        for seed in self._minhash_seeds:
            hashed_shingles = [
                self.shingle_hash(shingle, seed) for shingle in shingles
            ]
            min_value = min(hashed_shingles)

            if MINHASH_SIGNATURE_BITS < 32:
                min_value %= (2 ** MINHASH_SIGNATURE_BITS)

            minhash_signature.append(min_value)

        minhash_result.setMinHash(minhash_signature)
        return minhash_result.getMinHashInt()

    def shingle_hash(self, shingle, hash_seed=0):
        """Produce a single 32bit UINT hash for a given shingle"""
        return MinHashCustom.hashData(shingle, hash_seed)