Hakem Beitollahi

60 papers A 3B 4C 8Journal 35Unranked 10
YearRankTypeTitle / Venue / Authors
2026 J jnl
Integr.
Sajad Eydivandi, Hakem Beitollahi
2025 J jnl
CoRR
Dana A Abdullah, Dana Rasul Hamad, Hakem Beitollahi, Ismail Y. Maolood, Abdulhady Abas Abdullah, Aso Khaleel Ameen
2025 J jnl
IET Cyper-Phys. Syst.: Theory & Appl.
Mohammadreza Saberikia, Hakem Beitollahi, Rasool Jader, Hamed Farbeh
2025 J jnl
IET Cyper-Phys. Syst.: Theory & Appl.
Mohammadreza Saberikia, Hakem Beitollahi, Hamed Farbeh
2025 J jnl
J. Syst. Archit.
Mostafa Tamimipour, Hakem Beitollahi, Maryline Chetto
2025 J jnl
J. Supercomput.
Jafar Majidpour, Hakem Beitollahi
2025 J jnl
J. Circuits Syst. Comput.
Mostafa Moghaddas, Marziye Pandi, Hakem Beitollahi
2025 J jnl
Int. J. Model. Simul. Sci. Comput.
Mohammad Reza Saberikia, Hakem Beitollahi, Rasool Jader, Hamed Farbeh
2025 J jnl
J. Supercomput.
Marziye Pandi, Mostafa Moghaddas, Hakem Beitollahi
2024 J jnl
Microprocess. Microsystems
Hakem Beitollahi, Marziye Pandi, Mostafa Moghaddas
2024 J jnl
Microprocess. Microsystems
Maryam Esmaeilian, Hakem Beitollahi
2024 J jnl
IEEE Access
Ababakr Ibrahim Rasul, Hakem Beitollahi
2024 J jnl
IEEE Access
Sarhang Jamal Ibrahim, Hakem Beitollahi
2024 J jnl
IEEE Access
Sarhang Jamal Ibrahim, Hakem Beitollahi
2023 J jnl
IEEE Access
Dyari Mohammad Sharif, Hakem Beitollahi, Mahdi Fazeli
2023 J jnl
Comput. Secur.
Dyari Mohammad Sharif, Hakem Beitollahi
2023 J jnl
IEEE Trans. Emerg. Top. Comput.
Paria Darbani, Hakem Beitollahi, Pejman Lotfi-Kamran
2023 J jnl
IEEE Trans. Emerg. Top. Comput.
Arash Salahvarzi, Mohsen Khosroanjam, Amir Mahdi Hosseini Monazzah, Hakem Beitollahi, Ümit Y. Ogras, Mahdi Fazeli
2022 J jnl
Microprocess. Microsystems
Amin Norollah, Hakem Beitollahi, Zahra Kazemi, Mahdi Fazeli
2022 J jnl
J. Circuits Syst. Comput.
Mohammad Reza Saberikia, Hakem Beitollahi
2022 J jnl
IEEE Access
Hakem Beitollahi, Dyari Mohammad Sharif, Mahdi Fazeli
2022 J jnl
IEEE Consumer Electron. Mag.
Amin Norollah, Zahra Kazemi, Hakem Beitollahi, David Hély
2022 J jnl
IET Comput. Digit. Tech.
Mahsa Mohammadi, Hakem Beitollahi
2022 J jnl
IEEE Trans. Very Large Scale Integr. Syst.
Paria Darbani, Nezam Rohbani, Hakem Beitollahi, Pejman Lotfi-Kamran
2021 conf
HPEC
Amin Norollah, Zahra Kazemi, Niloufar Sayadi, Hakem Beitollahi, Mahdi Fazeli, David Hély
2021 J jnl
J. Circuits Syst. Comput.
Mohammad Sajjad Aghadadi, Mahdi Fazeli, Hakem Beitollahi
2020 J jnl
IEEE Trans. Very Large Scale Integr. Syst.
Ali A. D. Farahani, Hakem Beitollahi, Mahmood Fathi
2020 J jnl
IEEE Trans. Parallel Distributed Syst.
Danesh Derafshi, Amin Norollah, Mohsen Khosroanjam, Hakem Beitollahi
2020 conf
SoCC
Mohammad Taherifard, Hakem Beitollahi, Fateme Jamali, Amin Norollah, Ahmad Patooghy
2019 conf
MWSCAS
Amin Norollah, Hakem Beitollahi, Ahmad Patooghy
2019 J jnl
J. Supercomput.
Zohreh Ekhtiyari, Vahidreza Moghaddas, Hakem Beitollahi
2019 conf
HPCS
Amin Norollah, Zahra Kazemi, Hakem Beitollahi
2019 J jnl
J. Electron. Test.
Seyed Mohammad Sebt, Ahmad Patooghy, Hakem Beitollahi
2019 J jnl
IEEE Trans. Very Large Scale Integr. Syst.
Amin Norollah, Danesh Derafshi, Hakem Beitollahi, Mahdi Fazeli
2018 conf
IST
Hossein Hosseinzadeh, Hakem Beitollahi, Nasser Mozayani
2018 J jnl
IET Comput. Digit. Tech.
Seyed Mohammad Sebt, Ahmad Patooghy, Hakem Beitollahi, Michel A. Kinsy
2018 conf
SoCC
Amin Norollah, Danesh Derafshi, Hakem Beitollahi, Ahmad Patooghy
2014 J jnl
J. Ambient Intell. Humaniz. Comput.
Hakem Beitollahi, Geert Deconinck
2012 conf
ANT/MobiWIS
Hakem Beitollahi, Geert Deconinck
2012 J jnl
Comput. Commun.
Hakem Beitollahi, Geert Deconinck
2012 J jnl
Comput. Commun.
Hakem Beitollahi, Geert Deconinck
2012 conf
ANT/MobiWIS
Hakem Beitollahi, Geert Deconinck
2011 B conf
TrustCom
Hakem Beitollahi, Geert Deconinck
2011 conf
NordSec
Hakem Beitollahi, Geert Deconinck
2011 J jnl
Int. J. Crit. Infrastructure Prot.
Hakem Beitollahi, Geert Deconinck
2010 C conf
PRDC
Hakem Beitollahi, Geert Deconinck
2009 B conf
NCA
Hakem Beitollahi, Geert Deconinck
2009 A conf
DSN
Giovanna Dondossola, Fabrizio Garrone, Judit Szanto, Geert Deconinck, T. Loix, Hakem Beitollahi
2009 C conf
PRDC
Hakem Beitollahi, Geert Deconinck
2008 A conf
IPDPS
Hakem Beitollahi, Geert Deconinck
2008 C conf
CRiSIS
Hakem Beitollahi, Geert Deconinck
2008 C conf
CRiSIS
Hakem Beitollahi, Geert Deconinck
2008 C conf
PRDC
Hakem Beitollahi, Geert Deconinck
2008 B conf
NCA
Hakem Beitollahi, Geert Deconinck
2008 C conf
CRITIS
Giovanna Dondossola, Geert Deconinck, Fabrizio Garrone, Hakem Beitollahi
2007 B conf
WADS
Geert Deconinck, Koen Vanthournout, Hakem Beitollahi, Zhifeng Qui, Rui Duan, Bart Nauwelaers, Emmanuel Van Lil, Johan Driesen, Ronnie Belmans
2007 A conf
IPDPS
Hakem Beitollahi, Seyed Ghassem Miremadi, Geert Deconinck
2006 C conf
PRDC
Hakem Beitollahi, Geert Deconinck
2006 C conf
PRDC
Hakem Beitollahi, Geert Deconinck
2005 conf
Parallel and Distributed Computing and Networks
Hakem Beitollahi, Seyed Ghassem Miremadi
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