Haibo Chen

74 papers B 2C 1Journal 54Unranked 16
YearRankTypeTitle / Venue / Authors
2026 J jnl
J. Appl. Math. Comput.
Mubashir Hussain, Abdul Mateen, Hüseyin Budak, Asna Aslam, Haibo Chen
2026 J jnl
CoRR
Bohua Zou, Debayan Roy, Dhimankumar Yogesh Airao, Weihao Xu, Binqi Sun, Yutao Liu, Haibo Chen
2026 J jnl
Inf. Fusion
Yitong Shang, Wen-Long Shang, Dingsong Cui, Peng Liu, Haibo Chen, Dongdong Zhang, Runsen Zhang, Chengcheng Xu, Ye Liu, Chenxi Wang, Mohannad Alhazmi
2025 J jnl
CoRR
Yuan Wang, Mingyu Li, Haibo Chen
2025 J jnl
CoRR
Gansen Hu, Zhaoguo Wang, Jinglin Wei, Wei Huang, Haibo Chen
2025 J jnl
IEEE Trans. Instrum. Meas.
Baoxi Zhang, Xiang Wang, Siliang He, Haibo Chen
2025 conf
ICC Workshops
Haibo Chen, Cong Yi, Yu Zhou, Haoran Yin, Yanqun Tang, Xinjin Lu, Wei Li, Di Zhang
2025 J jnl
Dagstuhl Reports
Haibo Chen, Ada Gavrilovska, Jana Giceva, Olaf Spinczyk
2025 J jnl
Frontiers Artif. Intell.
Haibo Chen, Bangcheng Yang, Fucun He, Fei Zhou, Shuai Chen, Chunpeng Wu, Fan Li, Yansong Chua
2025 J jnl
Appl. Math. Lett.
He Zhang, Haibo Chen
2025 J jnl
J. Appl. Math. Comput.
Asia Shehzadi, Hüseyin Budak, Wali Haider, Abdul Mateen, Haibo Chen
2025 J jnl
J. Comput. Phys.
Fuhang Jiang, Toru Takahashi, Changjun Zheng, Toshiro Matsumoto, Haibo Chen
2025 J jnl
BMC Medical Imaging
Feini Zhou, Jiwei You, Yifan Guo, Huiping Jiang, Haibo Chen, Jinfang Du, Zhaolong Zeng, Wanting Shan, Kaicheng Song, Jialin Xie, Jianfeng Ye, Hongjie Hu, Maosheng Xu
2025 B conf
PIMRC
Ruiqi Cao, Yanqun Tang, Tianqi Mao, Muzi Yuan, Yuqing Liu, Hongjie Bao, Haibo Chen
2025 J jnl
Comput. Appl. Math.
Lingzheng Kong, Liyan Zhu, Haibo Chen
2025 J jnl
Frontiers Appl. Math. Stat.
Ghulam Abbass, Nek Muhammad Katbar, Israr Ahmed Memon, Haibo Chen, Fikadu Tesgera Tolasa, Gemeda Tolessa Lubo
2025 J jnl
CoRR
Jun Li, Zikun Chen, Haibo Chen, Shuo Chen, Jian Yang
2025 J jnl
Comput. Ind. Eng.
Jing Yang, Jin Liu, Haibo Chen, Jungang Shi, Yuqing Zhang
2025 J jnl
CoRR
Weihang Shen, Yinqiu Chen, Rong Chen, Haibo Chen
2025 J jnl
ACM SIGOPS Oper. Syst. Rev.
Yuan Wang, Zhenyuan Yang, Zhanbo Wang, Mingyu Li, Zhilin Wu, Haibo Chen
2025 J jnl
CoRR
Hanze Zhang, Rong Chen, Haibo Chen
2024 J jnl
Int. J. Softw. Informatics
Wei Qiang, Yu Du, Xinjin Li, Xiangmin Fan, Wen Su, Haibo Chen, Wei Sun, Feng Tian
2024 J jnl
Frontiers Comput. Sci.
Haibo Chen, Ning Jia, Jie Yin
2024 C conf
ISPA
Jisheng Qin, Tao Tao, Zijie Liu, Haibo Chen, Shenghui Zhao
2024 J jnl
EURASIP J. Wirel. Commun. Netw.
Zhongwei Huang, Tong Li, Chenghao Song, Zhenxing Li, Jie Wang, Xiao Liu, Haibo Chen, Xiaorong Zhao, Yewen Cao
2024 J jnl
IEEE Access
Haibo Chen, Xiao Liu, Zhongwei Huang, Yewen Cao, Deqiang Wang
2024 J jnl
Comput. Appl. Math.
Lintao Liu, Kaimin Teng, Jie Yang, Haibo Chen
2024 J jnl
ISPRS Int. J. Geo Inf.
Shuai Lu, Haibo Chen, Yilong Teng
2024 B conf
WCNC
Zhengpeng Wang, Yanqun Tang, Shiyu Song, Haibo Chen, Xianjie Lu, Fan Liu
2024 J jnl
Remote. Sens.
Yunfei Zhang, Cheng Luo, Haibo Chen, Wei Cui, Xianqing Lv
2023 J jnl
Comput. Methods Programs Biomed.
Yin Zhou, Binghui Luo, Jiugao Sang, Cheng Li, Meng Zhu, Zhengfei Zhu, Jianrong Dai, Jianhua Wang, Haibo Chen, Shuwei Zhai, Lina Lu, Hui Liu, Genhua Yu, Jin Ye, Zhen Zhang, Jian Huan
2023 conf
ICCEIC
Yang Yu, Rui Zhang, Ziyan Tang, Han Wang, Xiaona Zhuang, Ruofan Zhao, Yusen Ma, Peilin Gao, Zhanzhi Gong, Haibo Chen
2023 conf
ICCC Workshops
Jinming Du, Yanqun Tang, Xizhang Wei, Jiaojiao Xiong, Jiajun Zhu, Haoran Yin, Chi Zhang, Haibo Chen
2023 J jnl
Entropy
Xiaoli Huang, Haibo Chen, Zheng Zhang
2023 J jnl
CoRR
Yu Zhou, Haoran Yin, Jiaojiao Xiong, Shiyu Song, Jiajun Zhu, Jinming Du, Haibo Chen, Yanqun Tang
2022 conf
DMIP
Liqing Yang, Lin Chen, Lu Liu, Haibo Chen
2022 J jnl
ISPRS Int. J. Geo Inf.
Haibo Chen, Daolei Liang
2022 J jnl
BMC Medical Imaging
Honglei Ding, Jiaying Li, Kefang Jiang, Chen Gao, Liangji Lu, Huani Zhang, Haibo Chen, Xuning Gao, Kefeng Zhou, Zhichao Sun
2022 J jnl
CoRR
Christopher Jelich, Wenchang Zhao, Haibo Chen, Steffen Marburg
2021 conf
QRS Companion
Tianxiang Lv, Qihao Bao, Haibo Chen, Chi Zhang
2021 J jnl
ISPRS Int. J. Geo Inf.
Haibo Chen, Xin Chen
2021 conf
ICTA
Faxian Shan, Yang Xiong, Chang-Ching Chen, Haibo Chen, James Cho, Xiong Li, Wenyong Jiang, Jengwei Huang
2021 conf
ISCID
Jian Sun, ZhenTao Zhang, Haibo Chen, Daolei Liang
2020 J jnl
IEEE Trans. Biomed. Eng.
Pandeng Zhang, Chang Liu, Haibo Chen, Jia Liu
2020 conf
VSIP
Jing Tang, Tao Jia, Haibo Chen, Chuncheng Wei
2019 J jnl
J. Medical Imaging Health Informatics
Pandeng Zhang, Ye Chen, Haibo Chen, Jia Liu
2019 conf
NLPIR
Dong Cao, Dongdong Zhang, Haibo Chen
2019 J jnl
CoRR
Dong Cao, Dongdong Zhang, Haibo Chen
2019 J jnl
CoRR
Dong Cao, Lisha Xu, Haibo Chen
2019 conf
ACPR (2)
Dong Cao, Lisha Xu, Haibo Chen
2019 J jnl
CoRR
Dongdong Zhang, Dong Cao, Haibo Chen
2019 conf
AIIPCC
Dongdong Zhang, Dong Cao, Haibo Chen
2018 J jnl
IEEE Access
Jinzhou Zhu, Yan Zhang, Haibo Chen
2018 conf
SKIMA
Haibo Chen, Jing Tang, Sheng Fang, Mengyuan Li
2017 conf
ICNSC
Haibo Chen, Jianfei Zhao, Xiaoji Chen, Ding Xiao, Chuan Shi
2015 J jnl
CoRR
Xiujia Guo, Haibo Chen, Xuqin Liu, Xiangyu Xu, Zhong Chen
2014 ed.
ACA
Junjie Wu, Haibo Chen, Xingwei Wang
2014 J jnl
Math. Comput. Simul.
Haibo Chen, Anzhou Cao, Jicai Zhang, Chunbao Miao, Xianqing Lv
2014 J jnl
Comput. Graph.
Liping Zheng, Jianming Zhao, Yajun Cheng, Haibo Chen, Xiaoping Liu, Wenping Wang
2014 J jnl
Appl. Math. Comput.
Liping Xu, Haibo Chen
2013 conf
FSKD
Xinyuan An, Jun Chen, Yi Liu, Wei Li, Haibo Chen
2012 J jnl
Math. Comput. Model.
Jianxin Cao, Haibo Chen
2011 J jnl
Appl. Math. Comput.
Zuowei Cai, Lihong Huang, Haibo Chen
2011 J jnl
Appl. Math. Lett.
Liu Yang, Haibo Chen, Xiaoxia Yang
2010 J jnl
Appl. Math. Lett.
Liu Yang, Haibo Chen
2009 J jnl
J. Comput. Appl. Math.
Haibo Chen, Xianqing Lv, Yansong Qiao
2008 J jnl
Appl. Math. Comput.
Yulin Zhao, Haibo Chen
2008 J jnl
Reliab. Eng. Syst. Saf.
Haibo Chen, Torgeir Moan, Harry Verhoeven
2007 J jnl
Appl. Math. Comput.
Haihua Wang, Haibo Chen
2007 J jnl
Appl. Math. Comput.
Haihua Wang, Haibo Chen
2006 conf
FSKD
Zhanquan Wang, Huiqun Yu, Haibo Chen
2005 conf
CIS (1)
Haibo Chen, Zhanquan Wang
2004 J jnl
Reliab. Eng. Syst. Saf.
Haibo Chen, Torgeir Moan
2001 J jnl
Neural Comput. Appl.
Haibo Chen, Susan Grant-Muller, Lorenzo Mussone, Frank Montgomery
redb/extractors/decompiler/apk/smali_normalization.py
← Index redb/extractors/decompiler/apk/smali_normalization.py python
"""Semantic normalization of Dalvik/smali instructions.

Analogous to Binary Ninja's LLIL normalization: strips register allocation
noise and instruction encoding variants while preserving semantic operations.

Three normalization levels (most aggressive to most detailed):
  - 'category':    semantic category only (MOV, ALU, CALL, ...)
  - 'opcode':      base opcode, width-invariant (add, sub, invoke, ...)
  - 'opcode_api':  opcode category + API method/field references for
                   invoke/field/alloc instructions (default for MinHash)

References:
  - Smali+ 12-category reduction (Canfora et al.)
  - MOSDroid opcode family grouping
  - DroidSIFT/DroidSim API-sensitive similarity
"""

