Kai Goebel

63 papers Misc 1Journal 47Unranked 13
YearRankTypeTitle / Venue / Authors
2025 J jnl
CoRR
Kai Goebel, Patrik Zips
2024 J jnl
Reliab. Eng. Syst. Saf.
Antonios Kamariotis, Konstantinos Tatsis, Eleni N. Chatzi, Kai Goebel, Daniel Straub
2024 J jnl
IEEE Comput. Intell. Mag.
Kai Goebel, Shantanu Rane
2024 J jnl
CoRR
Kristupas Bajarunas, Marcia Lourenco Baptista, Kai Goebel, Manuel Arias Chao
2024 J jnl
Reliab. Eng. Syst. Saf.
Kristupas Bajarunas, Marcia Lourenco Baptista, Kai Goebel, Manuel Arias Chao
2024 J jnl
CoRR
Antonios Kamariotis, Eleni N. Chatzi, Daniel Straub, Nikolaos Dervilis, Kai Goebel, Aidan J. Hughes, Geert Lombaert, Costas Papadimitriou, Konstantinos G. Papakonstantinou, Matteo Pozzi, Michael Todd, Keith Worden
2022 J jnl
Reliab. Eng. Syst. Saf.
Manuel Arias Chao, Chetan S. Kulkarni, Kai Goebel, Olga Fink
2022 J jnl
Artif. Intell.
Marcia Lourenco Baptista, Kai Goebel, Elsa M. P. Henriques
2021 J jnl
Neurocomputing
Marcia Lourenco Baptista, Elsa M. P. Henriques, Kai Goebel
2021 J jnl
Data
Manuel Arias Chao, Chetan S. Kulkarni, Kai Goebel, Olga Fink
2021 J jnl
IEEE Access
Madhav Mishra, Jesper Martinsson, Kai Goebel, Matti Rantatalo
2021 J jnl
J. Aerosp. Inf. Syst.
Daniel E. Hulse, Arpan Biswas, Christopher Hoyle, Irem Y. Tumer, Chetan S. Kulkarni, Kai Goebel
2021 J jnl
Reliab. Eng. Syst. Saf.
Gina Sierra, Elinirina Iréna Robinson, Kai Goebel
2021 J jnl
J. Comput. Inf. Sci. Eng.
Junchuan Shi, Tianyu Yu, Kai Goebel, Dazhong Wu
2020 J jnl
CoRR
Manuel Arias Chao, Chetan S. Kulkarni, Kai Goebel, Olga Fink
2020 J jnl
J. Aerosp. Inf. Syst.
Jueming Hu, Heinz Erzberger, Kai Goebel, Yongming Liu
2020 J jnl
CoRR
Yuan Tian, Manuel Arias Chao, Chetan S. Kulkarni, Kai Goebel, Olga Fink
2019 J jnl
Reliab. Eng. Syst. Saf.
Gina Sierra, Marcos E. Orchard, Kai Goebel, Chetan S. Kulkarni
2019 J jnl
CoRR
Manuel Arias Chao, Chetan S. Kulkarni, Kai Goebel, Olga Fink
2018 J jnl
Reliab. Eng. Syst. Saf.
Madhav Mishra, Jesper Martinsson, Matti Rantatalo, Kai Goebel
2018 J jnl
Neurocomputing
Marco Rigamonti, Piero Baraldi, Enrico Zio, Indranil Roychoudhury, Kai Goebel, Scott Poll
2018 J jnl
Reliab. Eng. Syst. Saf.
Xiaoge Zhang, Sankaran Mahadevan, Shankar Sankararaman, Kai Goebel
2017 J jnl
Reliab. Eng. Syst. Saf.
Manuel Chiachío, Juan Chiachío, Shankar Sankararaman, Kai Goebel, John D. Andrews
2015 J jnl
IEEE Trans. Ind. Electron.
Bin Zhang, Liang Tang, Jonathan A. DeCastro, Michael J. Roemer, Kai Goebel
2015 J jnl
IEEE Instrum. Meas. Mag.
Chetan S. Kulkarni, George Gorospe, Matthew J. Daigle, Kai Goebel
2015 J jnl
Reliab. Eng. Syst. Saf.
Juan Chiachío, Manuel Chiachío, Shankar Sankararaman, Abhinav Saxena, Kai Goebel
2015 J jnl
J. Aerosp. Inf. Syst.
Edward Balaban, Abhinav Saxena, Sriram Narasimhan, Indranil Roychoudhury, Michael Koopmans, Carl Ott, Kai Goebel
2014 J jnl
IEEE Trans. Reliab.
Shankar Sankararaman, Matthew J. Daigle, Kai Goebel
2013 J jnl
IEEE Trans. Syst. Man Cybern. Syst.
Matthew J. Daigle, Kai Goebel
2012 conf
Infotech@Aerospace
Susan A. Frost, Kai Goebel, Jose Celaya
2012 conf
Infotech@Aerospace
Jose Celaya, Abhinav Saxena, Kai Goebel
2012 conf
Infotech@Aerospace
Sonia Vohnout, Byoung Kim, Neil Kunst, Bill Gleeson, Robert Wagoner, Edward Balaban, Kai Goebel
2012 J jnl
Expert Syst. Appl.
Jonny Carlos da Silva, Abhinav Saxena, Edward Balaban, Kai Goebel
2012 J jnl
IEEE Trans. Reliab.
Pradeep Lall, Prashant Gupta, Kai Goebel
2012 J jnl
IEEE Trans. Reliab.
Pradeep Lall, Ryan Lowe, Kai Goebel
2012 conf
Infotech@Aerospace
Chetan S. Kulkarni, Jose Celaya, Gautam Biswas, Kai Goebel
2012 J jnl
IEEE Trans. Ind. Electron.
Pradeep Lall, Ryan Lowe, Kai Goebel
2012 conf
Infotech@Aerospace
Abhinav Saxena, Indranil Roychoudhury, Jose Celaya, Bhaskar Saha, Sankalita Saha, Kai Goebel
2012 conf
Infotech@Aerospace
Brian Bole, Kai Goebel, George J. Vachtsevanos
2011 J jnl
IEEE Trans. Ind. Electron.
Pradeep Lall, Chandan Bhat, Madhura Hande, Vikrant More, Rahul Vaidya, Kai Goebel
2009 J jnl
IEEE Trans. Reliab.
Nishad Patil, Jose Celaya, Diganta Das, Kai Goebel, Michael G. Pecht
2009 J jnl
IEEE Trans. Instrum. Meas.
Bhaskar Saha, Kai Goebel, Scott Poll, Jon Christophersen
2008 J jnl
AI Mag.
Jerry T. Ball, Chris Arney, Samuel G. Collins, Mitchell Marcus, Sergei Nirenburg, Antonio Chella, Kai Goebel, Jason H. Li, Margaret Lyell, Brian Magerko, Riccardo Manzotti, Clayton T. Morrison, Tim Oates, Mark O. Riedl, Goran Trajkovski, Walt Truszkowski, N. Serdar Uckun
2008 J jnl
IEEE Syst. J.
Kai Goebel, Weizhong Yan
2007 conf
AAAI Fall Symposium: Artificial Intelligence for Prognostics
Bhaskar Saha, Kai Goebel, Scott Poll, Jon Christophersen
2007 conf
AAAI Fall Symposium: Artificial Intelligence for Prognostics
Mark Schwabacher, Kai Goebel
2007 J jnl
AI Mag.
William Cheetham, Kai Goebel
2007 ed.
AAAI Fall Symposium: Artificial Intelligence for Prognostics
George J. Vachtsevanos, N. Serdar Uckun, Kai Goebel
2007 conf
AAAI Fall Symposium: Artificial Intelligence for Prognostics
Asif Khalak, Kai Goebel
2007 conf
MCDM
Kalyan Veeramachaneni, Weizhong Yan, Kai Goebel, Lisa Ann Osadciw
2007 conf
AAAI Fall Symposium: Artificial Intelligence for Prognostics
Liang Tang, Gregory J. Kacprzynski, Kai Goebel, Johan Reimann, Marcos E. Orchard, Abhinav Saxena, Bhaskar Saha
2005 J jnl
IEEE Trans. Syst. Man Cybern. Part C
Raj Subbu, Kai Goebel, Dean K. Frederick
2005 J jnl
AI Mag.
Ion Muslea, Virginia Dignum, Daniel D. Corkill, Catholijn M. Jonker, Frank Dignum, Silvia Coradeschi, Alessandro Saffiotti, Dan Fu, Jeff Orkin, William Cheetham, Kai Goebel, Piero P. Bonissone, Leen-Kiat Soh, Randolph M. Jones, Robert E. Wray III, Matthias Scheutz, Daniela Pucci de Farias, Shie Mannor, Georgios Theocharous, Doina Precup, Bamshad Mobasher, Sarabjot S. Anand, Bettina Berendt, Andreas Hotho, Hans W. Guesgen, Michael T. Rosenstein, Mohammad Ghavamzadeh
2005 conf
Multiple Classifier Systems
Piero P. Bonissone, Neil H. W. Eklund, Kai Goebel
2004 conf
Multiple Classifier Systems
Piero P. Bonissone, Kai Goebel, Weizhong Yan
2002 J jnl
AI Mag.
Jussi Karlgren, Pentti Kanerva, Björn Gambäck, Kenneth D. Forbus, Kagan Tumer, Peter Stone, Kai Goebel, Gaurav S. Sukhatme, Tucker R. Balch, Bernd Fischer, Doug Smith, Sanda M. Harabagiu, Vinay K. Chaudri, Mike Barley, Hans W. Guesgen, Thomas F. Stahovich, Randall Davis, James A. Landay
2001 ch.
Soft Computing in Case Based Reasoning
Bill Cheetham, Paul Cuddihy, Kai Goebel
2001 J jnl
Artif. Intell. Eng. Des. Anal. Manuf.
Kai Goebel
2001 Misc conf
FLAIRS
William Cheetham, Anil Varma, Kai Goebel
2001 J jnl
Artif. Intell. Eng. Des. Anal. Manuf.
Piero P. Bonissone, Kai Goebel
2001 J jnl
Artif. Intell. Eng. Des. Anal. Manuf.
Alice M. Agogino, Piero P. Bonissone, Kai Goebel, George J. Vachtsevanos
2000 J jnl
AI Mag.
David J. Musliner, Barney Pell, Wolff Dobson, Kai Goebel, Gautam Biswas, Sheila A. McIlraith, Giuseppina C. Gini, Sven Koenig, Shlomo Zilberstein, Weixiong Zhang
1999 J jnl
Proc. IEEE
Piero P. Bonissone, Yu-To Chen, Kai Goebel, Pratap S. Khedkar
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