Magdy A. El-Moursy

62 papers C 9Journal 23Unranked 29
YearRankTypeTitle / Venue / Authors
2022 J jnl
IEEE Access
Eman Youssef, Hamed Elsimary, Magdy A. El-Moursy, Hassan Mostafa, Ahmed K. F. Khattab
2020 conf
MWSCAS
Eman Youssef, Hamed A. Elsemary, Magdy A. El-Moursy, Ahmed K. F. Khattab, Hassan Mostafa
2020 J jnl
J. Parallel Distributed Comput.
Ali A. El-Moursy, Fadi N. Sibai, Magdy A. El-Moursy, Ahmed S. S. Mohamed
2020 J jnl
CoRR
Pavly Salah Zaki, Marco Magdy William, Bolis Karam Soliman, Kerolos Gamal Alexsan, Keroles K. Khalil, Magdy A. El-Moursy
2019 C conf
ISCAS
Islam Gamal, Abdulrahman Badawy, Awab M. W. Al-Habal, Mohammed E. K. Adawy, Keroles K. Khalil, Magdy A. El-Moursy, Ahmed K. F. Khattab
2019 J jnl
Microprocess. Microsystems
Islam Gamal, Abdulrahman Badawy, Awab M. W. Al-Habal, Mohammed E. K. Adawy, Keroles K. Khalil, Magdy A. El-Moursy, Ahmed K. F. Khattab
2019 conf
ICVES
Abdelrahman El-Amin, Seif Eldawlatly, Ahmed Attia, Omar Hammad, Osama Nasr, Osama Ghozlan, Remon Raouf, Ahmed M. Hamed, Hany Eldawlatly, Magdy A. El-Moursy
2019 J jnl
J. Parallel Distributed Comput.
Sayed Taha Muhammad, Mohamed Saad, Ali A. El-Moursy, Magdy A. El-Moursy, Hesham F. A. Hamed
2019 J jnl
IEEE Trans. Very Large Scale Integr. Syst.
Dina M. Ellaithy, Magdy A. El-Moursy, Amal Zaki, Abdelhalim Zekry
2019 J jnl
J. Circuits Syst. Comput.
Mona Safar, Magdy A. El-Moursy, Ahmed Tarek, Ahmed Emad, Ahmed Hesham, Ashraf Salem, Mohsen Mahroos
2019 J jnl
J. Circuits Syst. Comput.
Mona Safar, Magdy A. El-Moursy, Mohamed Abdelsalam, Ayman Bakr, Keroles K. Khalil, Ashraf Salem
2018 J jnl
Microelectron. J.
Amr Baher, Ahmed N. El-Zeiny, Ahmed Aly, Ahmed Hussein Khalil, Adham Hassan, Abdelrahman Saeed, Karim Abo El Makarem, Magdy A. El-Moursy, Hassan Mostafa
2018 C conf
ISCAS
Mona Safar, Keroles K. Khalil, Magdy A. El-Moursy, Mohamed Abdelsalam
2017 conf
ICM
Dina M. Ellaithy, Magdy A. El-Moursy, Ghada Hamdy, Amal Zaki, Abdelhalim Zekry
2017 J jnl
J. Parallel Distributed Comput.
Sayed Taha Muhammad, Magdy A. El-Moursy, Ali A. El-Moursy, Hesham F. A. Hamed
2017 J jnl
IEEE Trans. Very Large Scale Integr. Syst.
Dina M. Ellaithy, Magdy A. El-Moursy, Ghada H. Ibrahim, Amal Zaki, Abdelhalim Zekry
2017 conf
SoCC
Sayed Taha Muhammad, Ali A. El-Moursy, Magdy A. El-Moursy, Hesham F. A. Hamed
2017 conf
MTV
Ahmed Abdel-Haleem, Magdy A. El-Moursy
2016 J jnl
Integr.
Rabab Ezz-Eldin, Magdy A. El-Moursy, Hesham F. A. Hamed
2016 J jnl
Microelectron. J.
Ratshih S. Abd El-Azeem, Magdy A. El-Moursy, Amin M. Nassar, Ahmed Gharib, Nahla T. Abou-El-Kheir, Moataz S. El-Kharashi
2016 conf
IDT
Ratshih S. Abd El-Azeem, Magdy A. El-Moursy, Amin M. Nassar, Ahmed Gharib, Nahla T. Abou-El-Kheir, Moataz S. El-Kharashi
2016 conf
MWSCAS
Omar G. Lotfy, Ahmed A. Kassem, Emad M. Nassief, Hassan A. Ali, Mario R. Ayoub, Magdy A. El-Moursy, Mohammed M. Farag
2016 J jnl
IEEE Trans. Very Large Scale Integr. Syst.
Rabab Ezz-Eldin, Magdy A. El-Moursy, Hesham F. A. Hamed
2016 conf
MTV
Amr B. Darwish, Magdy A. El-Moursy, Mohamed Dessouky
2015 conf
ICECS
Rabab Ezz-Eldin, Magdy A. El-Moursy, Hesham F. A. Hamed
2015 J jnl
Integr.
Rabab Ezz-Eldin, Magdy A. El-Moursy, Hesham F. A. Hamed
2015 ch.
Computational Intelligence in Digital and Network Designs and Applications
Sayed Taha Muhammad, Rabab Ezz-Eldin, Magdy A. El-Moursy, Amr M. Refaat
2015 conf
HPCC/CSS/ICESS
Rabab Ezz-Eldin, Magdy A. El-Moursy, Hesham F. A. Hamed
2015 conf
ICEAC
Sayed Taha Muhammad, Magdy A. El-Moursy, Ali A. El-Moursy, Amr M. Refaat
2015 J jnl
IEEE Trans. Very Large Scale Integr. Syst.
Sayed Taha Muhammad, Rabab Ezz-Eldin, Magdy A. El-Moursy, Ali A. El-Moursy, Amr M. Refaat
2014 conf
IDT
Magdy A. El-Moursy, Ayman Sheirah, Mona Safar, Ashraf Salem
2014 conf
IDT
Abd-Elrahman G. Qoutb, Abdullah M. El-Gunidy, Mohammed F. Tolba, Magdy A. El-Moursy
2013 conf
ICECS
Rabab Ezz-Eldin, Magdy A. El-Moursy, Hesham F. A. Hamed
2013 conf
IDT
Rabab Ezz-Eldin, Magdy A. El-Moursy, Hesham F. A. Hamed
2013 J jnl
J. Circuits Syst. Comput.
Magdy A. El-Moursy, Heba A. Shawkey
2013 conf
IDT
Sayed Taha Muhammad, Magdy A. El-Moursy, Ali A. El-Moursy, Amr M. Refaat
2013 conf
MTV
Mona Safar, Magdy A. El-Moursy, Ashraf Salem
2012 conf
ICICDT
Nahla T. Abou-El-Kheir, Moataz S. El-Kharashi, Magdy A. El-Moursy
2012 C conf
ISCAS
Rabab Ezz-Eldin, Magdy A. El-Moursy, Amr M. Refaat
2011 J jnl
Microelectron. J.
Magdy A. El-Moursy, Heba A. Shawkey
2011 conf
IDT
Rabab Ezz-Eldin, Magdy A. El-Moursy, Amr M. Refaat
2011 conf
MTV
Mona Safar, Magdy A. El-Moursy, Ashraf Salem, Mohamed Abdelsalam
2010 C conf
ISCAS
Mohamed A. Abd El-Ghany, Magdy A. El-Moursy, Darek Korzec, Mohammed Ismail
2010 conf
IDT
Lamiaa A. Elazm, Magdy A. El-Moursy, Hamed Elsimary, Moawad I. Dessouky, Farid Shawki
2010 C conf
ISCAS
Heba A. Shawkey, Magdy A. El-Moursy
2010 C conf
ISCAS
Mohamed A. Abd El-Ghany, Magdy A. El-Moursy, Darek Korzec, Mohammed Ismail
2009 C conf
ISCAS
Mohamed A. Abd El-Ghany, Magdy A. El-Moursy, Mohammed Ismail
2009 conf
ICECS
Mohamed A. Abd El-Ghany, Magdy A. El-Moursy, Darek Korzec, Mohammed Ismail
2009 conf
SoCC
Mohamed A. Abd El-Ghany, Magdy A. El-Moursy, Mohammed Ismail
2009 conf
ICECS
Mohamed A. Abd El-Ghany, Magdy A. El-Moursy, Darek Korzec, Mohammed Ismail
2007 J jnl
Integr.
Magdy A. El-Moursy, Eby G. Friedman
2006 C conf
ISCAS
Magdy A. El-Moursy, Eby G. Friedman
2005 J jnl
IEEE Trans. Very Large Scale Integr. Syst.
Magdy A. El-Moursy, Eby G. Friedman
2005 J jnl
IEEE Trans. Very Large Scale Integr. Syst.
Magdy A. El-Moursy, Eby G. Friedman
2004 conf
ISCAS (2)
Magdy A. El-Moursy, Eby G. Friedman
2004 J jnl
Integr.
Magdy A. El-Moursy, Eby G. Friedman
2004 J jnl
IEEE Trans. Very Large Scale Integr. Syst.
Magdy A. El-Moursy, Eby G. Friedman
2003 C conf
VLSI-SOC
Martin Margala, Magdy A. El-Moursy, Ali El-Moursy, Junmou Zhang, Wendi Beth Heinzelman
2003 conf
ISCAS (5)
Magdy A. El-Moursy, Eby G. Friedman
2003 conf
ACM Great Lakes Symposium on VLSI
Magdy A. El-Moursy, Eby G. Friedman
2003 conf
ICECS
Magdy A. El-Moursy, Eby G. Friedman
2003 conf
ACM Great Lakes Symposium on VLSI
Magdy A. El-Moursy, Eby G. Friedman
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