Mahmoud A. M. Albreem

60 papers B 1C 2Journal 39Unranked 18
YearRankTypeTitle / Venue / Authors
2025 J jnl
IEEE Signal Process. Lett.
Mahmoud A. M. Albreem, Heydar A. Saleem, Saeed Abdallah, Shahriar Shahabuddin
2025 J jnl
IEEE Syst. J.
Mahmoud A. M. Albreem, Alaa H. Al Habbash, Ammar M. Abu-Hudrouss, M.-T. O. El Astal
2025 conf
SSD
Khawla A. Alnajjar, Sam Ansari, Mohamed A. Mahmoud, Majid Alraeesi, Mohamed Alhmoudi, Sultan Alaskar, Doaa Abueida, Mahmoud A. M. Albreem, Soliman Mahmoud, Abir Hussain
2025 conf
SSD
Mahmoud A. M. Albreem, Hassan Idries, Sam Ansari, Saeed Abdallah, Shahriar Shahabuddin
2025 conf
SSD
Mahmoud A. M. Albreem, Layan Alami, Hassan Idries, Sam Ansari, Saeed Abdallah, Shahriar Shahabuddin, Abir Hussain
2025 J jnl
IEEE Trans. Commun.
Ahmed Abdelaziz Salem, Mahmoud A. M. Albreem, Khawla A. Alnajjar, Saeed Abdallah, Mohamed Saad
2025 conf
SSD
Nastaran Faraji, Sam Ansari, Khawla A. Alnajjar, Mahmoud A. M. Albreem, Soliman Mahmoud, Abir Hussain
2025 C conf
ISCAS
Shahriar Shahabuddin, Md. Salman Sakib, Hassan Malik, Mahmoud A. M. Albreem
2025 J jnl
Wirel. Networks
Ayman A. El-Saleh, Abdul Manan Sheikh, Mahmoud A. M. Albreem, Mohamed Shaik Honnurvali
2024 J jnl
IEEE Trans. Commun.
Saeed Abdallah, Ahmed I. Salameh, Mohamed Saad, Mahmoud A. M. Albreem
2024 J jnl
IEEE Trans. Commun.
Saeed Abdallah, Mahmoud A. M. Albreem, Mohamed Saad, Mahmoud Aldababsa
2024 J jnl
J. Commun. Networks
Mahmoud A. M. Albreem, Saeed Abdallah, Khawla A. Alnajjar, Mahmoud Aldababsa
2024 conf
ICSPIS
Saeed Abdallah, Mohamed Saad, Mahmoud A. M. Albreem
2023 conf
SmartNets
Ali Ahmad Suliman, Ahmad Bassim Humaidi, Mohammed Eid Eid, Mahmoud A. M. Albreem, Sam Ansari
2023 J jnl
IEEE Trans. Commun.
Saeed Abdallah, Zeno Verboven, Mohamed Saad, Mahmoud A. M. Albreem
2023 J jnl
Phys. Commun.
Mahmoud A. M. Albreem, Markku J. Juntti, Shahriar Shahabuddin, Saeed Abdallah, Alaa H. Alhabbash, Eqab R. F. Almajali
2023 conf
SmartNets
Ali J. Almasadeh, Khawla A. Alnajjar, Mahmoud A. M. Albreem
2023 J jnl
IEEE Access
Mahmoud A. M. Albreem, Khawla A. Alnajjar, Ali J. Almasadeh
2023 J jnl
J. Signal Process. Syst.
Lorenzo Mucchi, Shahriar Shahabuddin, Mahmoud A. M. Albreem, Saeed Abdallah, Stefano Caputo, Erdal Panayirci, Markku J. Juntti
2023 J jnl
Wirel. Networks
Mahmoud A. M. Albreem, Abdul Manan Sheikh, Mohammed J. K. Bashir, Ayman A. El-Saleh
2022 J jnl
Phys. Commun.
Anthony Ngozichukwuka Uwaechia, Nazleen Syahira Mohd Suhaimi, Nor Muzlifah Mahyuddin, Mahmoud A. M. Albreem, Fatima Balarabe Ilyasu, Najashi Gafai Bara'u, Asia'u Talatu Belgore
2022 J jnl
Comput. Commun.
Mahmoud A. M. Albreem, Alaa H. Al Habbash, Ammar M. Abu-Hudrouss, Tarik Adnan Almohamad
2022 J jnl
IEEE Commun. Surv. Tutorials
Mahmoud A. M. Albreem, Alaa H. Alhabbash, Shahriar Shahabuddin, Markku J. Juntti
2022 conf
ICCSPA
Ali J. Almasadeh, Khawla A. Alnajjar, Mahmoud A. M. Albreem
2021 conf
CITS
Salah Berra, Mahmoud A. M. Albreem, Maha Malek, Rui Dinis, Xingwang Li, Khaled M. Rabie
2021 J jnl
Wirel. Commun. Mob. Comput.
Ikhlas Ahmad, Haris Dildar, Wasi Ur Rehman Khan, Syed Amir Ali Shah, Shakir Ullah, Sadiq Ullah, Syed Muhammad Umar, Mahmoud A. M. Albreem, Mohammed H. Alsharif, Kasturi Vasudevan
2021 J jnl
IEEE Trans. Broadcast.
Alaa H. Al Habbash, Ammar M. Abu-Hudrouss, Mohammed Taha O. El Astal, Mahmoud A. M. Albreem, Salama S. Ikki
2021 conf
LASCAS
Shahriar Shahabuddin, Mahmoud A. M. Albreem, Mohammad Shahanewaz Shahabuddin, Zaheer Khan, Markku J. Juntti
2021 J jnl
IEEE Access
Mahmoud A. M. Albreem, Abdul Manan Sheikh, Mohammed H. Alsharif, Muzammil Jusoh, Mohd Najib Mohd Yasin
2021 J jnl
IEEE Access
Mohammed H. Alsharif, Kannadasan Raju, Abu Jahid, Mahmoud A. M. Albreem, Jamel Nebhen, Bong Jun Choi
2021 J jnl
IEEE Access
Mahmoud A. M. Albreem, Wael A. Salah, Arun Kumar, Mohammed H. Alsharif, Ali Hanafiah Rambe, Muzammil Jusoh, Anthony Ngozichukwuka Uwaechia
2021 J jnl
IEEE Access
Mahmoud A. M. Albreem, Alaa H. Al Habbash, Ammar M. Abu-Hudrouss, Salama S. Ikki
2021 J jnl
CoRR
Kasturi Vasudevan, A. Phani Kumar Reddy, Gyanesh Kumar Pathak, Mahmoud A. M. Albreem
2020 conf
UCET
Salah Berra, Mahmoud A. M. Albreem, Muntadher Suhail Abed
2020 J jnl
Entropy
Mahmoud A. M. Albreem, Mohammed H. Alsharif, Sunghwan Kim
2020 J jnl
Symmetry
Mahmoud A. M. Albreem, Mohammed H. Alsharif, Sunghwan Kim
2020 J jnl
Int. J. Wirel. Inf. Networks
Mahmoud A. M. Albreem, Kasturi Vasudevan
2020 J jnl
CoRR
Shahriar Shahabuddin, Mahmoud A. M. Albreem, Mohammad Shahanewaz Shahabuddin, Zaheer Khan, Markku J. Juntti
2020 J jnl
IEEE Access
Arun Kumar, Mahmoud A. M. Albreem, Manoj Gupta, Mohammed H. Alsharif, Sunghwan Kim
2020 J jnl
Symmetry
Mahmoud A. M. Albreem, Mohammed H. Alsharif, Sunghwan Kim
2020 conf
DRCN
Mahmoud A. M. Albreem, Ayman A. El-Saleh, Markku J. Juntti
2020 conf
NorCAS
Shahriar Shahabuddin, Muhammad Hasibul Islam, Mohammad Shahanewaz Shahabuddin, Mahmoud A. M. Albreem, Markku J. Juntti
2020 J jnl
CoRR
Shahriar Shahabuddin, Muhammad Hasibul Islam, Mohammad Shahanewaz Shahabuddin, Mahmoud A. M. Albreem, Markku J. Juntti
2020 J jnl
Symmetry
Mohammed H. Alsharif, Anabi Hilary Kelechi, Mahmoud A. M. Albreem, Shehzad Ashraf Chaudhry, M. Sultan Zia, Sunghwan Kim
2019 conf
ISCT
Mahmoud A. M. Albreem
2019 J jnl
IEEE Commun. Surv. Tutorials
Mahmoud A. M. Albreem, Markku J. Juntti, Shahriar Shahabuddin
2019 B conf
WCNC
Mahmoud A. M. Albreem, Ayman A. El-Saleh, Markku J. Juntti
2019 J jnl
Symmetry
Saleem Latteef Mohammed, Mohammed H. Alsharif, Sadik Kamel Gharghan, Imran Khan, Mahmoud A. M. Albreem
2018 conf
MENACOMM
Ayman A. El-Saleh, Mahmoud A. M. Albreem, Tauseef Rasheq Ahad, Waziha Raquib
2016 J jnl
Telecommun. Syst.
Mahmoud A. M. Albreem, Nur Afiqah Hani Binti Ismail
2016 J jnl
Wirel. Networks
Mahmoud A. M. Albreem, Mohd Fadzli Mohd Salleh
2015 conf
ICSIPA
Mahmoud A. M. Albreem, Muataz Hameed Salih
2015 J jnl
Wirel. Pers. Commun.
Mahmoud A. M. Albreem
2015 conf
ICSIPA
Omar F. Yousif, Muataz Hammed Salih, Layth A. Hassnawi, Mahmoud A. M. Albreem, Mays Q. Seddeq, Hiba M. Isam
2015 J jnl
Wirel. Pers. Commun.
Mahmoud A. M. Albreem, Mohd Fadzli Mohd Salleh
2014 J jnl
Wirel. Pers. Commun.
Mahmoud A. M. Albreem, Mohd Fadzli Mohd Salleh
2013 J jnl
IEICE Trans. Commun.
Mahmoud A. M. Albreem, Mohd Fadzli Mohd Salleh
2012 conf
CyberC
Mahmoud A. M. Albreem, Mohd Fadzli Mohd Salleh
2012 C conf
APCC
Mahmoud A. M. Albreem, M. F. M. Salleh
2011 J jnl
IEICE Electron. Express
Mahmoud A. M. Albreem, M. F. M. Salleh, S. P. K. Babu
tests/unit/test_apk_method_extractor.py
← Index tests/unit/test_apk_method_extractor.py python
"""
Unit tests for APK method-level content extraction, hashing, and similarity.

Tests SHA-256 normalization, ssdeep/TLSH computation, obfuscation detection,
and Dalvik-to-Java type conversion.
"""
import pytest

