Haizhou Wang

37 papers A* 2B 3C 1Journal 25Unranked 6
YearRankTypeTitle / Venue / Authors
2026 J jnl
IEEE Trans. Comput. Aided Des. Integr. Circuits Syst.
Haizhou Wang, Guobing Zou, Kun Cao, Yangguang Cui, Tongquan Wei, Shiyan Hu
2026 J jnl
CoRR
Mohammad Shamim Ahsan, Haizhou Wang, Venkateswara Reddy Motakatla, Minghui Zhu, Peng Liu
2026 J jnl
IEEE Trans. Dependable Secur. Comput.
Zhilong Wang, Haizhou Wang, Hong Hu, Peng Liu
2025 J jnl
IEEE Trans. Instrum. Meas.
Yu Fang, Junhui Zhang, Pengpeng Dong, Haizhou Wang, Bing Xu, Chao Zhang
2025 J jnl
Entropy
Ze Liu, Zerui Shao, Haizhou Wang, Beibei Li
2025 J jnl
Autom. Softw. Eng.
Xushu Dai, Nanqing Luo, Haizhou Wang, Zhilong Wang, Chen Cao, Peng Liu
2025 B conf
TrustCom
Nanqing Luo, Haizhou Wang, Zhilong Wang, Lan Zhang, Ping Chen, Peng Liu
2025 J jnl
CoRR
Zisong Wang, Xuanyu Wang, Hang Chen, Haizhou Wang, Yuxin Chen, Yihang Xu, Yunhe Yuan, Lihuan Luo, Xitong Ling, Xiaoping Liu
2025 A* conf
CHI
Si Chen, Jingyi Xie, Ge Wang, Haizhou Wang, Haocong Cheng, Yun Huang
2025 J jnl
IEEE Internet Things J.
Jiamei Li, Haizhou Wang, Kun Cao, Yangguang Cui, Tong Liu, Zhiquan Liu
2025 B conf
SMC
Jia Chen, Haizhou Wang
2025 A* conf
ACM Multimedia
Haizhou Wang, Guobing Zou, Fei Xu, Yangguang Cui, Tongquan Wei
2025 conf
ICANN (2)
Yifan Wang, Haizhou Wang
2024 J jnl
CoRR
Haizhou Wang, Zhilong Wang, Peng Liu
2024 J jnl
CoRR
Si Chen, Jingyi Xie, Ge Wang, Haizhou Wang, Haocong Cheng, Yun Huang
2024 J jnl
CoRR
Zhilong Wang, Haizhou Wang, Nanqing Luo, Lan Zhang, Xiaoyan Sun, Yebo Cao, Peng Liu
2024 J jnl
CoRR
Haizhou Wang, Nanqing Luo, Peng Liu
2023 J jnl
IEEE Internet Things J.
Liying Li, Yinghui Wang, Haizhou Wang, Shiyan Hu, Tongquan Wei
2023 J jnl
J. Syst. Archit.
Haizhou Wang, Liying Li, Yangguang Cui, Nuo Wang, Fuke Shen, Tongquan Wei
2023 J jnl
CoRR
Yuxing Yang, Junhao Zhao, Siyi Wang, Xiangyu Min, Pengchao Wang, Haizhou Wang
2023 conf
KSEM (2)
Zijian Zhou, Shuoyu Hu, Kai Yang, Haizhou Wang
2023 J jnl
Cybersecur.
Haizhou Wang, Anoop Singhal, Peng Liu
2022 J jnl
Future Gener. Comput. Syst.
Liying Li, Haizhou Wang, Youyang Wang, Mingsong Chen, Tongquan Wei
2022 conf
WCSP
Lei Wang, Haizhou Wang, Xue Jiang, Jingwu Cui, Baoyu Zheng
2022 J jnl
Genom. Proteom. Bioinform.
Feng Xu, Yifan Wang, Yunchao Ling, Chenfen Zhou, Haizhou Wang, Andrew E. Teschendorff, Yi Zhao, Haitao Zhao, Yungang He, Guoqing Zhang, Zhen Yang
2021 J jnl
CoRR
Zhilong Wang, Haizhou Wang, Hong Hu, Peng Liu
2021 J jnl
IEEE Internet Things J.
Qixun Zhang, Haizhou Wang, Zhiyong Feng, Zhu Han
2021 J jnl
CoRR
Haizhou Wang, Peng Liu
2021 C conf
ICCC
Qixun Zhang, Haizhou Wang, Zhiyong Feng
2020 J jnl
J. Comput. Secur.
Xusheng Li, Zhisheng Hu, Haizhou Wang, Yiwei Fu, Ping Chen, Minghui Zhu, Peng Liu
2020 conf
EMBC
Haizhou Wang, Hui Yang
2020 J jnl
Cybersecur.
Yoon-Ho Choi, Peng Liu, Zitong Shang, Haizhou Wang, Zhilong Wang, Lan Zhang, Junwei Zhou, Qingtian Zou
2019 J jnl
CoRR
Yoon-Ho Choi, Peng Liu, Zitong Shang, Haizhou Wang, Zhilong Wang, Lan Zhang, Junwei Zhou, Qingtian Zou
2017 B conf
GLOBECOM
Bo Chen, Liang Liu, Haizhou Wang, Huadong Ma
2016 conf
MMVR
Ryan A. Beasley, Haizhou Wang, Harald Scheirich, Wesley D. Turner, Gughan Sathyaseelan, Paul Novotny, Julien Lenoir, Timothy P. Kelliher
2013 conf
BIBM
Haiyun Chen, Yingyu Hu, Haizhou Wang, Zhe Li, Qiang Lin
2011 J jnl
R J.
Haizhou Wang, Mingzhou Song
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)