Maciej Marcin Michalek

48 papers A 1B 3C 5Misc 2Journal 21Unranked 16
YearRankTypeTitle / Venue / Authors
2025 B conf
SMC
Maciej Marcin Michalek, Karol Debski
2025 J jnl
IEEE Trans. Cybern.
Rafal M. Sobanski, Maciej Marcin Michalek, Michael Defoort
2024 conf
RoMoCo
Rafal M. Sobanski, Michael Defoort, Maciej Marcin Michalek
2024 J jnl
IEEE Trans. Veh. Technol.
Maciej Marcin Michalek
2023 Misc conf
MMAR
Natalia Wisniewska, Andrzej Rafalski, Maciej Marcin Michalek
2023 Misc conf
MMAR
Rafal M. Sobanski, Maciej Marcin Michalek, Michael Defoort
2022 conf
CDC
Maciej Marcin Michalek, Wojciech Adamski
2022 C conf
ICARCV
Maciej Marcin Michalek
2022 B conf
SMC
Maciej Marcin Michalek
2021 J jnl
IEEE Veh. Technol. Mag.
Maciej Marcin Michalek, Tomasz Gawron, Michal R. Nowicki, Piotr Skrzypczynski
2021 J jnl
Eur. J. Control
Maciej Marcin Michalek, Dariusz Pazderski
2021 J jnl
Eur. J. Control
Krzysztof Lakomy, Maciej Marcin Michalek
2020 J jnl
Comput. Electron. Agric.
Leonardo Guevara, Maciej Marcin Michalek, Fernando Alfredo Auat Cheeín
2020 J jnl
Comput. Electron. Agric.
Leonardo Guevara, Maciej Marcin Michalek, Fernando Alfredo Auat Cheeín
2020 conf
KKA
Maciej Marcin Michalek
2020 J jnl
IEEE Trans. Veh. Technol.
Maciej Marcin Michalek, Bartosz Patkowski, Tomasz Gawron
2020 J jnl
CoRR
Krzysztof Lakomy, Maciej Marcin Michalek
2020 J jnl
IEEE Robotics Autom. Lett.
Maciej Marcin Michalek
2019 C conf
IV
Tomasz Gawron, Mateusz Mydlarz, Maciej Marcin Michalek
2019 J jnl
Int. J. Control
Maciej Marcin Michalek, Dariusz Pazderski
2019 C conf
IV
Maciej Marcin Michalek
2019 conf
RoMoCo
Maciej Marcin Michalek, Runhua Wang, Xuebo Zhang
2018 A conf
IROS
Tomasz Gawron, Maciej Marcin Michalek
2018 conf
ECC
Maciej Marcin Michalek, Dariusz Pazderski
2018 J jnl
Eng. Appl. Artif. Intell.
Alvaro Javier Prado, Maciej Marcin Michalek, Fernando Alfredo Auat Cheeín
2018 conf
CCTA
Maciej Marcin Michalek, Lounis Adouane
2018 J jnl
J. Intell. Robotic Syst.
Maciej Marcin Michalek, Andrea L'Afflitto, Takateru Urakubo
2018 J jnl
J. Intell. Robotic Syst.
Tomasz Gawron, Maciej Marcin Michalek
2018 conf
CCTA
Tomasz Gawron, Maciej Marcin Michalek
2018 J jnl
J. Intell. Robotic Syst.
Maciej Marcin Michalek, Tomasz Gawron
2017 J jnl
IEEE Trans. Control. Syst. Technol.
Maciej Marcin Michalek
2017 conf
KKA
Krzysztof Lakomy, Maciej Marcin Michalek
2017 conf
RoMoCo
Maciej Marcin Michalek, Wojciech Adamski
2017 conf
KKA
Tomasz Gawron, Maciej Marcin Michalek
2017 conf
RoMoCo
Krzysztof Lakomy, Maciej Marcin Michalek
2017 conf
AIM
Tomasz Gawron, Maciej Marcin Michalek
2016 J jnl
IEEE Trans. Control. Syst. Technol.
Maciej Marcin Michalek
2016 C conf
ACC
Maciej Marcin Michalek
2016 conf
ECC
Maciej Marcin Michalek
2015 J jnl
J. Intell. Robotic Syst.
Maciej Marcin Michalek, Marcin Kielczewski, Tomasz Jedwabny
2015 C conf
ACC
Maciej Marcin Michalek
2015 conf
CASE
Maciej Marcin Michalek
2014 J jnl
J. Intell. Robotic Syst.
Maciej Marcin Michalek
2014 conf
ECC
Maciej Marcin Michalek
2014 J jnl
J. Intell. Robotic Syst.
Maciej Marcin Michalek, Grzegorz Granosik
2013 conf
RoMoCo
Maciej Marcin Michalek
2011 B conf
Intelligent Vehicles Symposium
Maciej Marcin Michalek
2010 J jnl
J. Intell. Robotic Syst.
Maciej Marcin Michalek, Piotr Dutkiewicz, Marcin Kielczewski, Dariusz Pazderski
redb/extractors/decompiler/bninja/analysis/scores.py
← Index redb/extractors/decompiler/bninja/analysis/scores.py python
from collections import deque
from binaryninja import highlevelil
from binaryninja.enums import HighLevelILOperation