pytestmark = [pytest.mark.unit, pytest.mark.apk, pytest.mark.decompile]


class TestHashingFunctions:
    """Tests for hashing utility functions."""

    def test_sha256_deterministic(self):
        from redb.extractors.decompiler.apk.method_extractor import compute_sha256
        h1 = compute_sha256("invoke-virtual {p0}, Lcom/Foo;->bar()V")
        h2 = compute_sha256("invoke-virtual {p0}, Lcom/Foo;->bar()V")
        assert h1 == h2

    def test_sha256_hex_length(self):
        from redb.extractors.decompiler.apk.method_extractor import compute_sha256
        assert len(compute_sha256("test")) == 64

    def test_sha256_different_inputs(self):
        from redb.extractors.decompiler.apk.method_extractor import compute_sha256
        assert compute_sha256("aaa") != compute_sha256("bbb")

    def test_ssdeep_none_for_short(self):
        from redb.extractors.decompiler.apk.method_extractor import compute_ssdeep
        assert compute_ssdeep("short") is None

    def test_tlsh_none_for_short(self):
        from redb.extractors.decompiler.apk.method_extractor import compute_tlsh
        assert compute_tlsh("x") is None


class TestObfuscationDetection:
    """Tests for obfuscation indicator detection."""

    def test_short_method_name_single_char(self):
        from redb.extractors.decompiler.apk.method_extractor import detect_obfuscation_indicators
        r = detect_obfuscation_indicators("a", "Lcom/Foo;", "", 10)
        assert r["short_method_name"] is True

    def test_short_method_name_two_chars(self):
        from redb.extractors.decompiler.apk.method_extractor import detect_obfuscation_indicators
        r = detect_obfuscation_indicators("ab", "Lcom/Foo;", "", 10)
        assert r["short_method_name"] is True

    def test_normal_method_name(self):
        from redb.extractors.decompiler.apk.method_extractor import detect_obfuscation_indicators
        r = detect_obfuscation_indicators("onCreate", "Lcom/Foo;", "", 10)
        assert r["short_method_name"] is False

    def test_short_class_name(self):
        from redb.extractors.decompiler.apk.method_extractor import detect_obfuscation_indicators
        r = detect_obfuscation_indicators("foo", "Lcom/a;", "", 10)
        assert r["short_class_name"] is True

    def test_normal_class_name(self):
        from redb.extractors.decompiler.apk.method_extractor import detect_obfuscation_indicators
        r = detect_obfuscation_indicators("foo", "Lcom/example/MainActivity;", "", 10)
        assert r["short_class_name"] is False

    def test_string_encryption_detected(self):
        from redb.extractors.decompiler.apk.method_extractor import detect_obfuscation_indicators
        smali = (
            'const-string v0, "xyz"\n'
            'invoke-static {v0}, Lcom/Enc;->decrypt(Ljava/lang/String;)Ljava/lang/String;\n'
        )
        r = detect_obfuscation_indicators("m", "Lcom/Foo;", smali, 10)
        assert r["has_string_encryption"] is True

    def test_no_string_encryption(self):
        from redb.extractors.decompiler.apk.method_extractor import detect_obfuscation_indicators
        smali = 'const-string v0, "hello"\ninvoke-virtual {v0}, Ljava/lang/String;->length()I'
        r = detect_obfuscation_indicators("m", "Lcom/Foo;", smali, 10)
        assert r["has_string_encryption"] is False

    def test_reflection_detected(self):
        from redb.extractors.decompiler.apk.method_extractor import detect_obfuscation_indicators
        smali = 'invoke-virtual {v0, v1}, Ljava/lang/Class;->forName(Ljava/lang/String;)Ljava/lang/Class;'
        r = detect_obfuscation_indicators("m", "Lcom/Foo;", smali, 10)
        assert r["has_reflection_calls"] is True

    def test_no_reflection(self):
        from redb.extractors.decompiler.apk.method_extractor import detect_obfuscation_indicators
        smali = 'invoke-virtual {p0}, Lcom/Foo;->bar()V'
        r = detect_obfuscation_indicators("m", "Lcom/Foo;", smali, 10)
        assert r["has_reflection_calls"] is False

    def test_excessive_goto_detected(self):
        from redb.extractors.decompiler.apk.method_extractor import detect_obfuscation_indicators
        smali = "\n".join(["goto :label"] * 10)
        # threshold = max(5, 20*0.15=3) = 5, 10 > 5
        r = detect_obfuscation_indicators("m", "Lcom/Foo;", smali, 20)
        assert r["excessive_goto_count"] is True

    def test_no_excessive_goto(self):
        from redb.extractors.decompiler.apk.method_extractor import detect_obfuscation_indicators
        smali = "goto :label\nreturn-void"
        r = detect_obfuscation_indicators("m", "Lcom/Foo;", smali, 100)
        assert r["excessive_goto_count"] is False

    def test_goto_16_counted(self):
        from redb.extractors.decompiler.apk.method_extractor import detect_obfuscation_indicators
        smali = "\n".join(["goto/16 :label"] * 10)
        r = detect_obfuscation_indicators("m", "Lcom/Foo;", smali, 20)
        assert r["excessive_goto_count"] is True


