Nedal Ababneh

29 papers B 4C 4Misc 2Journal 3Unranked 16
YearRankTypeTitle / Venue / Authors
2026 C conf
ICCE
Ammar Kamal Abasi, Nedal Ababneh, Moayad Aloqaily, Mohsen Guizani
2023 conf
NEW2AN/ruSMART (1)
Hamed Ahmed Almheiri, Shaikah Albreiki, Hessa Alnuaimi, Mahra Alsuwaidi, Salama Almarzooqi, Joseph Henry Anajemba, Nedal Ababneh, Otuu Obinna Ogbonnia
2023 Misc conf
SoftCOM
Joseph Henry Anajemba, Nedal Ababneh, Yasir Hamid, Atif Chowhan, Otuu Obinna, Emir Vajzovic
2022 conf
DSDE
Noura Alzaabi, Maryam Almsbehi, Hanin Almansoori, Maitha Alhosani, Nedal Ababneh
2022 conf
DSDE
Sultan Al Ali, Ebrahim Al Mehrzi, Ahmed Al Shamsi, Saif Al Zaabi, Khalid Al Hemieri, Nedal Ababneh
2021 conf
DSDE
Adeel Mohammed Alshamsi, Salem Matar Albaloushi, Mohammed Younes Alkhoori, Hamed Ahmed Almheiri, Nedal Ababneh
2021 conf
DSDE
Aaesha Alzaabi, Ayesha Aldoobi, Deena Alnuaimi, Latifa Alserkal, Mahra Alsuwaidi, Nedal Ababneh
2019 conf
AINA Workshops
Shafquat Hussain, Omid Ameri Sianaki, Nedal Ababneh
2019 conf
AINA Workshops
Nedal Ababneh, Omid Ameri Sianaki, Shafquat Hussain
2015 J jnl
Telecommun. Syst.
Nedal Ababneh, Nicholas Timmons, Jim Morrison
2012 Misc conf
SoftCOM
Antonio Manuel Ortiz, Nedal Ababneh, Nicholas Timmons, Jim Morrison
2012 conf
WWIC
Nedal Ababneh, Nicholas Timmons, Jim Morrison
2012 B conf
IWCMC
Nedal Ababneh, Nicholas Timmons, Jim Morrison
2012 C conf
ISCC
Nedal Ababneh, Nicholas Timmons, Jim Morrison
2012 conf
AINA Workshops
Nedal Ababneh, Nick F. Timmons, Jim Morrison, David C. Tracey
2012 B conf
WiMob
Nedal Ababneh, Antonio Manuel Ortiz, Nicholas Timmons, Jim Morrison
2012 conf
Wireless Days
Nedal Ababneh, Jean-Louis Rougier
2012 conf
ADHOC-NOW
Nedal Ababneh, Antonio Manuel Ortiz, Nicholas Timmons, Jim Morrison
2012 B conf
WCNC
Nedal Ababneh, Jean-Louis Rougier
2010 conf
CNSR
Nedal Ababneh, Anastasios Viglas, S. Selvakennedy, Nadia Boukhatem
2010 conf
WCNIS
Nedal Ababneh, Houda Labiod
2010 B conf
AINA
Houda Labiod, Nedal Ababneh, Miguel Garcia de la Fuente
2010 conf
WCNIS
Nedal Ababneh
2010 J jnl
Int. J. Distributed Sens. Networks
Nedal Ababneh
2010 conf
Med-Hoc-Net
Nedal Ababneh, Houda Labiod
2010 conf
CNSR
Nedal Ababneh, S. Selvakennedy, Jahan Hassan, Nadia Boukhatem
2009 C conf
WOWMOM
Nedal Ababneh, Anastasios Viglas, Houda Labiod, Nadia Boukhatem
2007 C conf
PDCAT
Nedal Ababneh, S. Selvakennedy
2006 J jnl
Int. J. Wirel. Opt. Commun.
Nedal Ababneh, Selvakennedy Selvadurai
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