K. W. Samuel Au

38 papers A* 4C 4Journal 25Unranked 5
YearRankTypeTitle / Venue / Authors
2026 J jnl
IEEE Robotics Autom. Lett.
Yunxi Tang, Tianqi Yang, Jing Huang, Xiangyu Chu, K. W. Samuel Au
2025 J jnl
IEEE Robotics Autom. Lett.
Chun Ho David Lo, K. W. Samuel Au
2025 J jnl
CoRR
Zhen Zhang, Xiangyu Chu, Yunxi Tang, Lulu Zhao, Jing Huang, Zhongliang Jiang, K. W. Samuel Au
2025 J jnl
IEEE Robotics Autom. Lett.
Zhen Zhang, Xiangyu Chu, Yunxi Tang, Lulu Zhao, Jing Huang, Zhongliang Jiang, K. W. Samuel Au
2025 J jnl
IEEE Robotics Autom. Lett.
Xiangyu Chu, Fei Yan Fiat Wong, Chun Yin Fan, Hongbo Zhang, Yanlin Chen, K. W. Samuel Au
2025 J jnl
CoRR
Shengzhi Wang, Niels Dehio, Xuanqi Zeng, Xian Yang, Lingwei Zhang, Yun-Hui Liu, K. W. Samuel Au
2025 J jnl
IEEE Trans. Medical Imaging
Dianye Huang, Chenyang Li, Angelos Karlas, Xiangyu Chu, K. W. Samuel Au, Nassir Navab, Zhongliang Jiang
2025 J jnl
CoRR
Zhongyu Chen, Chenyang Li, Xuesong Li, Dianye Huang, Zhongliang Jiang, Stefanie Speidel, Xiangyu Chu, K. W. Samuel Au
2024 C conf
ACC
Chun Ho David Lo, Wee Shen Ng, Xiangyu Chu, K. W. Samuel Au
2024 J jnl
CoRR
Zhen Zhang, Xiangyu Chu, Yunxi Tang, K. W. Samuel Au
2024 J jnl
IEEE Robotics Autom. Lett.
Jiajun An, Xiangyu Chu, M. Janneke Schwaner, K. W. Samuel Au
2024 A* conf
ICRA
Zhen Zhang, Anran Lin, Chun Wai Wong, Xiangyu Chu, Qi Dou, K. W. Samuel Au
2024 J jnl
IEEE Robotics Autom. Lett.
Yunxi Tang, Xiangyu Chu, Jing Huang, K. W. Samuel Au
2024 J jnl
CoRR
Zhongliang Jiang, Xuesong Li, Xiangyu Chu, Angelos Karlas, Yuan Bi, Yingsheng Cheng, K. W. Samuel Au, Nassir Navab
2024 J jnl
IEEE Trans. Instrum. Meas.
Zhongliang Jiang, Xuesong Li, Xiangyu Chu, Angelos Karlas, Yuan Bi, Yingsheng Cheng, K. W. Samuel Au, Nassir Navab
2024 conf
SSRR
C. Y. Ivan Fan, Xiangyu Chu, Fei Yan Fiat Wong, Fan Shi, K. W. Samuel Au
2023 J jnl
IEEE Robotics Autom. Lett.
Xiangyu Chu, Shengzhi Wang, Raymond Ng, Chun Yin Fan, Jiajun An, K. W. Samuel Au
2023 J jnl
CoRR
Zhen Zhang, Anran Lin, Chun Wai Wong, Xiangyu Chu, Qi Dou, K. W. Samuel Au
2023 conf
Humanoids
Chun Ho David Lo, C. Y. Giselle Wong, Wee Shen Ng, Shengzhi Wang, Xiangyu Chu, K. W. Samuel Au
2023 conf
CASE
Xiangyu Chu, Shengzhi Wang, Minjian Feng, Jiaxi Zheng, Yuxuan Zhao, Jing Huang, K. W. Samuel Au
2023 J jnl
CoRR
Xiangyu Chu, Shengzhi Wang, Minjian Feng, Jiaxi Zheng, Yuxuan Zhao, Jing Huang, K. W. Samuel Au
2023 J jnl
IEEE Robotics Autom. Lett.
Jing Huang, K. W. Samuel Au
2023 A* conf
ICRA
Shengzhi Wang, Xiangyu Chu, K. W. Samuel Au
2023 A* conf
ICRA
Yunxi Tang, Jiajun An, Xiangyu Chu, Shengzhi Wang, Ching Yan Wong, K. W. Samuel Au
2022 C conf
ACC
Jawad Mehmood Butt, Xin Ma, Xiangyu Chu, K. W. Samuel Au
2022 J jnl
CoRR
Hongbin Lin, Qian Gao, Xiangyu Chu, Qi Dou, Anton Deguet, Peter Kazanzides, K. W. Samuel Au
2022 J jnl
CoRR
Shengzhi Wang, Xiangyu Chu, K. W. Samuel Au
2022 J jnl
CoRR
Yunxi Tang, Jiajun An, Xiangyu Chu, Shengzhi Wang, Ching Yan Wong, K. W. Samuel Au
2021 C conf
ACC
Raymond Ng, Yunxi Tang, Hongbin Lin, Xiangyu Chu, K. W. Samuel Au
2021 J jnl
CoRR
Yunxi Tang, Xiangyu Chu, K. W. Samuel Au
2021 J jnl
IEEE Robotics Autom. Lett.
Hongbin Lin, Qian Gao, Xiangyu Chu, Qi Dou, Anton Deguet, Peter Kazanzides, K. W. Samuel Au
2021 conf
ICAR
Jawad Mehmood Butt, Xiangyu Chu, Hao Zheng, Xiaomei Wang, Ka-Wai Kwok, K. W. Samuel Au
2021 J jnl
IEEE Robotics Autom. Lett.
Jing Huang, Yuanpei Cai, Xiangyu Chu, Russell H. Taylor, K. W. Samuel Au
2021 A* conf
ICRA
Xiangyu Chu, Yunxi Tang, Alessandro M. Giordano, Tan Chen, K. W. Samuel Au
2020 C conf
ACC
Xiangyu Chu, Chun Ho David Lo, K. W. Samuel Au
2020 J jnl
CoRR
Hongbin Lin, Chiu-Wai Vincent Hui, Yan Wang, Anton Deguet, Peter Kazanzides, K. W. Samuel Au
2020 conf
BioRob
Jiajun An, T. Y. Chung, Chun Ho David Lo, Carlos Ma, Xiangyu Chu, K. W. Samuel Au
2019 J jnl
IEEE Robotics Autom. Lett.
Hongbin Lin, Chiu-Wai Vincent Hui, Yan Wang, Anton Deguet, Peter Kazanzides, K. W. Samuel Au
redb/extractors/decompiler/bninja/analysis/medium_level.py
← Index redb/extractors/decompiler/bninja/analysis/medium_level.py python
import time

