Mahmoud Abdel-Salam

31 papers Journal 31
YearRankTypeTitle / Venue / Authors
2026 J jnl
Clust. Comput.
Zhongmin Wang, Qifang Luo, Chuan Zhang, Shiwei Chen, Jun Yu, Mahmoud Abdel-Salam, Rui Zhong, Daihong Li
2026 J jnl
Appl. Soft Comput.
Vladimir Markovic, Luka Jovanovic, Miodrag Zivkovic, Branislav Radomirovic, Angelina Njegus, Mahmoud Abdel-Salam, Vladimir Simic, Nebojsa Bacanin
2026 J jnl
Algorithms
Saramma John Villoth, Petar Dabic, Tamara Zivkovic, Miodrag Zivkovic, Svetlana Andjelic, Milos Mravik, Vladimir Simic, Mahmoud Abdel-Salam, Nebojsa Bacanin
2026 J jnl
Int. J. Mach. Learn. Cybern.
Zhongmin Wang, Daihong Li, Jun Yu, Mahmoud Abdel-Salam, Gang Hu, Essam H. Houssein, Nagwan Abdel Samee, Rui Zhong
2026 J jnl
Int. J. Intell. Syst.
Abdulaziz Shehab, Mahmoud Abdel-Salam, Abdulrahman Alyami, Ibrahim M. El-Hasnony
2026 J jnl
Adv. Eng. Informatics
Gang Hu, Mao Cheng, Bin Shu, Mahmoud Abdel-Salam
2025 J jnl
Knowl. Based Syst.
Mahmoud Abdel-Salam, Amit Chhabra, Malik Braik, Farhad Soleimanian Gharehchopogh, Nebojsa Bacanin
2025 J jnl
Comput. Biol. Medicine
Mahmoud Abdel-Salam, Essam H. Houssein, Marwa M. Emam, Nagwan M. Abdel Samee, Mohamed T. Azam
2025 J jnl
Clust. Comput.
Miodrag Zivkovic, Luka Jovanovic, Vladimir Jocovic, Bosko Nikolic, Vico Zeljkovic, Mahmoud Abdel-Salam, Milos Mravik, Suresh Muthusamy, Nebojsa Bacanin
2025 J jnl
Clust. Comput.
Mahmoud Abdel-Salam, Diego Oliva, Marco Pérez-Cisneros, Ibrahim M. El-Hasnony
2025 J jnl
J. Big Data
Reham R. Mostafa, Saif S. Kareem, Mahmoud Abdel-Salam
2025 J jnl
Comput. Biol. Medicine
Mahmoud Abdel-Salam, Essam H. Houssein, Marwa M. Emam, Nagwan M. Abdel Samee, Farhad Soleimanian Gharehchopogh, Nebojsa Bacanin
2025 J jnl
SN Comput. Sci.
Mahmoud Abdel-Salam, Mohamed Elhoseny, Ibrahim M. El-Hasnony
2025 J jnl
Expert Syst. Appl.
Jing Yang, Yuangui Wu, Yuping Yuan, Haozhong Xue, Sami Bourouis, Mahmoud Abdel-Salam, Sunil Prajapat, Lip Yee Por
2025 J jnl
Knowl. Inf. Syst.
Chunqing Li, Zhongmin Wang, Jun Yu, Mahmoud Abdel-Salam, Essam H. Houssein, Rui Zhong
2025 J jnl
IEEE Trans. Consumer Electron.
Mohamed Elhoseny, Mahmoud Abdel-Salam, Jing Yang, Ibrahim M. El-Hasnony
2025 J jnl
IEEE Trans. Consumer Electron.
Jing Yang, Elaheh Rezvani, Muhammad Attique Khan, Behnam Heidari, Hussain Mobarak Albarakati, Sunil Prajapat, Mahmoud Abdel-Salam, Lip Yee Por
2025 J jnl
Knowl. Based Syst.
Mahmoud Abdel-Salam, Saleh Ali Alomari, Mohammad H. Almomani, Gang Hu, Sangkeum Lee, Kashif Saleem, Aseel Smerat, Laith Abualigah
2025 J jnl
Neural Comput. Appl.
Mahmoud Abdel-Salam, Heba Askr, Aboul Ella Hassanien
2025 J jnl
Int. J. Web Inf. Syst.
Mohamed Elhoseny, Mahmoud Abdel-Salam, Doaa Sami Khafaga, Eman Abdullah Aldakheel, Ibrahim M. El-Hasnony
2025 J jnl
Adv. Eng. Softw.
Gang Hu, Keke Song, Mahmoud Abdel-Salam
2025 J jnl
Neurocomputing
John Philipose Villoth, Miodrag Zivkovic, Tamara Zivkovic, Mahmoud Abdel-Salam, Mohamed Hammad, Luka Jovanovic, Vladimir Simic, Nebojsa Bacanin
2025 J jnl
SN Comput. Sci.
Mohamed Elhoseny, Mahmoud Abdel-Salam, Ibrahim M. El-Hasnony
2024 J jnl
Neural Comput. Appl.
Mahmoud Abdel-Salam, Neeraj Kumar, Shubham Mahajan
2024 J jnl
Expert Syst. Appl.
Mahmoud Abdel-Salam, Heba Askr, Aboul Ella Hassanien
2024 J jnl
Comput. Biol. Medicine
Mahmoud Abdel-Salam, Essam H. Houssein, Marwa M. Emam, Nagwan M. Abdel Samee, Mona M. Jamjoom, Gang Hu
2024 J jnl
Knowl. Based Syst.
Mahmoud Abdel-Salam, Ahmed Ibrahim Alzahrani, Fahad Alblehai, Raed Abu Zitar, Laith Abualigah
2024 J jnl
Knowl. Based Syst.
Mohamed Elhoseny, Mahmoud Abdel-Salam, Ibrahim M. El-Hasnony
2024 J jnl
Comput. Biol. Medicine
Mahmoud Abdel-Salam, Gang Hu, Emre Çelik, Farhad Soleimanian Gharehchopogh, Ibrahim M. El-Hasnony
2024 J jnl
Expert Syst. Appl.
Heba Askr, Mahmoud Abdel-Salam, Aboul Ella Hassanien
2023 J jnl
IEEE Access
Fatma Taher, Mahmoud Abdel-Salam, Mohamed Elhoseny, Ibrahim M. El-Hasnony
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