class ObfuscationScores:
    def __init__(self, hlil_function):
        self.function = hlil_function
        self._basic_blocks = list(hlil_function.basic_blocks) if hlil_function and hlil_function.basic_blocks else []
        self._block_count = len(self._basic_blocks)

    def flattened_score(self):
        """
        A heuristic for detecting control flow flattening from Tim Blazytko.
        Source: https://www.synthesis.to/2021/03/03/flattening_detection.html
        """
        if self._block_count == 0:
            return 0.0

        max_flattening_ratio = 0.0

        for basic_block in self._basic_blocks:
            dominated = get_dominated_by(basic_block)
            if not any(edge.source in dominated for edge in basic_block.incoming_edges):
                continue
            ratio = len(dominated) / self._block_count
            if ratio > max_flattening_ratio:
                max_flattening_ratio = ratio

        return max_flattening_ratio

    def MBA_score(self):
        """
        Score for MBA is obtained by the number of instructions that have at least one arithmetic operation and
        one logic operation DIVIDED by the number of instructions.
        """
        total = 0
        mba_count = 0

        for ins in self.function.instructions:
            total += 1
            if uses_mba(ins):
                mba_count += 1

        if total == 0:
            return 0.0

        return mba_count / total

def get_dominated_by(dominator):
    """
    Get the dominators that are dominated by the given dominator.
    (To recall the theory, a basic block B is called dominator for A if every path from START
    to A must include B)
    """
    result = set()
    worklist = deque([dominator])

    while worklist:
        block = worklist.popleft()
        if block in result:
            continue
        result.add(block)
        worklist.extend(block.dominator_tree_children)

    return result

_ARITHMETIC_OPS = frozenset({
    HighLevelILOperation.HLIL_ADD,
    HighLevelILOperation.HLIL_NEG,
    HighLevelILOperation.HLIL_SUB,
    HighLevelILOperation.HLIL_MUL,
    HighLevelILOperation.HLIL_DIVS,
    HighLevelILOperation.HLIL_MODS,
})

_LOGIC_OPS = frozenset({
    HighLevelILOperation.HLIL_NOT,
    HighLevelILOperation.HLIL_AND,
    HighLevelILOperation.HLIL_OR,
    HighLevelILOperation.HLIL_XOR,
    HighLevelILOperation.HLIL_LSR,
    HighLevelILOperation.HLIL_LSL,
})

_MBA_OPS = _ARITHMETIC_OPS | _LOGIC_OPS

def uses_mba(hlil_instruction):
    uses_logic = False
    uses_arithmetic = False
    stack = [hlil_instruction]

    while stack:
        instruction = stack.pop()

        if not isinstance(instruction, highlevelil.HighLevelILInstruction):
            continue

        op = instruction.operation

        if op not in _MBA_OPS:
            for operand in instruction.operands:
                if isinstance(operand, highlevelil.HighLevelILInstruction):
                    stack.append(operand)
            continue

        if op in _ARITHMETIC_OPS:
            uses_arithmetic = True
        else:
            uses_logic = True

        if uses_logic and uses_arithmetic:
            return True

        for operand in instruction.operands:
            if isinstance(operand, highlevelil.HighLevelILInstruction):
                stack.append(operand)

    return False