Jan Brezovsky

20 papers Journal 20
YearRankTypeTitle / Venue / Authors
2025 J jnl
J. Chem. Inf. Model.
Aravind Selvaram Thirunavukarasu, Katarzyna Szleper, Gamze Tanriver, Igor Marchlewski, Karolina Mitusinska, Artur Góra, Jan Brezovsky
2024 J jnl
J. Chem. Inf. Model.
Nishita Mandal, Bartlomiej Surpeta, Jan Brezovsky
2024 J jnl
J. Chem. Inf. Model.
Carlos Eduardo Sequeiros-Borja, Bartlomiej Surpeta, Aravind Selvaram Thirunavukarasu, Cedrix Jurgal Dongmo Foumthuim, Igor Marchlewski, Jan Brezovsky
2022 J jnl
Bioinform.
Jan Brezovsky, Aravind Selvaram Thirunavukarasu, Bartlomiej Surpeta, Carlos Eduardo Sequeiros-Borja, Nishita Mandal, Dheeraj Kumar Sarkar, Cedrix Jurgal Dongmo Foumthuim, Nikhil Agrawal
2021 J jnl
Briefings Bioinform.
Carlos Eduardo Sequeiros-Borja, Bartlomiej Surpeta, Jan Brezovsky
2020 J jnl
IEEE ACM Trans. Comput. Biol. Bioinform.
Jiri Filipovic, Ondrej Vávra, Jan Plhak, David Bednar, Sérgio M. Marques, Jan Brezovsky, Ludek Matyska, Jirí Damborský
2019 J jnl
Nucleic Acids Res.
Jan Stourac, Ondrej Vavra, Piia Kokkonen, Jiri Filipovic, Gaspar R. P. Pinto, Jan Brezovsky, Jirí Damborský, David Bednar
2019 J jnl
Bioinform.
Ondrej Vavra, Jiri Filipovic, Jan Plhak, David Bednar, Sérgio M. Marques, Jan Brezovsky, Jan Stourac, Ludek Matyska, Jirí Damborský
2018 J jnl
Bioinform.
Adam Jurcík, David Bednar, Jan Byska, Sérgio M. Marques, Katarína Furmanová, Lukas Daniel, Piia Kokkonen, Jan Brezovsky, Ondrej Strnad, Jan Stourac, Antonín Pavelka, Martin Manak, Jirí Damborský, Barbora Kozlíková
2017 J jnl
J. Chem. Inf. Model.
Sérgio M. Marques, Zuzana Dunajova, Zbynek Prokop, Radka Chaloupkova, Jan Brezovsky, Jirí Damborský
2017 J jnl
Nucleic Acids Res.
Milos Musil, Jan Stourac, Jaroslav Bendl, Jan Brezovsky, Zbynek Prokop, Jaroslav Zendulka, Tomás Martínek, David Bednar, Jirí Damborský
2016 J jnl
IEEE ACM Trans. Comput. Biol. Bioinform.
Antonín Pavelka, Eva Sebestova, Barbora Kozlíková, Jan Brezovsky, Jirí Sochor, Jirí Damborský
2016 J jnl
Nucleic Acids Res.
Jaroslav Bendl, Jan Stourac, Eva Sebestova, Ondrej Vavra, Milos Musil, Jan Brezovsky, Jirí Damborský
2016 J jnl
PLoS Comput. Biol.
Jaroslav Bendl, Milos Musil, Jan Stourac, Jaroslav Zendulka, Jirí Damborský, Jan Brezovsky
2016 J jnl
Nucleic Acids Res.
Jon C. Ison, Kristoffer Rapacki, Hervé Ménager, Matús Kalas, Emil Rydza, Piotr Chmura, Christian Anthon, Niall Beard, Karel Berka, Dan M. Bolser, Tim Booth, Anthony Bretaudeau, Jan Brezovsky, Rita Casadio, Gianni Cesareni, Frederik Coppens, Michael Cornell, Gianmauro Cuccuru, Kristian Davidsen, Gianluca Della Vedova, Tunca Dogan, Olivia Doppelt-Azeroual, Laura Emery, Elisabeth Gasteiger, Thomas Gatter, Tatyana Goldberg, Marie Grosjean, Björn A. Grüning, Manuela Helmer-Citterich, Hans Ienasescu, Vassilios Ioannidis, Martin Closter Jespersen, Rafael C. Jiménez, Nick S. Juty, Peter Juvan, Maximilian Koch, Camille Laibe, Jing-Woei Li, Luana Licata, Fabien Mareuil, Ivan Micetic, Rune Møllegaard Friborg, Sébastien Moretti, Chris Morris, Steffen Möller, Aleksandra Nenadic, Hedi Peterson, Giuseppe Profiti, Peter M. Rice, Paolo Romano, Paola Roncaglia, Rabie Saidi, Andrea Schafferhans, Veit Schwämmle, Callum Smith, Maria Maddalena Sperotto, Heinz Stockinger, Radka Svobodová Vareková, Silvio C. E. Tosatto, Victor de la Torre, Paolo Uva, Allegra Via, Guy Yachdav, Federico Zambelli, Gert Vriend, Burkhard Rost, Helen E. Parkinson, Peter Løngreen, Søren Brunak
2015 J jnl
PLoS Comput. Biol.
David Bednar, Koen Beerens, Eva Sebestova, Jaroslav Bendl, Sagar D. Khare, Radka Chaloupkova, Zbynek Prokop, Jan Brezovsky, David Baker, Jirí Damborský
2015 J jnl
J. Chem. Inf. Model.
Lukas Daniel, Tomas Buryska, Zbynek Prokop, Jirí Damborský, Jan Brezovsky
2014 J jnl
Bioinform.
Barbora Kozlíková, Eva Sebestova, Vilém Sustr, Jan Brezovsky, Ondrej Strnad, Lukas Daniel, David Bednar, Antonín Pavelka, Martin Manak, Martin Bezdeka, Petr Benes, Matus Kotry, Artur Góra, Jirí Damborský, Jiri Sochor
2014 J jnl
PLoS Comput. Biol.
Jaroslav Bendl, Jan Stourac, Ondrej Salanda, Antonín Pavelka, Eric D. Wieben, Jaroslav Zendulka, Jan Brezovsky, Jirí Damborský
2012 J jnl
PLoS Comput. Biol.
Eva Chovancová, Antonín Pavelka, Petr Benes, Ondrej Strnad, Jan Brezovsky, Barbora Kozlíková, Artur Góra, Vilém Sustr, Martin Klvana, Petr Medek, Lada Biedermannová, Jiri Sochor, Jirí Damborský
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