import re
from typing import List

# ---------------------------------------------------------------------------
# Dalvik opcode -> semantic category mapping
# ---------------------------------------------------------------------------
# Prefix-matched against instruction opcodes. Order matters for overlapping
# prefixes (longer/more-specific prefixes should come first in iteration,
# but since we use startswith and break on first match, we order by
# specificity within the list).

OPCODE_CATEGORIES = {
    # Arithmetic/logic
    "add": "ALU", "sub": "ALU", "mul": "ALU", "div": "ALU",
    "rem": "ALU", "and": "ALU", "or": "ALU", "xor": "ALU",
    "shl": "ALU", "shr": "ALU", "ushr": "ALU", "neg": "ALU",
    "not": "ALU",
    # Data movement
    "move": "MOV", "const": "CONST",
    # Memory access (field/array)
    "iget": "LOAD", "sget": "LOAD", "aget": "LOAD",
    "iput": "STORE", "sput": "STORE", "aput": "STORE",
    # Invocations
    "invoke": "CALL",
    # Control flow
    "if": "BRANCH", "goto": "JMP",
    "switch": "SWITCH",
    "return": "RET",
    # Object/type
    "new": "ALLOC", "check": "TYPE", "instance": "TYPE",
    # Array
    "fill": "ARR", "array": "ARR",
    # Comparison
    "cmpl": "CMP", "cmpg": "CMP", "cmp": "CMP",
    # Exception / synchronization
    "throw": "EXC", "monitor": "SYNC",
    # Conversion (int-to-long, float-to-int, etc.)
    "int-to": "CONV", "long-to": "CONV", "float-to": "CONV",
    "double-to": "CONV",
}

