Rami S. Abielmona

64 papers B 14C 3Misc 7Journal 9Unranked 29
YearRankTypeTitle / Venue / Authors
2025 conf
SysCon
Pavly Saleh, John Armitage, Phillip Curtis, Rami S. Abielmona, Emil M. Petriu
2021 conf
CIVEMSA
Rami S. Abielmona, Joel Muteba Kande, Moufid Harb, Jean Berger, Emil M. Petriu
2021 conf
SSCI
Andrew Mackenzie, Alexander Teske, Rami S. Abielmona, Emil M. Petriu
2021 conf
SysCon
Joel Muteba Kande, Rami S. Abielmona, Moufid Harb, Jean Berger, Rafael Falcon, Emil M. Petriu
2021 J jnl
CoRR
Mohammed I. Abouheaf, Shuzheng Qu, Wail Gueaieb, Rami S. Abielmona, Moufid Harb
2021 J jnl
IEEE Instrum. Meas. Mag.
Mohammed I. Abouheaf, Shuzheng Qu, Wail Gueaieb, Rami S. Abielmona, Moufid Harb
2021 conf
CIVEMSA
Alexandre Boyer, Rami S. Abielmona, Miodrag Bolic, Emil M. Petriu
2020 Misc conf
CogSIMA
Fatemeh Cheraghchi, Ibrahim Y. Abualhaol, Rafael Falcon, Rami S. Abielmona, Bijan Raahemi, Emil M. Petriu
2020 conf
SSCI
Vladislav Jidkov, Rami S. Abielmona, Alexander Teske, Emil M. Petriu
2019 conf
GECCO (Companion)
Jean Berger, Moufid Harb, Ibrahim Y. Abualhaol, Alexander Teske, Rami S. Abielmona, Emil M. Petriu
2019 B conf
AVSS
Roman Palenychka, Rami S. Abielmona, Francesco Rea, Emil M. Petriu
2019 C conf
FUSION
Ashwin Panchapakesan, Rami S. Abielmona, Emil M. Petriu
2018 conf
ICIAR
Roman M. Palenichka, Rafael Falcon, Rami S. Abielmona, Emil M. Petriu
2018 B conf
CEC
Jean Berger, Emmanuel Giasson, Mihai Florea, Moufid Harb, Alexander Teske, Emil M. Petriu, Rami S. Abielmona, Rafael Falcon, Nassirou Lo
2018 J jnl
IEEE Commun. Surv. Tutorials
Nicolas Primeau, Rafael Falcon, Rami S. Abielmona, Emil M. Petriu
2018 Misc conf
CogSIMA
Alexander Teske, Rafael Falcon, Rami S. Abielmona, Emil M. Petriu
2018 conf
IEEE BigData
Ibrahim Y. Abualhaol, Rafael Falcon, Rami S. Abielmona, Emil M. Petriu
2018 B conf
IJCNN
Ibrahim Y. Abualhaol, Rafael Falcon, Rami S. Abielmona, Emil M. Petriu
2018 J jnl
Inf. Sci.
Fatemeh Cheraghchi, Ibrahim Y. Abualhaol, Rafael Falcon, Rami S. Abielmona, Bijan Raahemi, Emil M. Petriu
2018 conf
Canadian AI
Ashwin Panchapakesan, Rami S. Abielmona, Rafael Falcon, Emil M. Petriu
2018 conf
CIVEMSA
Tolulope Akinbulire, Rafael Falcon, Rami S. Abielmona, Howard Schwartz
2017 conf
SSCI
Tolulope Akinbulire, Howard Schwartz, Rafael Falcon, Rami S. Abielmona
2017 conf
IEEE BigData
Fatemeh Cheraghchi, Ibrahim Y. Abualhaol, Rafael Falcon, Rami S. Abielmona, Bijan Raahemi, Emil M. Petriu
2017 B conf
DCOSS
Nicolas Primeau, Rafael Falcon, Rami S. Abielmona, Emil M. Petriu
2017 B conf
FUZZ-IEEE
Rafael Falcón, Rami S. Abielmona, Benjamin Desjardins, Emil M. Petriu
2017 Misc conf
CogSIMA
Nicolas Primeau, Rami S. Abielmona, Rafael Falcon, Emil M. Petriu
2017 Misc conf
CogSIMA
Alex Plachkov, Voicu Groza, Diana Inkpen, Emil M. Petriu, Rami S. Abielmona, Moufid Harb, Rafael Falcon
2016 conf
GECCO (Companion)
Alex Plachkov, Rami S. Abielmona, Moufid Harb, Rafael Falcon, Diana Inkpen, Voicu Groza, Emil M. Petriu
2016 ch.
Recent Advances in Computational Intelligence in Defense and Security
Phillip Curtis, Moufid Harb, Rami S. Abielmona, Emil M. Petriu
2016 conf
SSCI
Rafael Falcon, Benjamin Desjardins, Rami S. Abielmona, Emil M. Petriu
2016 B conf
CEC
Phillip Curtis, Moufid Harb, Rami S. Abielmona, Emil M. Petriu
2016 book
Rami S. Abielmona, Rafael Falcon, Nur Zincir-Heywood, Hussein A. Abbass
2016 B conf
CEC
Benjamin Desjardins, Rafael Falcon, Rami S. Abielmona, Emil M. Petriu
2015 B conf
CEC
Benjamin Desjardins, Rafael Falcon, Rami S. Abielmona, Emil M. Petriu
2015 Misc conf
CogSIMA
Rafael Falcon, Rami S. Abielmona, Sean Billings
2014 conf
CISDA
Phillip Curtis, Moufid Harb, Rami S. Abielmona, Emil M. Petriu
2014 C conf
FUSION
Rafael Falcon, Rami S. Abielmona, Erik Blasch
2014 conf
GECCO (Companion)
Jamieson McCausland, Rami S. Abielmona, Rafael Falcon, Ana-Maria Cretu, Emil M. Petriu
2014 conf
CISDA
Rafael Falcon, Rami S. Abielmona, Sean Billings, Alex Plachkov, Hussein A. Abbass
2014 Misc conf
CogSIMA
Amir Hossein Razavi, Diana Inkpen, Rafael Falcon, Rami S. Abielmona
2014 conf
SOFA (2)
Rami S. Abielmona, Rafael Falcon, Paris W. Vachon, Voicu Groza
2014 B conf
IEEE Congress on Evolutionary Computation
Hang Shao, Nathalie Japkowicz, Rami S. Abielmona, Rafael Falcon
2013 J jnl
IEEE Comput. Intell. Mag.
Rami S. Abielmona
2013 conf
CIVEMSA
Jamieson McCausland, George Di Nardo, Rafael Falcon, Rami S. Abielmona, Voicu Groza, Emil M. Petriu
2013 B conf
IEEE Congress on Evolutionary Computation
Ashwin Panchapakesan, Rami S. Abielmona, Emil M. Petriu
2013 conf
ROSE
Jamieson McCausland, Rami S. Abielmona, Rafael Falcon, Ana-Maria Cretu, Emil M. Petriu
2013 B conf
IEEE Congress on Evolutionary Computation
Ashwin Panchapakesan, Rami S. Abielmona, Emil M. Petriu
2012 B conf
IEEE Congress on Evolutionary Computation
Rafael Falcon, Rami S. Abielmona
2012 conf
CISDA
Rafael Falcón, Amiya Nayak, Rami S. Abielmona
2011 J jnl
IEEE Comput. Intell. Mag.
Rami S. Abielmona, Emil M. Petriu, Moufid Harb, Slawomir Wesolkowski
2010 J jnl
J. Ambient Intell. Humaniz. Comput.
Rami S. Abielmona, Emil M. Petriu, Thomas E. Whalen
2009 B conf
IJCNN
Moufid Harb, Rami S. Abielmona, Emil M. Petriu
2008 B conf
IJCNN
Moufid Harb, Rami S. Abielmona, Emil M. Petriu, Kamal Naji
2008 J jnl
IEEE Comput. Intell. Mag.
Rami S. Abielmona
2007 J jnl
IEEE Trans. Instrum. Meas.
Voicu Groza, Rami S. Abielmona, Mansour H. Assaf, Mohammed Elbadri, Mohammad El-Kadri, Arkan Khalaf
2007 Misc conf
SACI
Rami S. Abielmona, Emil M. Petriu, Voicu Groza
2006 conf
CCECE
Rami S. Abielmona, Voicu Groza, Arkan Khalaf
2005 conf
VECIMS
Rami S. Abielmona, Emil M. Petriu, Thomas E. Whalen
2005 conf
ROSE
Rami S. Abielmona, Emil M. Petriu, Thomas E. Whalen
2004 conf
WISES
Voicu Groza, Rami S. Abielmona, Mohammad El-Kadri, Nizar Sakr, Mohammed Elbadri
2004 conf
ROSE
Rami S. Abielmona, Emil M. Petriu, Voicu Z. Groza
2004 C conf
CIT
Mansour H. Assaf, Rami S. Abielmona, Payam Abolghasem, Sunil R. Das, Emil M. Petriu, Voicu Groza, Mehmet Sahinoglu
2003 conf
ROSE
Emil M. Petriu, Thomas E. Whalen, Rami S. Abielmona
2003 conf
Modelling, Identification and Control
Mansour H. Assaf, Rami S. Abielmona, Payam Abolghasem, Sunil R. Das, Emil M. Petriu, Voicu Groza
tests/unit/test_decompile_scores.py
← Index tests/unit/test_decompile_scores.py python
"""Unit tests for bninja/analysis/scores.py — ObfuscationScores."""
import sys
import pytest
from unittest.mock import MagicMock