class TestDalvikTypeConversion:
    """Tests for Dalvik-to-Java type conversion."""

    def test_void(self):
        from redb.extractors.decompiler.apk.method_extractor import dalvik_type_to_java
        assert dalvik_type_to_java("V") == "void"

    def test_primitives(self):
        from redb.extractors.decompiler.apk.method_extractor import dalvik_type_to_java
        assert dalvik_type_to_java("I") == "int"
        assert dalvik_type_to_java("Z") == "boolean"
        assert dalvik_type_to_java("J") == "long"
        assert dalvik_type_to_java("F") == "float"
        assert dalvik_type_to_java("D") == "double"
        assert dalvik_type_to_java("B") == "byte"
        assert dalvik_type_to_java("S") == "short"
        assert dalvik_type_to_java("C") == "char"

    def test_object_type(self):
        from redb.extractors.decompiler.apk.method_extractor import dalvik_type_to_java
        assert dalvik_type_to_java("Ljava/lang/String;") == "String"
        assert dalvik_type_to_java("Lcom/example/Foo;") == "Foo"

    def test_array_type(self):
        from redb.extractors.decompiler.apk.method_extractor import dalvik_type_to_java
        assert dalvik_type_to_java("[I") == "int[]"
        assert dalvik_type_to_java("[Ljava/lang/String;") == "String[]"

    def test_empty_returns_void(self):
        from redb.extractors.decompiler.apk.method_extractor import dalvik_type_to_java
        assert dalvik_type_to_java("") == "void"


