Rana Alabdan

21 papers Journal 20Unranked 1
YearRankTypeTitle / Venue / Authors
2026 J jnl
Int. J. Inf. Sec.
Amani K. Samha, Hanan Abdullah Mengash, Mohammed A. AlAqil, Hamed AlQahtani, Somia A. Asklany, Rana Alabdan
2025 J jnl
IEEE Trans. Big Data
Fahd N. Al-Wesabi, Marwa Ismael Obayya, Jamal M. Alsamri, Rana Alabdan, Nojood O. Aljehane, Sana Alazwari, Fahad F. Alruwaili, Manar Ahmed Hamza, A Swathi
2025 J jnl
Signal Image Video Process.
Rana Alabdan, Mohammed A. AlAqil, Eman M. Alanazi, Abu Sarwar Zamani
2024 J jnl
IEEE Trans. Consumer Electron.
Rana Alabdan, Hend Khalid Alkahtani, Kamal M. Othman, Roobaea Alroobaea, Sultan Abdullah Algarni, Abeer A. K. Alharbi, K. Shankar
2024 J jnl
IEEE Trans. Consumer Electron.
Marwa Ismael Obayya, Fahd N. Al-Wesabi, Rana Alabdan, Majdi Khalid, Mohammed Assiri, Mohamed Ibrahim Alsaid, Azza Elneil Osman, Amani A. Alneil
2024 J jnl
Cogn. Comput.
Rana Alabdan, Jamal M. Alsamri, Siwar Ben Haj Hassine, Faiz Abdullah Alotaibi, Saud S. Alotaibi, Ayman Yafoz, Mrim M. Alnfiai, Mesfer Al Duhayyim
2023 conf
SIGMIS-CPR
Eman Alyami, Ghadeer R. Alsaeed, Rana Alabdan, Deborah J. Armstrong, Sam Zaza
2023 J jnl
IEEE Access
Mohamed Ahmed Elfaki, Haya Mesfer Alshahrani, Khalid Mahmood, Rana Alabdan, Mofadal Alymani, Hussain Alshahrani, Abdelwahed Motwakel, Amani A. Alneil
2023 J jnl
IEEE Access
Rana Alabdan, Hanan Abdullah Mengash, Mohammed Maray, Faiz Abdullah Alotaibi, Sitelbanat Abdelbagi, Ahmed Mahmud
2023 J jnl
Future Gener. Comput. Syst.
Fahd N. Al-Wesabi, Hanan Abdullah Mengash, Radwa Marzouk, Nuha Alruwais, Randa Allafi, Rana Alabdan, Meshal Alharbi, Deepak Gupta
2022 J jnl
Sensors
Aisha Muhammad, Mohammed A. H. Ali, Sherzod Turaev, Rawad Abdulghafor, Ibrahim Haruna Shanono, Zaid Alzaid, Abdulrahman Alruban, Rana Alabdan, Ashit Kumar Dutta, Sultan Almotairi
2022 J jnl
Comput. Electr. Eng.
Mohammed Maray, Amani Abdulrahman Albraikan, Saud S. Alotaibi, Rana Alabdan, Mesfer Al Duhayyim, Waleed Khaild Al-Azzawi, Ahmed Alkhayyat
2022 J jnl
Comput. Electr. Eng.
Fadwa M. Alrowais, Mashael M. Asiri, Rana Alabdan, Radwa Marzouk, Anwer Mustafa Hilal, Ahmed Alkhayyat, Deepak Gupta
2022 J jnl
Expert Syst. J. Knowl. Eng.
Mohammed Maray, Mohammed Alghamdi, Fatma S. Alrayes, Saud S. Alotaibi, Sana Alazwari, Rana Alabdan, Mesfer Al Duhayyim
2022 J jnl
Expert Syst. J. Knowl. Eng.
Anwer Mustafa Hilal, Rana Alabdan, Mohamed Tahar Ben Othman, Siwar Ben Haj Hassine, Fahd N. Al-Wesabi, Mohammed Rizwanullah, Ishfaq Yaseen, Abdelwahed Motwakel
2022 J jnl
Image Vis. Comput.
Marwa Ismael Obayya, Saud S. Alotaibi, Sami Dhahbi, Rana Alabdan, Mesfer Al Duhayyim, Manar Ahmed Hamza, Mohammed Rizwanullah, Abdelwahed Motwakel
2022 J jnl
Comput. Networks
Anwer Mustafa Hilal, Amani Abdulrahman Albraikan, Sami Dhahbi, Saud S. Alotaibi, Rana Alabdan, Mesfer Al Duhayyim, Abdelwahed Motwakel, Ishfaq Yaseen
2021 J jnl
IEEE Access
Rawad Abdulghafor, Sherzod Turaev, Hamad Almohamedh, Rana Alabdan, Badr Almutairi, Abdulrazaq Almutairi, Sultan Almotairi
2021 J jnl
IEEE Access
Sumera Ahmad, Suraya Miskon, Rana Alabdan, Iskander Tlili
2020 J jnl
IEEE Access
Muhammad Sajjad Shabbir, Qamar Din, Rana Alabdan, Asifa Tassaddiq, Khalil Ahmad
2020 J jnl
Future Internet
Rana Alabdan
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