# Install binaryninja stubs before importing
from tests.unit.conftest_binja_stubs import (
    install_binja_stubs,
    HighLevelILOperation,
)
bn_mock = install_binja_stubs()

from redb.extractors.decompiler.bninja.analysis.scores import (
    ObfuscationScores,
    get_dominated_by,
    uses_mba,
)
import binaryninja.highlevelil as hlil_mod


# ============================================================================
# Helper: Mock HLIL instruction
# ============================================================================

class MockHLILInstruction(hlil_mod.HighLevelILInstruction):
    """Mock HLIL instruction with operation and operands."""
    def __init__(self, operation, operands=None):
        self.operation = operation
        self.operands = operands or []


class MockHLILBasicBlock:
    """Mock HLIL basic block for flattened score testing."""
    def __init__(self, incoming_edges=None, dominator_tree_children=None):
        self.incoming_edges = incoming_edges or []
        self.dominator_tree_children = dominator_tree_children or []


# ============================================================================
# 5a. ObfuscationScores
# ============================================================================


class TestFlattenedScore:
    def test_flattened_score_no_back_edges(self):
        """Linear CFG with no back edges -> score 0.0."""
        block = MockHLILBasicBlock(incoming_edges=[], dominator_tree_children=[])
        func = MagicMock()
        func.basic_blocks = [block]
        scores = ObfuscationScores(func)
        assert scores.flattened_score() == 0.0

    def test_flattened_score_with_loop(self):
        """CFG with a back edge -> score > 0.0."""
        block = MockHLILBasicBlock(dominator_tree_children=[])
        # Create a back edge: an incoming edge whose source is in the dominated set
        edge = MagicMock()
        edge.source = block  # source IS the dominator -> back edge
        block.incoming_edges = [edge]
        func = MagicMock()
        func.basic_blocks = [block]
        scores = ObfuscationScores(func)
        assert scores.flattened_score() > 0.0

    def test_flattened_score_fully_flat(self):
        """Flattened CFG: one block dominates all -> ratio close to 1.0."""
        children = [MockHLILBasicBlock() for _ in range(4)]
        root = MockHLILBasicBlock(dominator_tree_children=children)
        # Back edge from root incoming
        edge = MagicMock()
        edge.source = root
        root.incoming_edges = [edge]
        all_blocks = [root] + children
        func = MagicMock()
        func.basic_blocks = all_blocks
        scores = ObfuscationScores(func)
        assert scores.flattened_score() == pytest.approx(1.0)