# Pre-compiled regexes for operand extraction
_METHOD_REF_RE = re.compile(r"(L[\w/$]+;->[\w<>]+\(.*?\)[\w/$;\[]*)")
_FIELD_REF_RE = re.compile(r"(L[\w/$]+;->[\w]+:[\w/$;\[]+)")
_CLASS_REF_RE = re.compile(r"(L[\w/$]+;)")
_CONST_STRING_RE = re.compile(r'^const-string(?:/jumbo)?\s')


def categorize_opcode(opcode: str) -> str:
    """Map a Dalvik opcode to its semantic category.

    Prefix-matched: 'add-int/2addr' matches 'add' -> 'ALU'.
    Returns 'OTHER' for unrecognized opcodes.
    """
    for prefix, cat in OPCODE_CATEGORIES.items():
        if opcode.startswith(prefix):
            return cat
    return "OTHER"


# Mapping from semantic categories to the ACFG feature vector indices
# used by Binary Ninja's build_block_features (cfg_features.py).
# This enables cross-platform ACFG feature comparison.
CATEGORY_TO_ACFG_INDEX = {
    "ALU": 0,       # CAT_ARITHMETIC
    "CONV": 0,      # arithmetic-adjacent
    "CMP": 4,       # CAT_COMPARISON
    "MOV": 2,       # CAT_TRANSFER
    "CONST": 2,     # transfer-adjacent (loading constants)
    "LOAD": 5,      # CAT_MEMORY
    "STORE": 5,     # CAT_MEMORY
    "CALL": 3,      # CAT_CALL
    "BRANCH": 1,    # CAT_LOGIC (conditional logic)
    "JMP": 1,       # CAT_LOGIC
    "SWITCH": 1,    # CAT_LOGIC
    "RET": 2,       # CAT_TRANSFER
    "ALLOC": 5,     # CAT_MEMORY (heap allocation)
    "TYPE": 6,      # CAT_OTHER
    "ARR": 5,       # CAT_MEMORY
    "EXC": 6,       # CAT_OTHER
    "SYNC": 6,      # CAT_OTHER
    "OTHER": 6,     # CAT_OTHER
}


