Weidong Chen

43 papers A* 1Misc 4Journal 25Unranked 13
YearRankTypeTitle / Venue / Authors
2025 A* conf
ACM Multimedia
Chuang Wang, Weidong Chen, Xu Cui, Yiming Zhao, Zhaobo Qi, Pengqi Huang, Xinyan Liu, Weigang Zhang
2025 J jnl
IEEE Trans. Aerosp. Electron. Syst.
Haiyou Qu, Chang Chen, Jun Liu, Weidong Chen
2025 J jnl
IEEE Signal Process. Lett.
Jianning Zhang, Haiyou Qu, Ruiyuan Li, Chang Chen, Weidong Chen
2025 J jnl
IEEE Trans. Aerosp. Electron. Syst.
Yuchen Huang, Zhen Wang, Jun Liu, Chang Chen, Pin Li, Weijian Liu, Weidong Chen
2024 J jnl
IEEE Trans. Geosci. Remote. Sens.
Zhen Wang, Jiaqi Liu, Xinru Yuan, Chang Chen, Jun Liu, Weidong Chen
2023 J jnl
IEEE Trans. Multim.
Liang Chen, Jun Liu, Weidong Chen, Bo Du
2023 J jnl
IEEE Trans. Geosci. Remote. Sens.
Liang Chen, Jun Liu, Siyu Sun, Weidong Chen, Bo Du, Rong Liu
2023 J jnl
IEEE Geosci. Remote. Sens. Lett.
Jianyang Wang, Shiyuan Li, Di Cheng, Lingyun Zhou, Chang Chen, Weidong Chen
2023 J jnl
IEEE Geosci. Remote. Sens. Lett.
Xinru Yuan, Jiaqi Liu, Di Cheng, Chang Chen, Weidong Chen
2022 J jnl
IEEE Trans. Commun.
Hancheng Lu, Dan Zhao, Yazheng Wang, Chani Kong, Weidong Chen
2022 J jnl
Remote. Sens.
Jiaqi Liu, Zhen Wang, Di Cheng, Weidong Chen, Chang Chen
2020 conf
ICCT
Yixing Jiao, Xiaomin Shi, Lingyun Zhou, Weidong Chen, Chang Chen
2019 conf
WCSP
Di Cheng, Bo Yuan, Chang Chen, Weidong Chen
2019 J jnl
Sensors
Bo Yuan, Yuanyue Guo, Weidong Chen, Dongjin Wang
2019 J jnl
CoRR
Qiao Zhang, Chang Chen, Weidong Chen, Jun Ding, Hualiang Zhang
2018 J jnl
Sensors
Zhiping Yin, Xinfei Lu, Weidong Chen
2018 Misc conf
ACSSC
Lin Sun, Weidong Chen
2018 J jnl
Sensors
Lin Sun, Weidong Chen
2017 conf
ICSPS
Yuming Shao, Yulong Dai, Longzhi Yuan, Weidong Chen
2017 J jnl
Sensors
Xinfei Lu, Jie Xia, Zhiping Yin, Weidong Chen
2017 conf
WCSP
Jie Xia, Xinfei Lu, Weidong Chen
2017 J jnl
Remote. Sens.
Jie Xia, Xinfei Lu, Weidong Chen
2016 J jnl
IEEE Geosci. Remote. Sens. Lett.
Lin Sun, Xinfei Lu, Weidong Chen
2016 J jnl
IEEE Geosci. Remote. Sens. Lett.
Di Feng, Weidong Chen
2015 J jnl
IEEE Geosci. Remote. Sens. Lett.
Xi Chen, Weidong Chen
2015 J jnl
IEEE Geosci. Remote. Sens. Lett.
Li Ding, Weidong Chen
2015 J jnl
IEEE Trans. Aerosp. Electron. Syst.
Li Ding, Weidong Chen, Wenyi Zhang, H. Vincent Poor
2014 J jnl
Sensors
Tianyun Wang, Xinfei Lu, Xiaofei Yu, Zhendong Xi, Weidong Chen
2014 conf
WCSP
Yang Xu, Lin Sun, Tianyun Wang, Xinfei Lu, Chang Chen, Weidong Chen
2014 J jnl
Sensors
Shougang Chai, Weidong Chen, Chang Chen
2013 conf
WCSP
Zeyue Sun, Tianyun Wang, Tao Jiang, Chang Chen, Weidong Chen
2013 Misc conf
ACSSC
Li Ding, Changchang Liu, Weidong Chen
2013 conf
WCSP
Xiaofei Yu, Mingyang Wang, Tianyun Wang, Chang Chen, Weidong Chen
2013 Misc conf
ICASSP
Li Ding, Weidong Chen, Wenyi Zhang
2013 conf
WCSP
Xinghua Luo, Shougang Chai, Weidong Chen
2013 conf
WCSP
Xinfei Lu, Yuanhang Tang, Tianyun Wang, Chang Chen, Weidong Chen
2013 J jnl
IEEE Geosci. Remote. Sens. Lett.
Changchang Liu, Weidong Chen
2012 conf
ACSCC
Changchang Liu, Li Ding, Weidong Chen
2012 conf
ACSCC
Changchang Liu, Weidong Chen
2012 conf
WCSP
Changchang Liu, Tianyun Wang, Li Ding, Weidong Chen
2012 Misc conf
ICASSP
Changchang Liu, Jin Yan, Weidong Chen
2012 conf
WCSP
Li Ding, Changchang Liu, Weidong Chen, Wenyi Zhang
2010 J jnl
EURASIP J. Adv. Signal Process.
Zhiping Yin, Weidong Chen
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