class TestMBAScore:
    def test_mba_score_no_mixed_ops(self):
        """Instructions with only arithmetic -> score 0.0."""
        instr = MockHLILInstruction(HighLevelILOperation.HLIL_ADD, operands=[])
        func = MagicMock()
        func.instructions = [instr]
        scores = ObfuscationScores(func)
        assert scores.MBA_score() == 0.0

    def test_mba_score_mixed_ops(self):
        """Instructions with arithmetic + logic -> score > 0.0."""
        inner_logic = MockHLILInstruction(HighLevelILOperation.HLIL_XOR, operands=[])
        outer_arith = MockHLILInstruction(
            HighLevelILOperation.HLIL_ADD, operands=[inner_logic]
        )
        func = MagicMock()
        func.instructions = [outer_arith]
        scores = ObfuscationScores(func)
        assert scores.MBA_score() > 0.0

    def test_mba_score_all_mixed(self):
        """Every instruction has both -> score 1.0."""
        inner_logic = MockHLILInstruction(HighLevelILOperation.HLIL_NOT, operands=[])
        outer_arith = MockHLILInstruction(
            HighLevelILOperation.HLIL_SUB, operands=[inner_logic]
        )
        func = MagicMock()
        func.instructions = [outer_arith]
        scores = ObfuscationScores(func)
        assert scores.MBA_score() == 1.0


class TestGetDominatedBy:
    def test_get_dominated_by(self):
        child1 = MockHLILBasicBlock(dominator_tree_children=[])
        child2 = MockHLILBasicBlock(dominator_tree_children=[])
        root = MockHLILBasicBlock(dominator_tree_children=[child1, child2])
        result = get_dominated_by(root)
        assert root in result
        assert child1 in result
        assert child2 in result
        assert len(result) == 3


class TestUsesMBA:
    def test_uses_mba_arithmetic_only(self):
        instr = MockHLILInstruction(HighLevelILOperation.HLIL_ADD, operands=[])
        assert uses_mba(instr) is False

    def test_uses_mba_logic_only(self):
        instr = MockHLILInstruction(HighLevelILOperation.HLIL_XOR, operands=[])
        assert uses_mba(instr) is False

    def test_uses_mba_mixed(self):
        inner = MockHLILInstruction(HighLevelILOperation.HLIL_AND, operands=[])
        outer = MockHLILInstruction(HighLevelILOperation.HLIL_ADD, operands=[inner])
        assert uses_mba(outer) is True