from binaryninja import (
    MediumLevelILOperation as MLIL_OP,
)

try:
    from ..function_type import FunctionTypeAnalysis
    from ..similarity.minhasher import MinHasher, TokenKind
    from ..utils.hashes import calculate_sha256, calculate_tlsh
    from .medium_level_normalization import MediumLevelNormalization
except ImportError:
    from redb.extractors.decompiler.bninja.analysis.medium_level_normalization import MediumLevelNormalization
    from redb.extractors.decompiler.bninja.similarity.minhasher import MinHasher
    from redb.extractors.decompiler.bninja.function_type import FunctionTypeAnalysis
    from redb.extractors.decompiler.bninja.utils.hashes import calculate_sha256, calculate_tlsh


_MLIL_CALL_OPS = (
    MLIL_OP.MLIL_CALL,
    MLIL_OP.MLIL_CALL_SSA,
    MLIL_OP.MLIL_CALL_UNTYPED,
    MLIL_OP.MLIL_CALL_UNTYPED_SSA,
    MLIL_OP.MLIL_TAILCALL,
    MLIL_OP.MLIL_TAILCALL_SSA,
    MLIL_OP.MLIL_TAILCALL_UNTYPED,
    MLIL_OP.MLIL_TAILCALL_UNTYPED_SSA,
)

