Mahdi Ranjbar Zefreh

25 papers Journal 11Unranked 14
YearRankTypeTitle / Venue / Authors
2025 conf
ECOC
Farhad Arpanaei, Arash Rezaee, Mahdi Ranjbar Zefreh, Ryan McCann, Laia Nadal, José Manuel Rivas-Moscoso, Óscar González de Dios, Alfonso Sánchez-Macián, David Larrabeiti, Vinod M. Vokkarane, José Alberto Hernández
2025 J jnl
IEEE J. Sel. Areas Commun.
Farhad Arpanaei, Mahdi Ranjbar Zefreh, Yanchao Jiang, Pierluigi Poggiolini, Kimia Ghodsifar, Hamzeh Beyranvand, Carlos Natalino, Paolo Monti, Antonio Napoli, José Manuel Rivas-Moscoso, Óscar González de Dios, Juan Pedro Fernández-Palacios, Octavia A. Dobre, José Alberto Hernández, David Larrabeiti
2024 conf
NoF
Farhad Arpanaei, Carlos Natalino, Mahdi Ranjbar Zefreh, Shuangyi Yan, Hami Rabbani, Maïté Brandt-Pearce, Juan P. Fernández Palacios, José Manuel Rivas-Moscoso, Óscar González de Dios, José Alberto Hernández, Alfonso Sánchez-Macián, David Larrabeiti, Paolo Monti
2024 J jnl
CoRR
Farhad Arpanaei, Carlos Natalino, Mahdi Ranjbar Zefreh, Shuangyi Yan, Hami Rabbani, Maïté Brandt-Pearce, Juan P. Fernández Palacios, José Manuel Rivas-Moscoso, Óscar González de Dios, José Alberto Hernández, Alfonso Sánchez-Macián, David Larrabeiti, Paolo Monti
2024 conf
IWCIT
Mohammad Reza Dibaj, Pouya Mehdizadeh, Hamzeh Beyranvand, Mahdi Ranjbar Zefreh, Juan Carlos Hernandez-Hernandez, Juan Pedro Fernández-Palacios, David Larrabeiti, José Alberto Hernández, Farhad Arpanaei
2024 J jnl
J. Opt. Commun. Netw.
Farhad Arpanaei, José Manuel Rivas-Moscoso, Ivan De Francesca, José Alberto Hernández, Alfonso Sánchez-Macián, Mahdi Ranjbar Zefreh, David Larrabeiti, Juan Pedro Fernández-Palacios
2024 conf
OFC
Farhad Arpanaei, Kimia Ghodsifar, Hamzeh Beyranvand, José Alberto Hernández, José Manuel Rivas-Moscoso, Carlos Natalino, Mahdi Ranjbar Zefreh, Antonio Napoli, Juan P. Fernández Palacios, David Larrabeiti
2024 conf
ICTON
Kimia Ghodsifar, Farhad Arpanaei, Hamzeh Beyranvand, Mahdi Ranjbar Zefreh, Carlos Natalino, Paolo Monti, Shuangyi Yan, Óscar González de Dios, José Manuel Rivas-Moscoso, Juan Pedro Fernández-Palacios, Alfonso Sánchez-Macián, David Larrabeiti, José Alberto Hernández
2024 conf
OFC
Yanchao Jiang, Antonino Nespola, Alberto Tanzi, Stefano Piciaccia, Mahdi Ranjbar Zefreh, Fabrizio Forghieri, Pierluigi Poggiolini
2024 J jnl
CoRR
Farhad Arpanaei, Mahdi Ranjbar Zefreh, Yanchao Jiang, Pierluigi Poggiolini, Kimia Ghodsifar, Hamzeh Beyranvand, Carlos Natalino, Paolo Monti, Antonio Napoli, José Manuel Rivas-Moscoso, Óscar González de Dios, Juan P. Fernández Palacios, Octavia A. Dobre, José Alberto Hernández, David Larrabeiti
2024 J jnl
J. Opt. Commun. Netw.
Farhad Arpanaei, Mahdi Ranjbar Zefreh, Carlos Natalino, Piotr Lechowicz, Shuangyi Yan, José Manuel Rivas-Moscoso, Óscar González de Dios, Juan P. Fernández Palacios, Hami Rabbani, Maïté Brandt-Pearce, Alfonso Sánchez-Macián, José Alberto Hernández, David Larrabeiti, Paolo Monti
2023 J jnl
CoRR
Farhad Arpanaei, José Manuel Rivas-Moscoso, Mahdi Ranjbar Zefreh, José Alberto Hernández, Juan Pedro Fernández-Palacios, David Larrabeiti
2022 J jnl
CoRR
Pierluigi Poggiolini, Mahdi Ranjbar Zefreh
2022 J jnl
CoRR
Farhad Arpanaei, Mahdi Ranjbar Zefreh, José Alberto Hernández, Andrea Carena, David Larrabeiti
2021 conf
OFC
Mahdi Ranjbar Zefreh, Fabrizio Forghieri, Stefano Piciaccia, Pierluigi Poggiolini
2021 conf
ECOC
A. Margareth Rosa Brusin, Mahdi Ranjbar Zefreh, Pierluigi Poggiolini, Stefano Piciaccia, Fabrizio Forghieri, Andrea Carena
2021 conf
ECOC
Mahdi Ranjbar Zefreh, Andrea Carena, Ann Margareth Rosa Brusin, Fabrizio Forghieri, Stefano Piciaccia, Pierluigi Poggiolini
2020 conf
ECOC
Gabriella Bosco, Andrea Carena, Mahdi Ranjbar Zefreh, Pierluigi Poggiolini, Fabrizio Forghieri
2019 J jnl
CoRR
Mahdi Ranjbar Zefreh, Pierluigi Poggiolini
2019 conf
OFC
Pierluigi Poggiolini, Mahdi Ranjbar Zefreh, Gabriella Bosco, Fabrizio Forghieri, Stefano Piciaccia
2018 conf
OFC
Pierluigi Poggiolini, Gabriella Bosco, Andrea Carena, Fernando P. Guiomar, Mahdi Ranjbar Zefreh, Fabrizio Forghieri, Stefano Piciaccia
2018 conf
ECOC
Pierluigi Poggiolini, Gabriella Bosco, Andrea Carena, Dario Pilori, Antonino Nespola, Mahdi Ranjbar Zefreh, Marco Bertino, Fabrizio Forghieri
2015 J jnl
IEEE Trans. Commun.
Mahdi Ranjbar Zefreh, Jawad A. Salehi
2015 conf
IWCIT
Mahdi Ranjbar Zefreh, Jawad A. Salehi
2014 J jnl
CoRR
Mahdi Ranjbar Zefreh, Jawad A. Salehi
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