def normalize_instruction(line: str, level: str = "opcode_api") -> str:
    """Normalize a single smali instruction line.

    Args:
        line: A single smali instruction (whitespace-stripped).
        level: Normalization level:
            'category'   - most aggressive: just semantic category
            'opcode'     - base opcode only, width/addressing-mode invariant
            'opcode_api' - category + API references for invoke/field/alloc
                          (default, best for MinHash similarity)

    Returns:
        Normalized instruction string, or empty string for non-instructions.
    """
    stripped = line.strip()
    if not stripped:
        return ""

    parts = stripped.split(None, 1)
    opcode = parts[0]
    operands = parts[1] if len(parts) > 1 else ""

    if level == "category":
        return categorize_opcode(opcode)

    if level == "opcode":
        # Strip type/width suffixes for invariance:
        # add-int, add-long, add-float -> 'add'
        # add-int/2addr -> 'add'
        base = re.split(r"[-/]", opcode)[0]
        return base

    if level == "opcode_api":
        # const-string: preserve string content (encrypted strings are a
        # key malware indicator)
        if _CONST_STRING_RE.match(stripped):
            # Extract the string literal
            str_match = re.search(r'"(.*)"', operands)
            if str_match:
                return f"CONST_STR \"{str_match.group(1)}\""
            return "CONST_STR"

        # invoke-*: preserve method reference
        if opcode.startswith("invoke"):
            ref = _METHOD_REF_RE.search(operands)
            if ref:
                return f"CALL {ref.group(1)}"
            return "CALL"

        # Field access: preserve field reference
        if opcode.startswith(("iget", "iput", "sget", "sput")):
            ref = _FIELD_REF_RE.search(operands)
            if ref:
                cat = "LOAD" if "get" in opcode else "STORE"
                return f"{cat} {ref.group(1)}"
            # Fallback: try space-separated format from androguard
            # e.g. "iget v0, p0, Lcom/Foo;->field Ljava/lang/String;"
            space_ref = re.search(
                r"(L[\w/$]+;->[\w]+)\s+([\w/$;\[]+)", operands
            )
            if space_ref:
                cat = "LOAD" if "get" in opcode else "STORE"
                return f"{cat} {space_ref.group(1)}:{space_ref.group(2)}"
            cat = "LOAD" if "get" in opcode else "STORE"
            return cat

        # new-instance: preserve allocated type
        if opcode.startswith("new-instance") or opcode == "new-array":
            ref = _CLASS_REF_RE.search(operands)
            if ref:
                return f"ALLOC {ref.group(1)}"
            return "ALLOC"

        # Everything else: just the category
        return categorize_opcode(opcode)

    # Unknown level: return raw opcode
    return opcode


def normalize_method_body(
    body: str, level: str = "opcode_api"
) -> List[str]:
    """Normalize all instructions in a smali method body.

    Filters out directives (.), labels (:), comments (#), and blank lines.
    Returns a list of normalized instruction strings.

    Args:
        body: Raw smali method body text.
        level: Normalization level (see normalize_instruction).

    Returns:
        List of normalized instruction strings (no empty strings).
    """
    normalized = []
    for line in body.split("\n"):
        stripped = line.strip()
        # Skip non-instructions
        if not stripped:
            continue
        if stripped.startswith((".",":", "#")):
            continue
        result = normalize_instruction(stripped, level)
        if result:
            normalized.append(result)
    return normalized