Nedialko B. Dimitrov

22 papers A* 1B 2Journal 17Unranked 2
YearRankTypeTitle / Venue / Authors
2020 J jnl
PLoS Comput. Biol.
Samuel V. Scarpino, James G. Scott, Rosalind M. Eggo, Bruce Clements, Nedialko B. Dimitrov, Lauren Ancel Meyers
2019 J jnl
IEEE Trans. Smart Grid
Min Lwin, Jia Guo, Nedialko B. Dimitrov, Surya Santoso
2017 J jnl
Eur. J. Oper. Res.
Nedialko B. Dimitrov, Daniel Solow, Joseph G. Szmerekovsky, Jia Guo
2016 J jnl
J. Oper. Res. Soc.
Nedialko B. Dimitrov, Moshe Kress, Yuval Nevo
2014 J jnl
IEEE Trans. Autom. Control.
Constantine Caramanis, Nedialko B. Dimitrov, David P. Morton
2014 J jnl
Eur. J. Oper. Res.
Nedialko B. Dimitrov, Stanko Dimitrov, Stefanka S. Chukova
2013 J jnl
INFORMS Trans. Educ.
Nedialko B. Dimitrov, Gerald G. Brown, W. Matthew Carlyle
2013 J jnl
INFORMS J. Comput.
Tara Rengarajan, Nedialko B. Dimitrov, David P. Morton
2013 J jnl
J. Discrete Algorithms
Nedialko B. Dimitrov, C. Greg Plaxton
2013 J jnl
Comput. Oper. Res.
Nedialko B. Dimitrov, Alexander Moffett, David P. Morton, Sahotra Sarkar
2012 J jnl
Algorithmica
Nedialko B. Dimitrov, C. Greg Plaxton
2012 J jnl
CoRR
Harish Ganapathy, Siddhartha Banerjee, Nedialko B. Dimitrov, Constantine Caramanis
2012 J jnl
IEEE Trans. Signal Process.
Harish Ganapathy, Siddhartha Banerjee, Nedialko B. Dimitrov, Constantine Caramanis
2012 J jnl
PLoS Comput. Biol.
Samuel V. Scarpino, Nedialko B. Dimitrov, Lauren Ancel Meyers
2011 J jnl
Theor. Comput. Sci.
Nedialko B. Dimitrov, C. Greg Plaxton
2011 J jnl
Ann. Oper. Res.
Nedialko B. Dimitrov, Dennis P. Michalopoulos, David P. Morton, Michael V. Nehme, Feng Pan, Elmira Popova, Erich A. Schneider, Gregory G. Thoreson
2009 conf
Allerton
Harish Ganapathy, Siddhartha Banerjee, Nedialko B. Dimitrov, Constantine Caramanis
2009 J jnl
Adv. Decis. Sci.
Nedialko B. Dimitrov, Stefanka S. Chukova
2008 B conf
SPAA
Nedialko B. Dimitrov, Indrajit Roy
2008 conf
ICALP (1)
Nedialko B. Dimitrov, C. Greg Plaxton
2007 B conf
WAOA
Nedialko B. Dimitrov, C. Greg Plaxton
2005 A* conf
ICALP
Nedialko B. Dimitrov, C. Greg Plaxton
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