Neil Martin Robertson

39 papers A* 7A 2B 1C 1Misc 1Journal 20Unranked 7
YearRankTypeTitle / Venue / Authors
2021 J jnl
CoRR
Ziyun Li, Xinshao Wang, Haojin Yang, Di Hu, Neil Martin Robertson, David A. Clifton, Christoph Meinel
2020 J jnl
IEEE Trans. Inf. Forensics Secur.
Haonan Chen, Guosheng Hu, Zhen Lei, Yaowu Chen, Neil Martin Robertson, Stan Z. Li
2020 J jnl
CoRR
Yonggang Li, Guosheng Hu, Yongtao Wang, Timothy M. Hospedales, Neil Martin Robertson, Yongxing Yang
2020 conf
ECCV (22)
Yonggang Li, Guosheng Hu, Yongtao Wang, Timothy M. Hospedales, Neil Martin Robertson, Yongxin Yang
2020 conf
ACCV (5)
Hao Zhu, Yang Yuan, Guosheng Hu, Xiang Wu, Neil Martin Robertson
2020 J jnl
CoRR
Hao Zhu, Yang Yuan, Guosheng Hu, Xiang Wu, Neil Martin Robertson
2020 J jnl
CoRR
Shiyang Yan, Yang Hua, Neil Martin Robertson
2020 J jnl
CoRR
Xinshao Wang, Yang Hua, Elyor Kodirov, Neil Martin Robertson
2020 conf
ECCV (23)
Jian Gao, Yang Hua, Guosheng Hu, Chi Wang, Neil Martin Robertson
2019 A* conf
AAAI
Xinshao Wang, Yang Hua, Elyor Kodirov, Guosheng Hu, Neil Martin Robertson
2019 J jnl
CoRR
Xinshao Wang, Yang Hua, Elyor Kodirov, Neil Martin Robertson
2019 A conf
WACV
Alessandro Borgia, Yang Hua, Elyor Kodirov, Neil Martin Robertson
2019 J jnl
CoRR
Alessandro Borgia, Yang Hua, Elyor Kodirov, Neil Martin Robertson
2019 J jnl
CoRR
Xinshao Wang, Elyor Kodirov, Yang Hua, Neil Martin Robertson
2019 A conf
WACV
Soumya Shubhra Ghosh, Yang Hua, Sankha Subhra Mukherjee, Neil Martin Robertson
2019 J jnl
CoRR
Xinshao Wang, Elyor Kodirov, Yang Hua, Neil Martin Robertson
2019 J jnl
CoRR
Xinshao Wang, Elyor Kodirov, Yang Hua, Neil Martin Robertson
2019 A* conf
ICCV
Hanming Deng, Yang Hua, Tao Song, Zongpu Zhang, Zhengui Xue, Ruhui Ma, Neil Martin Robertson, Haibing Guan
2019 A* conf
CVPR
Xinshao Wang, Yang Hua, Elyor Kodirov, Guosheng Hu, Romain Garnier, Neil Martin Robertson
2019 J jnl
CoRR
Xinshao Wang, Yang Hua, Elyor Kodirov, Guosheng Hu, Romain Garnier, Neil Martin Robertson
2019 A* conf
CVPR
Zhiwei Liu, Xiangyu Zhu, Guosheng Hu, Haiyun Guo, Ming Tang, Zhen Lei, Neil Martin Robertson, Jinqiao Wang
2019 J jnl
CoRR
Zhiwei Liu, Xiangyu Zhu, Guosheng Hu, Haiyun Guo, Ming Tang, Zhen Lei, Neil Martin Robertson, Jinqiao Wang
2019 A* conf
ACM Multimedia
Xufeng He, Yang Hua, Tao Song, Zongpu Zhang, Zhengui Xue, Ruhui Ma, Neil Martin Robertson, Haibing Guan
2018 J jnl
IEEE Trans. Image Process.
Alessandro Borgia, Yang Hua, Elyor Kodirov, Neil Martin Robertson
2018 J jnl
CoRR
Xinshao Wang, Yang Hua, Elyor Kodirov, Guosheng Hu, Neil Martin Robertson
2018 conf
ECCV (12)
Guosheng Hu, Li Liu, Yang Yuan, Zehao Yu, Yang Hua, Zhihong Zhang, Fumin Shen, Ling Shao, Timothy M. Hospedales, Neil Martin Robertson, Yongxin Yang
2018 Misc conf
ICASSP
Guosheng Hu, Yuxin Hu, Kai Yang, Zehao Yu, Flood Sung, Zhihong Zhang, Fei Xie, Jianguo Liu, Neil Martin Robertson, Timothy M. Hospedales, Qiangwei Miemie
2018 J jnl
CoRR
Soumya Shubhra Ghosh, Yang Hua, Sankha Subhra Mukherjee, Neil Martin Robertson
2018 A* conf
ACM Multimedia
Zongpu Zhang, Yang Hua, Tao Song, Zhengui Xue, Ruhui Ma, Neil Martin Robertson, Haibing Guan
2017 A* conf
ICCV
Guosheng Hu, Yang Hua, Yang Yuan, Zhihong Zhang, Zheng Lu, Sankha S. Mukherjee, Timothy M. Hospedales, Neil Martin Robertson, Yongxin Yang
2016 conf
ECCV (8)
Guosheng Hu, Fei Yan, Chi-Ho Chan, Weihong Deng, William J. Christmas, Josef Kittler, Neil Martin Robertson
2016 conf
VISIGRAPP (3: VISAPP)
Sankha S. Mukherjee, Rolf H. Baxter, Neil Martin Robertson
2015 J jnl
IEEE Signal Process. Lett.
Rolf H. Baxter, Michael J. V. Leach, Sankha S. Mukherjee, Neil Martin Robertson
2015 J jnl
IEEE Trans. Multim.
Sankha S. Mukherjee, Neil Martin Robertson
2015 J jnl
Pattern Recognit.
Rolf H. Baxter, Neil Martin Robertson, David M. Lane
2015 B conf
ICIP
Sankha S. Mukherjee, Rolf H. Baxter, Neil Martin Robertson
2014 J jnl
Pattern Recognit. Lett.
Michael J. V. Leach, Ed P. Sparks, Neil Martin Robertson
2014 conf
CVPR Workshops
Michael J. V. Leach, Rolf Baxter, Neil Martin Robertson, Ed P. Sparks
2010 C conf
FUSION
Rolf Baxter, Neil Martin Robertson, David M. Lane
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