Maciej Majewski

51 papers C 2Misc 2Journal 17Unranked 29
YearRankTypeTitle / Venue / Authors
2026 J jnl
IEEE Access
Maciej Majewski, Wojciech Kacalak, Zbigniew Budniak, Ireneusz Czarnowski
2025 conf
EUROCON
Maciej Majewski, Ireneusz Czarnowski
2025 J jnl
J. Chem. Inf. Model.
Álvaro Serrano-Morrás, Yvonne Westermaier, Maciej Majewski, Xavier Barril
2024 J jnl
J. Chem. Inf. Model.
Albert Bou, Morgan C. Thomas, Sebastian Dittert, Carles Navarro, Maciej Majewski, Ye Wang, Shivam Patel, Gary Tresadern, Mazen Ahmad, Vincent Moens, Woody Sherman, Simone Sciabola, Gianni De Fabritiis
2024 J jnl
CoRR
Albert Bou, Morgan C. Thomas, Sebastian Dittert, Carles Navarro Ramírez, Maciej Majewski, Ye Wang, Shivam Patel, Gary Tresadern, Mazen Ahmad, Vincent Moens, Woody Sherman, Simone Sciabola, Gianni De Fabritiis
2024 J jnl
CoRR
Nikolai Schapin, Maciej Majewski, Mariona Torrens-Fontanals, Gianni De Fabritiis
2023 J jnl
CoRR
Nikolai Schapin, Maciej Majewski, Alejandro Varela-Rial, Carlos Arroniz, Gianni De Fabritiis
2023 J jnl
CoRR
Carles Navarro, Maciej Majewski, Gianni De Fabritiis
2023 J jnl
J. Chem. Inf. Model.
Francesc Sabanés Zariquiey, Adrià Pérez, Maciej Majewski, Emilio Gallicchio, Gianni De Fabritiis
2022 J jnl
CoRR
Maciej Majewski, Adrià Pérez, Philipp Thölke, Stefan Doerr, Nicholas E. Charron, Toni Giorgino, Brooke E. Husic, Cecilia Clementi, Frank Noé, Gianni De Fabritiis
2022 J jnl
J. Chem. Inf. Model.
Alejandro Varela-Rial, Iain Maryanow, Maciej Majewski, Stefan Doerr, Nikolai Schapin, José Jiménez-Luna, Gianni De Fabritiis
2021 J jnl
Sensors
Pawel Kopciewicz, Kazuyoshi Carvalho Akiba, Tomasz Szumlak, Sebastian Sitko, William Barter, Jan Buytaert, Lars Eklund, Karol Hennessy, Patrick Koppenburg, Thomas Latham, Maciej Majewski, Agnieszka Oblakowska-Mucha, Chris Parkes, Wenbin Qian, Jaap Velthuis, Mark Williams
2020 J jnl
J. Chem. Inf. Model.
Alejandro Varela-Rial, Maciej Majewski, Alberto Cuzzolin, Gerard Martínez-Rosell, Gianni De Fabritiis
2020 J jnl
J. Chem. Inf. Model.
Maciej Majewski, Xavier Barril
2020 J jnl
CoRR
Stefan Doerr, Maciej Majewski, Adrià Pérez, Andreas Krämer, Cecilia Clementi, Frank Noé, Toni Giorgino, Gianni De Fabritiis
2018 conf
CSOS (2)
Andrzej Tucholka, Maciej Majewski, Wojciech Kacalak, Zbigniew Budniak
2017 conf
CSOC (1)
Maciej Majewski, Wojciech Kacalak
2017 conf
CSOC (1)
Maciej Majewski, Wojciech Kacalak
2016 conf
CSOC (1)
Maciej Majewski, Wojciech Kacalak
2016 conf
ICR
Maciej Majewski, Wojciech Kacalak
2016 conf
CSOC (2)
Maciej Majewski, Wojciech Kacalak
2016 conf
ICANN (2)
Maciej Majewski, Wojciech Kacalak
2015 C conf
IDEAL
Wojciech Kacalak, Maciej Majewski, Zbigniew Budniak
2015 conf
ICONIP (4)
Keith Douglas Stuart, Maciej Majewski
2013 conf
ICONIP (2)
Dariusz Lipinski, Maciej Majewski
2013 C conf
IDEAL
Dariusz Lipinski, Maciej Majewski
2012 conf
ICONIP (4)
Wojciech Kacalak, Maciej Majewski
2012 conf
ICONIP (4)
Wojciech Kacalak, Maciej Majewski
2011 conf
ISNN (1)
Keith Douglas Stuart, Maciej Majewski, Ana Botella Trelis
2010 conf
ICAISC (2)
Wojciech Kacalak, Maciej Majewski, Jacek M. Zurada
2010 conf
ISNN (2)
Keith Douglas Stuart, Maciej Majewski, Ana Botella Trelis
2009 conf
ICIC (1)
Wojciech Kacalak, Maciej Majewski
2009 conf
ICIC (1)
Wojciech Kacalak, Maciej Majewski
2008 conf
ICES
Keith Douglas Stuart, Maciej Majewski
2008 conf
ICIC (2)
Keith Douglas Stuart, Maciej Majewski
2008 J jnl
Knowl. Based Syst.
Maciej Majewski, Jacek M. Zurada
2007 conf
IFSA (2)
Keith Douglas Stuart, Maciej Majewski
2007 ch.
Analysis and Design of Intelligent Systems using Soft Computing Techniques
Wojciech Kacalak, Keith Douglas Stuart, Maciej Majewski
2007 conf
ISNN (3)
Keith Douglas Stuart, Maciej Majewski
2006 conf
ISNN (2)
Maciej Majewski, Wojciech Kacalak
2006 conf
ICIC (2)
Maciej Majewski, Wojciech Kacalak
2006 conf
ICNC (1)
Wojciech Kacalak, Keith Douglas Stuart, Maciej Majewski
2006 conf
ICONIP (1)
Wojciech Kacalak, Maciej Majewski
2006 conf
ICIC (2)
Maciej Majewski, Wojciech Kacalak
2006 conf
ISNN (2)
Maciej Majewski, Wojciech Kacalak
2006 J jnl
Res. Comput. Sci.
Keith Douglas Stuart, Maciej Majewski, Wojciech Kacalak
2006 J jnl
Res. Comput. Sci.
David Cuesta-Frau, Keith Douglas Stuart, Maciej Majewski, Wojciech Kacalak
2005 conf
CORES
Wojciech Kacalak, Maciej Majewski
2005 Misc conf
IC-AI
Wojciech Kacalak, Maciej Majewski
2005 conf
KES (3)
Maciej Majewski, Wojciech Kacalak
2004 Misc conf
ICAISC
Wojciech Kacalak, Maciej Majewski
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