Rafal Stanislawski

41 papers C 2Misc 18Journal 12Unranked 8
YearRankTypeTitle / Venue / Authors
2024 Misc conf
MMAR
Ryszard Kopka, Rafal Stanislawski
2024 Misc conf
MMAR
Marek Rydel, Rafal Stanislawski
2023 Misc conf
MMAR
Marek Rydel, Rafal Stanislawski, Grzegorz Bialic
2023 conf
PCC (1)
Rafal Stanislawski, Marek Rydel
2022 J jnl
Sensors
Xiaowei Xu, Hao Xiong, Liu Zhan, Grzegorz Królczyk, Rafal Stanislawski, Paolo Gardoni, Zhixiong Li
2022 J jnl
IEEE Access
Rafal Stanislawski, Marek Rydel, Zhixiong Li
2022 J jnl
Sensors
Xuejun Zhao, Rafal Stanislawski, Paolo Gardoni, Maciej Sulowicz, Adam Glowacz, Grzegorz Królczyk, Zhixiong Li
2022 Misc conf
MMAR
Rafal Stanislawski, Marek Rydel, Grzegorz Bialic
2022 J jnl
Appl. Math. Comput.
Rafal Stanislawski, Kamil Koziol, Marek Rydel
2022 J jnl
J. Frankl. Inst.
Rafal Stanislawski
2021 J jnl
Commun. Nonlinear Sci. Numer. Simul.
Rafal Stanislawski, Krzysztof J. Latawiec
2020 conf
KKA
Rafal Stanislawski, Marek Rydel, Krzysztof J. Latawiec
2019 J jnl
Symmetry
Marek Rydel, Rafal Stanislawski, Krzysztof J. Latawiec
2019 Misc conf
MMAR
Marcin Galek, Rafal Stanislawski, Marek Rydel, Krzysztof J. Latawiec, Marian Lukaniszyn
2019 J jnl
Entropy
Rafal Stanislawski, Kamil Koziol
2018 J jnl
Autom.
Marek Rydel, Rafal Stanislawski
2018 J jnl
Complex.
Rafal Stanislawski, Marek Rydel, Krzysztof J. Latawiec
2018 Misc conf
MMAR
Rafal Stanislawski, Krzysztof J. Latawiec, Marek Rydel, Marian Lukaniszyn, Marcin Galek
2018 conf
RRNR
Kamil Koziol, Rafal Stanislawski
2017 Misc conf
MMAR
Rafal Stanislawski, Marek Rydel, Krzysztof J. Latawiec, Marian Lukaniszyn, Marcin Galek
2017 Misc conf
MMAR
Magda Zolubak, Mariusz Pelc, Aleksandra Kawala-Janik, Rafal Stanislawski
2017 conf
RRNR
Krzysztof J. Latawiec, Rafal Stanislawski, Marian Lukaniszyn, Marek Rydel, Boguslaw R. Szkuta
2017 J jnl
J. Frankl. Inst.
Rafal Stanislawski, Marek Rydel, Krzysztof J. Latawiec
2016 Misc conf
MMAR
Rafal Stanislawski, Marek Rydel, Marcin Galek
2016 Misc conf
MMAR
Rafal Stanislawski, Krzysztof J. Latawiec, Marian Lukaniszyn, Wojciech Czuczwara, Ryszard Kopka
2015 ed.
RRNR
Krzysztof J. Latawiec, Marian Lukaniszyn, Rafal Stanislawski
2015 C conf
CCA
Rafal Stanislawski, Krzysztof J. Latawiec, Marian Lukaniszyn, Marcin Galek
2015 conf
RRNR
Marek Rydel, Rafal Stanislawski, Grzegorz Bialic, Krzysztof J. Latawiec
2015 Misc conf
MMAR
Rafal Stanislawski, Krzysztof J. Latawiec, Marian Lukaniszyn, Marcin Galek
2014 conf
RRNR
Marek Rydel, Rafal Stanislawski, Wlodzimierz Stanislawski, Krzysztof J. Latawiec
2014 conf
RRNR
Rafal Stanislawski, Krzysztof J. Latawiec, Marcin Galek, Marian Lukaniszyn
2014 C conf
ICSEng
Rafal Stanislawski, Marcin Galek, Krzysztof J. Latawiec, Marian Lukaniszyn
2014 Misc conf
MMAR
Rafal Stanislawski, Krzysztof J. Latawiec, Marcin Galek, Marian Lukaniszyn
2013 Misc conf
MMAR
Wojciech P. Hunek, Krzysztof J. Latawiec, Rafal Stanislawski, Marian Lukaniszyn, Piotr Dzierwa
2013 Misc conf
MMAR
Rafal Stanislawski, Krzysztof J. Latawiec, Wojciech P. Hunek, Marian Lukaniszyn
2013 conf
ISIE
Rafal Stanislawski, Krzysztof J. Latawiec, Marian Lukaniszyn
2012 Misc conf
MMAR
Krzysztof J. Latawiec, Rafal Stanislawski, Wojciech P. Hunek, Marian Lukaniszyn
2012 J jnl
Int. J. Appl. Math. Comput. Sci.
Rafal Stanislawski, Krzysztof J. Latawiec
2011 Misc conf
MMAR
Marcin Ruchaj, Rafal Stanislawski
2011 Misc conf
MMAR
Rafal Stanislawski, Wojciech P. Hunek, Krzysztof J. Latawiec
2011 Misc conf
MMAR
Wojciech P. Hunek, Rafal Stanislawski, Krzysztof J. Latawiec, Marian Lukaniszyn
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