Olivier Pauly

29 papers A* 2B 2Journal 4Unranked 20
YearRankTypeTitle / Venue / Authors
2019 conf
ICCV Workshops
Stefan Hinterstoisser, Olivier Pauly, Hauke Heibel, Martina Marek, Martin Bokeloh
2019 J jnl
CoRR
Stefan Hinterstoisser, Olivier Pauly, Hauke Heibel, Martina Marek, Martin Bokeloh
2019 conf
IPMI
Cosmin I. Bercea, Olivier Pauly, Andreas K. Maier, Florin C. Ghesu
2018 conf
MICCAI (2)
Siqi Liu, Daguang Xu, Shaohua Kevin Zhou, Olivier Pauly, Sasa Grbic, Thomas Mertelmeier, Julia Wicklein, Anna K. Jerebko, Weidong Cai, Dorin Comaniciu
2017 J jnl
CoRR
Siqi Liu, Daguang Xu, Shaohua Kevin Zhou, Thomas Mertelmeier, Julia Wicklein, Anna K. Jerebko, Sasa Grbic, Olivier Pauly, Weidong Cai, Dorin Comaniciu
2016 B conf
Image Processing
Nicolas Brieu, Olivier Pauly, Johannes Zimmermann, Gerd Karl Binnig, Günter Schmidt
2015 J jnl
Comput. Medical Imaging Graph.
Olivier Pauly, Benoit Diotte, Pascal Fallavollita, Simon Weidert, Ekkehard Euler, Nassir Navab
2015 conf
MICCAI (1)
Loïc Peter, Olivier Pauly, Pierre Chatelain, Diana Mateus, Nassir Navab
2014 conf
IPCAI
Olivier Pauly, Benoit Diotte, Séverine Habert, Simon Weidert, Ekkehard Euler, Pascal Fallavollita, Nassir Navab
2013 conf
3DV
Christian Rupprecht, Olivier Pauly, Christian Theobalt, Slobodan Ilic
2013 conf
Image-Guided Procedures
Okan Erat, Olivier Pauly, Simon Weidert, Peter-Helmut Thaller, Ekkehard Euler, Wolf Mutschler, Nassir Navab, Pascal Fallavollita
2013 conf
MICCAI (2)
Pierre Chatelain, Olivier Pauly, Loïc Peter, Seyed-Ahmad Ahmadi, Annika Plate, Kai Bötzel, Nassir Navab
2013 conf
3DV
Joé Lallemand, Olivier Pauly, Loren Arthur Schwarz, David Joseph Tan, Slobodan Ilic
2012 conf
MCV
Loïc Peter, Olivier Pauly, Sjoert B. G. Jansen, Peter A. Smethurst, Willem H. Ouwehand, Nassir Navab
2012 conf
ISBI
Yuxiang Chen, Thomas Hrabe, Stefan Pfeffer, Olivier Pauly, Diana Mateus, Nassir Navab, Friedrich Förster
2012 conf
MICCAI (3)
Olivier Pauly, Seyed-Ahmad Ahmadi, Annika Plate, Kai Boetzel, Nassir Navab
2012 conf
ECCV (4)
Ben Glocker, Olivier Pauly, Ender Konukoglu, Antonio Criminisi
2012
Olivier Pauly
2012 A* conf
ISMAR
Olivier Pauly, Amin Katouzian, Abouzar Eslami, Pascal Fallavollita, Nassir Navab
2011 conf
MCBR-CDS
Olivier Pauly, Diana Mateus, Nassir Navab
2011 conf
MCBR-CDS
Asad Safi, Maximilian Baust, Olivier Pauly, Victor Castañeda, Tobias Lasser, Diana Mateus, Nassir Navab, Rüdiger Hein, Mahzad Ziai
2011 conf
MICCAI (3)
Olivier Pauly, Ben Glocker, Antonio Criminisi, Diana Mateus, Axel Martinez-Möller, Stephan G. Nekolla, Nassir Navab
2011 conf
ICCV Workshops
Olivier Pauly, Diana Mateus, Nassir Navab
2010 conf
MICCAI (3)
Olivier Pauly, Tim Hauke Heibel, Nassir Navab
2010 conf
CLEF (Notebook Papers/LABs/Workshops)
Olivier Pauly, Diana Mateus, Nassir Navab
2010 J jnl
BMC Medical Imaging
Lorena Esposito, T. Saam, Peter Heider, Angelina Bockelbrink, Jaroslav Pelisek, D. Sepp, Regina Feurer, Claudia Winkler, Thomas Liebig, Katrin Holzer, Olivier Pauly, Suwad Sadikovic, Bernhard Hemmer, Holger Poppert
2009 conf
ISBI
Arash Taki, Alireza Roodaki, Olivier Pauly, Seyed Kamaledin Setarehdan, Gozde B. Unal, Nassir Navab
2009 A* conf
CVPR
Olivier Pauly, Nicolas Padoy, Holger Poppert, Lorena Esposito, Nassir Navab
2008 B conf
Image Processing
Olivier Pauly, Gözde B. Ünal, Gregory G. Slabaugh, Stephane G. Carlier, Tong Fang
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