class TestJavaPrototypeConversion:
    """Tests for method signature to Java prototype conversion."""

    def test_simple_method(self):
        from redb.extractors.decompiler.apk.method_extractor import dalvik_to_java_prototype
        assert dalvik_to_java_prototype("foo", "()V") == "void foo()"

    def test_method_with_params(self):
        from redb.extractors.decompiler.apk.method_extractor import dalvik_to_java_prototype
        result = dalvik_to_java_prototype("bar", "(ILjava/lang/String;)Z")
        assert result == "boolean bar(int, String)"

    def test_method_returning_object(self):
        from redb.extractors.decompiler.apk.method_extractor import dalvik_to_java_prototype
        result = dalvik_to_java_prototype("create", "()Lcom/example/Foo;")
        assert result == "Foo create()"

    def test_empty_signature(self):
        from redb.extractors.decompiler.apk.method_extractor import dalvik_to_java_prototype
        result = dalvik_to_java_prototype("m", "")
        assert "m()" in result


class TestDalvikParamParsing:
    """Tests for parsing Dalvik parameter descriptors."""

    def test_empty(self):
        from redb.extractors.decompiler.apk.method_extractor import _parse_dalvik_params
        assert _parse_dalvik_params("") == []

    def test_single_primitive(self):
        from redb.extractors.decompiler.apk.method_extractor import _parse_dalvik_params
        assert _parse_dalvik_params("I") == ["I"]

    def test_multiple_primitives(self):
        from redb.extractors.decompiler.apk.method_extractor import _parse_dalvik_params
        assert _parse_dalvik_params("IZJ") == ["I", "Z", "J"]

    def test_single_object(self):
        from redb.extractors.decompiler.apk.method_extractor import _parse_dalvik_params
        assert _parse_dalvik_params("Ljava/lang/String;") == ["Ljava/lang/String;"]

    def test_mixed(self):
        from redb.extractors.decompiler.apk.method_extractor import _parse_dalvik_params
        result = _parse_dalvik_params("ILjava/lang/String;Z")
        assert result == ["I", "Ljava/lang/String;", "Z"]

    def test_arrays(self):
        from redb.extractors.decompiler.apk.method_extractor import _parse_dalvik_params
        result = _parse_dalvik_params("[I[Ljava/lang/String;")
        assert result == ["[I", "[Ljava/lang/String;"]

    def test_two_objects(self):
        from redb.extractors.decompiler.apk.method_extractor import _parse_dalvik_params
        result = _parse_dalvik_params("Landroid/os/Bundle;Ljava/lang/String;")
        assert len(result) == 2