Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Engenharia reversa no android

Engenharia reversa no android

Transmissão: https://www.youtube.com/watch?v=s_MaHUIpXWQ

Descrição: Nesta talk falaremos um pouco sobre como podemos aplicar engenharia reversa no android, abrindo algumas "caixas pretas" para entender como elas funcionam internamente e como podemos utilizar algumas ferramentas para modificar um app sem ter o código fonte dele.

Por: Alex Soares e Jeziel Lago

Alex Soares de Siqueira

November 13, 2020
Tweet

More Decks by Alex Soares de Siqueira

Other Decks in Technology

Transcript

  1. Não nos responsabilizamos pelo uso criminoso do conhecimento que aqui

    será apresentado. O objetivo desta apresentação é demonstrar práticas de engenharia reversa que podem ajudar os desenvolvedores entenderem o quanto seus apps podem ser alterados e manipulados, para que possam construir apps mais seguros.
  2. Engenharia Reversa no Android - Alex Soares - Jeziel Lago

    O que é Engenharia Reversa? "A Engenharia Reversa é uma atividade que trabalha com um produto existente (um software, uma peça mecânica, uma placa de computador, etc.) tentando entender como este produto funciona, o que ele faz exatamente e como ele se comporta em todas as circunstâncias." 4
  3. Engenharia Reversa no Android - Alex Soares - Jeziel Lago

    Quando fazemos Engenharia Reversa? Quando queremos trocar, modificar uma peça (ou um software) por outro, com as mesmas características ou entender como esta funciona e não temos acesso a sua documentação. 5
  4. Engenharia Reversa no Android - Alex Soares - Jeziel Lago

    Processo de compilação de um .apk javac / kotlinc dx aapt / aapt2 zipaligner apksigner 8
  5. 10

  6. Engenharia Reversa no Android - Alex Soares - Jeziel Lago

    Processo de decompilação de um .apk 13 myapp.apk resources AndroidManifest.xml 1.unzip 2.baksmali .smali 3.convert .dex .java
  7. Engenharia Reversa no Android - Alex Soares - Jeziel Lago

    15 override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout. activity_main) } Kotlin
  8. Engenharia Reversa no Android - Alex Soares - Jeziel Lago

    16 # virtual methods .method protected onCreate(Landroid/os/Bundle;)V .locals 1 .param p1, "savedInstanceState" # Landroid/os/Bundle; .line 8 invoke-super {p0, p1}, Landroidx/appcompat/app/AppCompatActivity;->onCreate(Landroid/os/Bundle;)V .line 9 const v0, 0x7f0b001c invoke-virtual {p0, v0}, Lcom/example/myapplication/MainActivity;->setContentView(I)V .line 10 return-void .end method Smali
  9. Engenharia Reversa no Android - Alex Soares - Jeziel Lago

    17 //Registers • Store any type of data • Structure ◦ v0, v1, v2 … -> Local ◦ p0, p1, p2 … -> Params Smali
  10. Engenharia Reversa no Android - Alex Soares - Jeziel Lago

    18 //Data type • I -> Integer • J -> Long 64 • Z -> Boolean • D -> Double 64 • F -> Float • S -> Short • C -> Char • V -> Void Smali
  11. Engenharia Reversa no Android - Alex Soares - Jeziel Lago

    19 //Classes • Ljava/lang/Object; -> java.lang.Object //Arrays • [I -> int[] • [[I -> int[][] Smali
  12. Engenharia Reversa no Android - Alex Soares - Jeziel Lago

    20 # virtual methods .method protected onCreate(Landroid/os/Bundle;)V .locals 1 .param p1, "savedInstanceState" # Landroid/os/Bundle; .line 8 invoke-super {p0, p1}, Landroidx/appcompat/app/AppCompatActivity;->onCreate(Landroid/os/Bundle;)V .line 9 const v0, 0x7f0b001c invoke-virtual {p0, v0}, Lcom/example/myapplication/MainActivity;->setContentView(I)V .line 10 return-void .end method Smali
  13. Engenharia Reversa no Android - Alex Soares - Jeziel Lago

    21 invoke-super {p0, p1}, Landroidx/appcompat/app/AppCompatActivity ;->onCreate(Landroid/os/Bundle ;)V Smali
  14. Engenharia Reversa no Android - Alex Soares - Jeziel Lago

    22 invoke-super {p0, p1}, Landroidx/appcompat/app/AppCompatActivity ;->onCreate(Landroid/os/Bundle;)V Smali androidx.appcompat.app.AppCompatActivity
  15. Engenharia Reversa no Android - Alex Soares - Jeziel Lago

    23 invoke-super {p0, p1}, Landroidx/appcompat/app/AppCompatActivity; ->onCreate(Landroid/os/Bundle;)V Smali
  16. Engenharia Reversa no Android - Alex Soares - Jeziel Lago

    24 invoke-super {p0, p1}, Landroidx/appcompat/app/AppCompatActivity;->onCreate (Landroid/os/Bundle ;)V Smali Param: android.os.Bundle Return: Void
  17. Engenharia Reversa no Android - Alex Soares - Jeziel Lago

    Como alterar o código de um apk? • Manipulação de código em runtime ◦ Frida • Manipulação de código estaticamente ◦ Edição de código e recompilação 26
  18. Engenharia Reversa no Android - Alex Soares - Jeziel Lago

    Ferramentas • ADB • Apktool • Dex2jar • Jar2dex • JadX • Keytool • Jarsigner • Secbox 28
  19. Engenharia Reversa no Android - Alex Soares - Jeziel Lago

    Ferramentas • ADB • Apktool • Dex2jar • Jar2dex • JadX • Keytool • Jarsigner • Secbox 29 O Android Debug Bridge (adb) é uma ferramenta de linha de comando versátil que permite a comunicação com um dispositivo. O adb facilita uma variedade de ações do dispositivo, como instalar e depurar apps, e fornece acesso a um shell Unix que pode ser usado para executar diversos comandos em um dispositivo.
  20. Engenharia Reversa no Android - Alex Soares - Jeziel Lago

    Ferramentas • ADB • Apktool • Dex2jar • Jar2dex • JadX • Keytool • Jarsigner • Secbox 30 Apktool é uma ferramenta para engenharia reversa de aplicativos android. Ele pode decodificar o código e arquivos de resources de um apk e reconstruí-los (rebuild) após modificações.
  21. Engenharia Reversa no Android - Alex Soares - Jeziel Lago

    Ferramentas • ADB • Apktool • Dex2jar • Jar2dex • JadX • Keytool • Jarsigner • Secbox 31 Dex2jar como o próprio nome sugere, é uma ferramenta para transformar arquivos .dex em arquivos .jar.
  22. Engenharia Reversa no Android - Alex Soares - Jeziel Lago

    Ferramentas • ADB • Apktool • Dex2jar • Jar2dex • JadX • Keytool • Jarsigner • Secbox 32 Jar2dex é uma ferramenta para transformar arquivos .jar em arquivos .dex.
  23. Engenharia Reversa no Android - Alex Soares - Jeziel Lago

    Ferramentas • ADB • Apktool • Dex2jar • Jar2dex • JadX • Keytool • Jarsigner • Secbox 33 JadX é uma ferramenta de linha de comando (mas também com modo GUI) para converter .dex e .apk em código Java.
  24. Engenharia Reversa no Android - Alex Soares - Jeziel Lago

    Ferramentas • ADB • Apktool • Dex2jar • Jar2dex • JadX • Keytool • Jarsigner • Secbox 34 Keytool é um utilitário de gerenciamento de chaves e certificados. Ele permite que os usuários administrem seus próprios pares de chaves pública / privada e certificados associados para uso na auto-autenticação.
  25. Engenharia Reversa no Android - Alex Soares - Jeziel Lago

    Ferramentas • ADB • Apktool • Dex2jar • Jar2dex • JadX • Keytool • Jarsigner • Secbox 35 O jarsigner usa uma chave e informações de um certificado a partir de uma keystore para gerar uma assinatura digital para um arquivo .jar.
  26. Engenharia Reversa no Android - Alex Soares - Jeziel Lago

    Ferramentas • ADB • Apktool • Dex2jar • Jar2dex • JadX • Keytool • Jarsigner • Secbox 36 SecBox é uma 'caixa' de scripts para engenharia reversa no android. Ela permite extrair qualquer apk instalado em um dispositivo, decompilar o apk, recompilar um apk modificado e assiná-lo.
  27. 38

  28. Engenharia Reversa no Android - Alex Soares - Jeziel Lago

    Modificando e recompilando um apk - Exemplo 39 1. Obter o apk do app X 2. Decompilar o apk 3. Criar um código malicioso para obter dados do usuário 4. Modificar o código do apk para carregar o payload malicioso 5. Recompilar e assinar o apk
  29. Engenharia Reversa no Android - Alex Soares - Jeziel Lago

    Ofuscação de código "No desenvolvimento de software, ofuscação é o ato deliberado de criar código-fonte ou código de máquina que é difícil para o ser humano entender.." 42
  30. Engenharia Reversa no Android - Alex Soares - Jeziel Lago

    Ofuscação de código "No desenvolvimento de software, ofuscação é o ato deliberado de criar código-fonte ou código de máquina que é difícil para o ser humano entender.." "Especialistas em segurança rejeitaram essa visão já em 1851, e aconselham que a ofuscação nunca deve ser o único mecanismo de segurança." 43
  31. Engenharia Reversa no Android - Alex Soares - Jeziel Lago

    https://www.guardsquare.com/en/pro ducts/proguard/manual/introduction 44 ProGuard
  32. 47

  33. "O único sistema verdadeiramente seguro é aquele que está desligado,

    guardado em um bloco de concreto e selado em uma sala forrada de chumbo com guardas armados - e mesmo assim tenho minhas dúvidas." - Eugene H. Spafford 50
  34. 51

  35. Engenharia Reversa no Android - Alex Soares - Jeziel Lago

    Ferramentas 53 Android Debug Bridge (adb) Apktool skylot/jadx: Dex to Java decompiler keytool-Key and Certificate Management Tool jarsigner jeziellago/SecBox Frida
  36. Engenharia Reversa no Android - Alex Soares - Jeziel Lago

    Referências http://www.ic.uff.br/~otton/graduacao/informaticaI/apresentacoes/eng_reversa.pdf https://www.youtube.com/channel/UCcYYP7JizTd24W9Mr7FIhxw https://github.com/JesusFreke/smali https://en.wikipedia.org/wiki/Obfuscation_(software) https://en.wikipedia.org/wiki/Security_through_obscurity https://developer.android.com/studio/build/shrink-code https://www.guardsquare.com/en/products/proguard/manual/introduction 54
  37. Engenharia Reversa no Android - Alex Soares - Jeziel Lago

    Imagens https://pixabay.com/ https://www.flaticon.com/ https://imgflip.com/memegenerator https://giphy.com/ 55