Rafael Sachetto Oliveira

38 papers C 6Misc 8Journal 8Unranked 14
YearRankTypeTitle / Venue / Authors
2024 J jnl
Medical Image Anal.
Julià Camps, Lucas Arantes Berg, Zhinuo Jenny Wang, Rafael Sebastián, Leto Luana Riebel, Rubén Doste, Xin Zhou, Rafael Sachetto Oliveira, James A. Coleman, Brodie Lawson, Vicente Grau, Kevin Burrage, Alfonso Bueno-Orovio, Rodrigo Weber dos Santos, Blanca Rodríguez
2024 conf
ICCS (4)
Lucas Marins Ramalho de Lima, Rafael Rocha Ribeiro, Lucas Arantes Berg, Bernardo Martins Rocha, Rafael Sachetto Oliveira, Rodrigo Weber dos Santos, Joventino Oliveira Campos
2023 conf
ICCSA (1)
Vitor Elisiário Carmo, Vinícius da Fonseca Vieira, Rafael Sachetto Oliveira, Carolina Ribeiro Xavier
2023 conf
ICCSA (2)
Rafael Sachetto Oliveira, Carolina Ribeiro Xavier
2023 conf
ICCS (2)
Yan Barbosa Werneck, Rodrigo Weber dos Santos, Bernardo Martins Rocha, Rafael Sachetto Oliveira
2023 conf
ICCSA (Workshops 9)
Thaís de Jesus Soares, João Pedro Banhato Pereira, Yan Barbosa Werneck, Yuri Rhios Araújo Santos, Tiago Dutra Franco, Joventino Oliveira Campos, Rafael Sachetto Oliveira, Thaiz Ruberti Schmal, Thiago Gonçalves Schroder e. Souza, Bernardo Martins Rocha, Rodrigo Weber dos Santos
2022 conf
CinC
Leto Luana Riebel, Zhinuo J. Wang, Hector Martinez-Navarro, Cristian Trovato, Jacopo Biasetti, Rafael Sachetto Oliveira, Rodrigo Weber dos Santos, Blanca Rodríguez
2022 J jnl
J. Comput. Sci.
Carolina Ribeiro Xavier, Rafael Sachetto Oliveira, Vinícius da Fonseca Vieira, Bernardo Martins Rocha, Ruy Freitas Reis, Bárbara de Melo Quintela, Marcelo Lobosco, Rodrigo Weber dos Santos
2021 J jnl
J. Comput. Sci.
Elnaz Pouranbarani, Lucas Arantes Berg, Rafael Sachetto Oliveira, Rodrigo Weber dos Santos, Anders Nygren
2021 conf
ICCS (2)
Rafael Sachetto Oliveira, Carolina Ribeiro Xavier, Vinícius da Fonseca Vieira, Bernardo Martins Rocha, Ruy Freitas Reis, Bárbara de Melo Quintela, Marcelo Lobosco, Rodrigo Weber dos Santos
2020 J jnl
Commun. Nonlinear Sci. Numer. Simul.
Johnny Moreira Gomes, Rafael Sachetto Oliveira, Marcelo Lobosco, Rodrigo Weber dos Santos
2020 conf
EMBC
Elnaz Pouranbarani, Lucas A. Berg, Rafael Sachetto Oliveira, Rodrigo Weber dos Santos, Anders Nygren
2018 conf
ICCS (3)
Rodrigo Carvalho, Guilherme Andrade, Diogo Santana, Thiago Silveira, Daniel Madeira, Rafael Sachetto Oliveira, Renato Ferreira, Leonardo Rocha
2017 Misc conf
ICCS
Gabriel Spada Ramos, Guilherme Andrade, Rafael Sachetto Oliveira, Daniel Madeira, Renan Carvalho, Renato Ferreira, Fernando Mourão, Leonardo Rocha
2016 Misc conf
ICCS
Danilo Melo, Sávyo Toledo, Fernando Mourão, Rafael Sachetto Oliveira, Guilherme Andrade, Renato Ferreira, Srinivasan Parthasarathy, Leonardo Rocha
2016 C conf
ICA3PP
Raphael Pereira Cordeiro, Rafael Sachetto Oliveira, Rodrigo Weber dos Santos, Marcelo Lobosco
2016 J jnl
J. Comput. Appl. Math.
Joventino Oliveira Campos, Rafael Sachetto Oliveira, Rodrigo Weber dos Santos, Bernardo M. Rocha
2016 conf
IWBBIO
Rafael Sachetto Oliveira, Bruno Gouvêa de Barros, Johnny Moreira Gomes, Marcelo Lobosco, Sergio Alonso Muñoz, Markus Bär, Rodrigo Weber dos Santos
2016 conf
IWBBIO
Rafael Sachetto Oliveira, Bernardo M. Rocha, Denise Burgarelli, Wagner Meira Jr., Rodrigo Weber dos Santos
2015 Misc conf
SAC
Leonardo Rocha, Gabriel Spada Ramos, Rodrigo Chaves, Rafael Sachetto Oliveira, Daniel Madeira, Felipe Viegas, Guilherme Andrade, Sérgio Daniel, Marcos André Gonçalves, Renato Ferreira
2014 Misc conf
SAC
Guilherme Andrade, Gabriel Spada Ramos, Daniel Madeira, Rafael Sachetto Oliveira, Esteban Clua, Renato Ferreira, Leonardo Rocha
2013
Rafael Sachetto Oliveira
2013 Misc conf
ICCS
Guilherme Andrade, Gabriel Spada Ramos, Daniel Madeira, Rafael Sachetto Oliveira, Renato Ferreira, Leonardo Rocha
2012 J jnl
Int. J. High Perform. Syst. Archit.
Rafael Sachetto Oliveira, Bernardo M. Rocha, Denise Burgarelli, Wagner Meira Jr., Rodrigo Weber dos Santos
2012 conf
ICCSA (1)
Rafael Sachetto Oliveira, Bernardo M. Rocha, Denise Burgarelli, Wagner Meira Jr., Rodrigo Weber dos Santos
2012 Misc conf
ICCS
Guilherme Andrade, Felipe Teixeira, Carolina Ribeiro Xavier, Rafael Sachetto Oliveira, Leonardo Rocha, Alexandre G. Evsukoff
2012 J jnl
Comput. Math. Methods Medicine
Bruno Gouvêa de Barros, Rafael Sachetto Oliveira, Wagner Meira Jr., Marcelo Lobosco, Rodrigo Weber dos Santos
2011 C conf
WEBIST
Alan Cardoso, Daniel Rocha, Rafael Sachetto Oliveira, Leonardo Rocha, Fernando Mourão, Wagner Meira Jr.
2011 conf
PPAM (2)
Rafael Sachetto Oliveira, Bernardo Martins Rocha, Ronan Mendonça Amorim, Fernando Otaviano Campos, Wagner Meira Jr., Elson Magalhães Toledo, Rodrigo Weber dos Santos
2010 ch.
Scientific Computing with Multicore and Accelerators
Ümit V. Çatalyürek, Renato Ferreira, Timothy D. R. Hartley, George Teodoro, Rafael Sachetto Oliveira
2009 C conf
CLUSTER
George Teodoro, Rafael Sachetto Oliveira, Olcay Sertel, Metin N. Gurcan, Wagner Meira Jr., Ümit V. Çatalyürek, Renato Ferreira
2009 C conf
SBAC-PAD
George Teodoro, Rafael Sachetto Oliveira, Daniel Fireman, Dorgival O. Guedes, Renato Ferreira
2009 J jnl
Int. J. Parallel Program.
Carolina Ribeiro Xavier, Rafael Sachetto Oliveira, Vinícius da Fonseca Vieira, Rodrigo Weber dos Santos, Wagner Meira Jr.
2009 C conf
SBAC-PAD
Bruno Rocha Coutinho, George Luiz Medeiros Teodoro, Rafael Sachetto Oliveira, Dorgival Olavo Guedes Neto, Renato Antônio Celso Ferreira
2007 C conf
SBAC-PAD
Carolina Ribeiro Xavier, Rafael Sachetto Oliveira, Vinícius da Fonseca Vieira, Rodrigo Weber dos Santos, Wagner Meira Jr.
2006 conf
VECPAR
D. M. S. Martins, Fernando Otaviano Campos, Leandro Neumann Ciuffo, Rafael Sachetto Oliveira, Ronan M. Amorim, Vinícius F. Vieira, Nelson F. F. Ebecken, Ciro de Barros Barbosa, Rodrigo Weber dos Santos
2006 Misc conf
International Conference on Computational Science (1)
Ciro de Barros Barbosa, Rodrigo Weber dos Santos, Ronan M. Amorim, Leandro Neumann Ciuffo, Fairus Manfroi, Rafael Sachetto Oliveira, Fernando Otaviano Campos
2006 Misc conf
International Conference on Computational Science (1)
Fernando Otaviano Campos, Rafael Sachetto Oliveira, Rodrigo Weber dos Santos
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