Varun Jeoti

53 papers B 1C 1Journal 30Unranked 21
YearRankTypeTitle / Venue / Authors
2024 B conf
WCNC
Sohail Sarang, Goran M. Stojanovic, Micheal Drieberg, Varun Jeoti, Mikko Valkama
2024 J jnl
CoRR
Sohail Sarang, Goran M. Stojanovic, Micheal Drieberg, Varun Jeoti, Mikko Valkama
2023 J jnl
IEEE Trans. Instrum. Meas.
Mitar Simic, Adrian K. Stavrakis, Milan Radovanovic, Asif Iqbal, Varun Jeoti, Goran M. Stojanovic
2023 J jnl
IEEE Access
Asif Iqbal, Micheal Drieberg, Varun Jeoti, Azrina Abd Aziz, Goran M. Stojanovic, Mitar Simic, Nazabat Hussain
2023 J jnl
Entropy
Shahzad Khursheed, Nasreen Badruddin, Varun Jeoti, Dejan Vukobratovic, Manzoor Ahmed Hashmani
2023 J jnl
IEEE Access
Sohail Sarang, Goran M. Stojanovic, Micheal Drieberg, Stevan Stankovski, Kishore Bingi, Varun Jeoti
2022 J jnl
IEEE Trans. Instrum. Meas.
Mitar Simic, Adrian K. Stavrakis, Varun Jeoti, Goran M. Stojanovic
2022 J jnl
Peer-to-Peer Netw. Appl.
Wai Kheong Chong, Micheal Drieberg, Varun Jeoti, Rizwan Ahmad
2022 J jnl
Sensors
Hima Zafar, Asma Channa, Varun Jeoti, Goran M. Stojanovic
2022 conf
VTC Spring
Sohail Sarang, Goran M. Stojanovic, Micheal Drieberg, Stevan Stankovski, Varun Jeoti
2022 J jnl
IEEE Internet Things J.
Kasyap Suresh, Varun Jeoti, Micheal Drieberg, Socheatra Soeung, Asif Iqbal, Goran M. Stojanovic, Sohail Sarang
2022 J jnl
Sensors
Selvakumar Guruswamy, Milica Pojic, Jayashree Subramanian, Jasna Mastilovic, Sohail Sarang, Subbanagounder Arumugam, Goran Stojanovic, Varun Jeoti
2021 J jnl
Sensors
Komal Masroor, Varun Jeoti, Micheal Drieberg, Sovuthy Cheab, Sujan Rajbhandari
2021 J jnl
Sensors
Mehwish Hanif, Varun Jeoti, Mohamad Radzi Ahmad, Muhammad Zubair Aslam, Saima Qureshi, Goran Stojanovic
2021 J jnl
Comput. Electron. Agric.
Goran M. Stojanovic, Ankita Sinha, Adnan E. Ali, Varun Jeoti, Marija B. Radoicic, Darka D. Markovic, Maja M. Radetic
2020 J jnl
IEEE Access
Kasyap Suresh, Varun Jeoti, Socheatra Soeung, Micheal Drieberg, Mark Goh, Muhammad Zubair Aslam
2020 conf
WF-IoT
Kasyap Suresh, Varun Jeoti, Micheal Drieberg
2020 J jnl
J. Ambient Intell. Humaniz. Comput.
Faiza Nawaz, Varun Jeoti
2020 conf
CSNDSP
Shahzad Khursheed, Varun Jeoti, Nasreen Badruddin, Manzoor Ahmed Hashmani
2019 conf
Wireless Days
Imran Baig, Umer Farooq, Najam Ul Hasan, Manaf Zghaibeh, Varun Jeoti, Muhammad Imran
2019 J jnl
IEEE Access
David C. H. Bong, Varun Jeoti, Sovuthy Cheab, Peng Wen Wong
2018 J jnl
Sensors
Muhammad Zubair Aslam, Varun Jeoti, Saravanan Karuppanan, Aamir Farooq Malik, Asif Iqbal
2018 J jnl
IEEE Access
Khurram Shabih Zaidi, Varun Jeoti, Micheal Drieberg, Azlan Awang, Asif Iqbal
2018 J jnl
Telecommun. Syst.
Wai Kheong Chong, Micheal Drieberg, Varun Jeoti
2018 J jnl
J. Comput. Networks Commun.
Abid Muhammad Khan, Varun Jeoti, Muhammad Zaka ur Rehman, Muhammad Taha Jilani, Omer Chughtai, Mubashir Husain Rehmani
2017 conf
CCECE
Asif Iqbal, Varun Jeoti, Micheal Drieberg, Wong Peng Wen
2017 conf
CCECE
Abid Muhammad Khan, Varun Jeoti, Muhammad Zaka ur Rehman, Muhammad Taha Jilani
2017 J jnl
Int. J. Inf. Commun. Technol.
Elsadig Saeid, Varun Jeoti, Samir Brahim Belhaouari
2016 J jnl
Wirel. Pers. Commun.
Abdul Sattar Saand, Varun Jeoti, Mohamad Naufal Mohamad Saad
2016 J jnl
Telecommun. Syst.
Faiza Nawaz, Varun Jeoti
2016 J jnl
Computing
Faiza Nawaz, Varun Jeoti
2015 conf
IVIC
Vedpal Singh, Irraivan Elamvazuthi, Varun Jeoti, John George, Akshya Kumar Swain, Dileep Kumar
2015 J jnl
J. Netw. Comput. Appl.
Faiza Nawaz, Varun Jeoti
2015 J jnl
J. Comput. Sci.
Muhammad Asif Khan, Varun Jeoti
2014 conf
VTC Spring
Wai Kheong Chong, Micheal Drieberg, Varun Jeoti
2014 conf
SNDS
Muhammad Asif Khan, Varun Jeoti
2014 conf
ISPACS
Abdul Sattar Saand, Varun Jeoti, Mohamad Naufal Mohamad Saad
2014 J jnl
Wirel. Networks
Imran Baig, Varun Jeoti, Ataul Aziz Ikram, Muhammad Ayaz
2014 J jnl
Wirel. Networks
Faiza Nawaz, Varun Jeoti
2013 J jnl
Wirel. Pers. Commun.
Imran Baig, Varun Jeoti
2013 conf
MWSCAS
Silvia Anggraeni, Fawnizu Azmadi Hussin, Varun Jeoti
2013 J jnl
J. Netw. Comput. Appl.
Imran Baig, Muhammad Ayaz, Varun Jeoti
2011 C conf
APCC
Muhammad Imran Khan, Varun Jeoti, Aamir Saeed Malik, Muhammad Farhan Khan
2011 conf
ICeND
Muhammad Asif Khan, Varun Jeoti, Rana Shahid Manzoor
2010 conf
APCCAS
Imran Baig, Varun Jeoti
2010 conf
APCCAS
Imran Baig, Varun Jeoti
2010 conf
FGIT-SIP/MulGraB
Muhammad Imran Khan, Varun Jeoti, Aamir Saeed Malik
2010 conf
CICSyN
Imran Baig, Varun Jeoti
2009 conf
CICSyN
Alfateh M. Alhassan Mossa, Varun Jeoti
2008 conf
WINSYS
Rana Shahid Manzoor, Varun Jeoti, Nidal S. Kamel, Muhammad Asif
2008 conf
Asia International Conference on Modelling and Simulation
Sharif Amar Mohamed Sharif, Varun Jeoti
2001 conf
ISSPA
How Sun Dee, Varun Jeoti
2001 conf
ISSPA
How Sun Dee, Varun Jeoti
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