_MLIL_CONTROL_FLOW_OPS = (
    MLIL_OP.MLIL_IF,
    MLIL_OP.MLIL_GOTO,
    MLIL_OP.MLIL_JUMP,
    MLIL_OP.MLIL_JUMP_TO,
    MLIL_OP.MLIL_RET,
    MLIL_OP.MLIL_RET_HINT,
    MLIL_OP.MLIL_NORET,
) + _MLIL_CALL_OPS


class MediumLevelAnalysis:
    def __init__(self, function, bv, logger):
        self.function = function
        self.name = function.name
        self.start = function.start
        self.mlil_func = function.mlil
        self.bv = bv
        self.logger = logger
        self.errors = []

    def log_error(self, message, function_name, address, exception=None, error_location="unknown"):
        error_msg = f"Error in function {function_name} at {address}: {message}"
        if exception:
            error_msg += f" - {str(exception)}"
        self.logger.error(error_msg)

        error = {
            "function_name": function_name,
            "function_address": str(address),
            "error_location": error_location,
            "error_message": message,
            "error_details": str(exception) if exception else "",
            "error_type": type(exception).__name__ if exception else "Unknown",
            "timestamp": int(time.time() * 1000),
        }
        self.errors.append(error)

    def _collect_mlil_skeleton_and_typed(self):
        mlil = self.mlil_func
        if not mlil:
            return [], [], [], []

        start = self.start
        norm = MediumLevelNormalization()

        skeleton = []
        skeleton_with_addr = []
        typed = []
        typed_with_addr = []

        for il in mlil.instructions:
            skel_norm = norm.normalize_instruction_all_levels(il)
            typed_norm = norm.normalize_instr_with_operands(il)

            skeleton.append(skel_norm)
            typed.append(typed_norm)

            offset = il.address - start
            if offset < 0:
                offset = 0

            skeleton_with_addr.append((offset, skel_norm))
            typed_with_addr.append((offset, typed_norm))

        return skeleton, skeleton_with_addr, typed, typed_with_addr

    def analyze(self):
        (
            instr_skeleton,
            body_mlil_skeleton_vector,
            instr_typed,
            body_mlil_typed_vector,
        ) = self._collect_mlil_skeleton_and_typed()

        instr_skeleton_str = str(instr_skeleton)
        sha256_skeleton = calculate_sha256(instr_skeleton_str)
        tlsh_skeleton = calculate_tlsh(instr_skeleton_str)

        instr_typed_str = str(instr_typed)
        sha256_typed = calculate_sha256(instr_typed_str)
        tlsh_typed = calculate_tlsh(instr_typed_str)

        seed = 0xdeadbeef
        minhash_mlil_skeleton = MinHasher(seed, self.mlil_func, TokenKind.MLIL).calculateMinHash()
        minhash_mlil_typed = MinHasher(seed, self.mlil_func, TokenKind.TYPED_MLIL).calculateMinHash()

        medium_level_json = {
            "function_address": self.start,
            "body_mlil_skeleton_vector": body_mlil_skeleton_vector,
            "sha256_mlil_skeleton": sha256_skeleton,
            "tlsh_mlil_skeleton": tlsh_skeleton,
            "minhash_mlil_skeleton": minhash_mlil_skeleton,
            "body_mlil_typed_vector": body_mlil_typed_vector,
            "sha256_mlil_typed": sha256_typed,
            "tlsh_mlil_typed": tlsh_typed,
            "minhash_mlil_typed": minhash_mlil_typed,
        }

        return medium_level_json, self.errors