SlideShare uma empresa Scribd logo
1 de 12
Baixar para ler offline
“Crackeando” Aplicativos no Android
Vítima: Crackme PatchTest
Dificuldade: Média
Objetivo: Fazer um Patch no Aplicativo
Ferramentas: SDK/AVD Android Manager, Baskmali, Smali, Sign+, Winrar
Data: 13/11/2011
Feito por: C0M3ND4D0R
Advertência
Antes de começar a ler esse tutorial, você deve estar de acordo com todas as condições
a seguir:
Ao ler esse tutorial, o leitor aceita incondicionalmente sua total e exclusiva
responsabilidade legal, de acordo com as leis vigentes nesse país, pelo uso das
técnicas experimentais, educativas e/ou de investigação aqui mostradas. Caso não esteja
de acordo de qualquer das condições impostas, deverá então imediatamente eliminar esse
tutorial e todo material associado ao mesmo.
Iniciando
Aqui começo uma seqüência de tutoriais voltados ao “cracking” em aplicativos para o
android, logicamente, desde que se encontrem os crackmes criados para tal. Lembrando
que o propósito aqui apresentado é puramente didático com o intuito educacional.
No final deste tutorial estarei disponibilizando links para download das ferramentas
aqui utilizadas e referencias para serem estudadas.
Vamos iniciar mostrando o Android SDK Manager, porém, antes de começarmos é necessário
atualizar os pacotes (packages), eu recomendo que faça atualização de todos e isso
levará um tempo para finalizar.
Seguindo clique na aba Tools do (SDK) para chamar o AVD e criarmos um “device”, AVD é
Android Virtual Device Manager responsável pela emulação do android. Veja imagem
abaixo.
Clique em New… para criar o device, veja a imagem abaixo… assim deve ficar a
configuração, na seqüência clique em Create AVD.
Agora nosso Device devidamente criado.
Clicamos em Start… para iniciar a emulação.
Veja a imagem à cima, lembre-se sempre de marcar a caixa “Wipe user data” antes de
iniciar o emulador, essa opção é responsável por facilitar a desinstalação do crackme
vítima e de qualquer outro conteúdo ou aplicativo. Clicando em Launch podemos ver já
nosso emulador funcionando perfeitamente.
Iremos até o diretório do instalador das apks. APK é application package file (APK), é
o formato de arquivo usado para distribuir e instalar software de aplicativos para o
sistema operacional, Google Android. Mais informação no endereço abaixo:
http://en.wikipedia.org/wiki/APK_(file_format)
Vamos instalar nossa vítima, pra isso arrastamos o alvo para pasta onde se encontra o
instalador. No meu caso se encontra em: C:Arquivos de Programas(x86)Androidandroid-
sdkplatform-tools
Antes vamos listar as devices, esse é o comando… veja na imagem abaixo:
Nosso device listado, reparem em List of devices attached apenas um, e é justamente o
nosso.
Vamos agora instalar nosso crackme vítima, o comando pra isso é: adb install
“nome_do_aplicativo” (sem aspas), você pode ver na imagem abaixo:
Se tudo correr perfeitamente, aparecerá a mensagem: Success (Sucesso,Dããããã).
E já podemos visualizar o aplicativo (crackme) devidamente instalado.
Ao darmos duplo clique em nosso aplicativo, vejamos o que temos por esperar…
Hummmm, uma mensagem Not Registered nada simpático. Felizmente, por outro lado já temos
algo para procurar.
Precisamos analisar o crackme e encontrar essa mensagem de não registrado, para isso
será necessário extrair o conteúdo do arquivo.apk (Patchtest.apk), pode ser usado o
winrar, por exemplo, para fazer essa tarefa. O processo é muito parecido como o que é
feito em arquivos Java. Uma vez extraído seu conteúdo temos isso, o conteúdo que pode
ser visto na imagem abaixo.
E o que é mais importante no momento é o arquivo classes.dex. Porém, não podemos mais
utilizar o winrar para extrair o conteúdo do arquivo classes.dex, para essa tarefa será
usado uma outra ferramenta, o baksmali. O comando para isso pode ser visto na imagem
abaixo:
O –o CMNDDR é para criar uma pasta onde os arquivos serão todos extraídos. Veja na
imagem abaixo os arquivos [smali] extraídos.
Desta forma podemos visualizar os arquivos em qualquer um dos editores de texto
disponível. Lembrem-se da string de mensagem que temos que buscar: Not Registered. Esse
processo pode ser demorado, uma vez que teremos que analisar um-por-um desses arquivos.
Depois de um tempo analisando os arquivos, não encontro a mensagem de “badmsg”, porém,
encontro o oposto, a mensagem: "Registered!". Veja isso no código abaixo:.
.class public Lcom/Android/Patchtest/Patchtest;
.super Landroid/app/Activity;
.source "Patchtest.java"
# instance fields
.field status:Landroid/widget/TextView;
.field webaddress:Landroid/widget/TextView;
# direct methods
.method public constructor <init>()V
.registers 1
.prologue
.line 25
invoke-direct {p0}, Landroid/app/Activity;-><init>()V
return-void
.end method
# virtual methods
.method public onCreate(Landroid/os/Bundle;)V
.registers 4
.parameter "savedInstanceState"
.prologue
.line 32
invoke-super {p0, p1}, Landroid/app/Activity;->onCreate(Landroid/os/Bundle;)V
.line 33
const/high16 v0, 0x7f03
invoke-virtual {p0, v0}, Lcom/Android/Patchtest/Patchtest;->setContentView(I)V
.line 35
const v0, 0x7f050001
invoke-virtual {p0, v0}, Lcom/Android/Patchtest/Patchtest;-
>findViewById(I)Landroid/view/View;
move-result-object v0
check-cast v0, Landroid/widget/TextView;
iput-object v0, p0, Lcom/Android/Patchtest/Patchtest;-
>status:Landroid/widget/TextView;
.line 38
invoke-virtual {p0}, Lcom/Android/Patchtest/Patchtest;->registered()Z
move-result v0
if-eqz v0, :cond_28
.line 39
iget-object v0, p0, Lcom/Android/Patchtest/Patchtest;-
>status:Landroid/widget/TextView;
const-string v1, "Registered!"
invoke-virtual {v0, v1}, Landroid/widget/TextView;-
>setText(Ljava/lang/CharSequence;)V
.line 40
iget-object v0, p0, Lcom/Android/Patchtest/Patchtest;-
>status:Landroid/widget/TextView;
const v1, -0xff0100
invoke-virtual {v0, v1}, Landroid/widget/TextView;->setTextColor(I)V
.line 42
:cond_28
return-void
.end method
.method protected registered()Z
.registers 4
.prologue
.line 46
const/16 v0, 0x3039
.line 47
.local v0, x:I
const v1, 0x10932
.line 49
.local v1, y:I
rem-int/2addr v0, v1
.line 51
if-nez v0, :cond_a
.line 52
const/4 v2, 0x1
.line 54
:goto_9
return v2
:cond_a
const/4 v2, 0x0
goto :goto_9
.end method
Não vou explicar toda essa linguagem, todo esse código, terá alguns links no final onde
vocês terão informações sobre ela. Vou dar uma pequena explanação no ponto onde é o
mais importante para fazer o patch nesse aplicativo (crackme).
O importante é essa linha: if-eqz v0, :cond_28. Aqui ocorre um salto para mensagem de
erro, vamos patchear essa linha.
If-eqz = Salta para a posição atual, no caso v0, cond_28. Vamos alterar para If-nez.
If-nez = Salta para a posição atual se for diferente de zero. Ou seja, faz a função
inversa de If-eqz.
Bom, feito a alteração devemos agora transformar os conteúdos dos arquivos smali,
novamente em arquivos.dex. Temos outra ferramenta que passaremos a utilizar agora, me
refiro ao: smali.
O comando usado para essa tarefa você pode ver na imagem abaixo:
O “com” é uma pasta que foi criada dentro da pasta CMNDDR, reparem que tive que dar um
nome diferente do original (classes.dex), para classes1.dex. Não podemos esquecer de
voltar a renomear com o nome original (classes.dex) para que funcione perfeitamente.
Feito todo o trabalho de renomear, precisamos agora substituir o classes.dex novo pelo
antigo.
Vamos agora instalar esse arquivo patcheado, o comando para instalar aplicativos no
android já foi mostrado aqui. Veja imagem
Opsss. Um erro, o android possui uma assinatura digital que identifica ser seguro e não
ser alterado, como foi o caso aqui… lembre-se que fizemos uma alteração no arquivo
original. Para corrigir esse erro vamos usar outra ferramenta para nos auxiliar, estou
me referindo ao: Sign+. Veja imagem do mesmo abaixo:
O uso da ferramenta não tem segredo, é muito simples. Vamos abrir nosso crackme na
ferramenta, clicando em Browse e em seguida “Sign Files”.
Na pasta onde se encontra o original (Patchtest) foi criado um “genérico” signado.
Patchtest_signed.apk, vamos instalar esse, veja como na imagem.
Instalado com sucesso, isso faz com que nosso aplicativo esteja crackeado… vamos
conferir.
Ok, aplicativo android crackeado… Vale lembrar, não se esqueça sempre de fazer a
desinstalação do crackme antigo, senão o fizer poderá ocorrer um erro na instalação do
aplicativo crackeado.
É isso pessoal, um tutorial que me deu certo trabalho para terminar, mais com dedicação
e pesquisa, terminei. Volto a repetir a idéia de criar esse tutorial é puramente
didático e voltado ao estudo e aprendizado na técnica de Engenharia Reversa.
O autor não se responsabiliza por uso indevido das informações aqui postadas.
Um Obrigado muito especial ao amigo: Everdoh
A todos os membros das comunidades: CIN1TeAm, CTB Team, Fórum Invaders
Links das ferramentas usadas nesse tutorial:
Android SDK = http://developer.android.com/sdk/index.html
Baksmali/Smali = http://code.google.com/p/smali/downloads/list
Sign+ = http://forum.xda-developers.com/showthread.php?t=997180
Referências para leitura:
http://pallergabor.uw.hu/androidblog/dalvik_opcodes.html
http://developer.android.com/guide/developing/tools/adb.html
http://netmite.com/android/mydroid/dalvik/docs/dalvik-bytecode.html
by C0M3ND4D0R
Crackeando aplicativos no android  _by c0_m3nd4d0r

Mais conteúdo relacionado

Mais procurados

Android testing PT-BR
Android testing PT-BRAndroid testing PT-BR
Android testing PT-BRrafaeladson
 
Simples pelo simples google android com robo guice
Simples pelo simples   google android com robo guiceSimples pelo simples   google android com robo guice
Simples pelo simples google android com robo guiceDiogo Souza
 
Softblue logic-ide
Softblue logic-ideSoftblue logic-ide
Softblue logic-idemateusvini
 
O guia passo_a_passo
O guia passo_a_passoO guia passo_a_passo
O guia passo_a_passoESJEA
 
Instalação do jdk 8 e netbeans no WINDOWS
Instalação do jdk 8 e netbeans no WINDOWSInstalação do jdk 8 e netbeans no WINDOWS
Instalação do jdk 8 e netbeans no WINDOWSMatheus Coutinho
 
Ardamax Video aula completa
Ardamax Video aula completaArdamax Video aula completa
Ardamax Video aula completaDarkMagick Lion
 
Testes de Unidade com Junit
Testes de Unidade com JunitTestes de Unidade com Junit
Testes de Unidade com Junitcejug
 
Como Reter Objetos Utilizando Android-State API
Como Reter Objetos Utilizando Android-State APIComo Reter Objetos Utilizando Android-State API
Como Reter Objetos Utilizando Android-State APIVinícius Thiengo
 
Três operações de boot
Três operações de bootTrês operações de boot
Três operações de bootSirene Monturil
 
Indo além com Automação de Testes de Apps Android
Indo além com Automação de Testes de Apps AndroidIndo além com Automação de Testes de Apps Android
Indo além com Automação de Testes de Apps AndroidEduardo Carrara de Araujo
 
Programação Concorrente - Gerenciamento de Threads - Parte II
Programação Concorrente - Gerenciamento de Threads - Parte IIProgramação Concorrente - Gerenciamento de Threads - Parte II
Programação Concorrente - Gerenciamento de Threads - Parte IIFabio Moura Pereira
 

Mais procurados (19)

Android testing PT-BR
Android testing PT-BRAndroid testing PT-BR
Android testing PT-BR
 
Simples pelo simples google android com robo guice
Simples pelo simples   google android com robo guiceSimples pelo simples   google android com robo guice
Simples pelo simples google android com robo guice
 
Applets
AppletsApplets
Applets
 
Apostila sobre o Visualg
Apostila sobre o VisualgApostila sobre o Visualg
Apostila sobre o Visualg
 
Softblue logic-ide
Softblue logic-ideSoftblue logic-ide
Softblue logic-ide
 
Usando vitual box parte 2
Usando vitual box   parte 2Usando vitual box   parte 2
Usando vitual box parte 2
 
O guia passo_a_passo
O guia passo_a_passoO guia passo_a_passo
O guia passo_a_passo
 
Instalação do jdk 8 e netbeans no WINDOWS
Instalação do jdk 8 e netbeans no WINDOWSInstalação do jdk 8 e netbeans no WINDOWS
Instalação do jdk 8 e netbeans no WINDOWS
 
Ardamax Video aula completa
Ardamax Video aula completaArdamax Video aula completa
Ardamax Video aula completa
 
Testes de Unidade com Junit
Testes de Unidade com JunitTestes de Unidade com Junit
Testes de Unidade com Junit
 
Aula Tratamento de Exceções
Aula Tratamento de ExceçõesAula Tratamento de Exceções
Aula Tratamento de Exceções
 
Apostila android
Apostila androidApostila android
Apostila android
 
Apostila android
Apostila androidApostila android
Apostila android
 
Como Reter Objetos Utilizando Android-State API
Como Reter Objetos Utilizando Android-State APIComo Reter Objetos Utilizando Android-State API
Como Reter Objetos Utilizando Android-State API
 
Introdução ao java Alo Mundo
Introdução ao java Alo MundoIntrodução ao java Alo Mundo
Introdução ao java Alo Mundo
 
Três operações de boot
Três operações de bootTrês operações de boot
Três operações de boot
 
Indo além com Automação de Testes de Apps Android
Indo além com Automação de Testes de Apps AndroidIndo além com Automação de Testes de Apps Android
Indo além com Automação de Testes de Apps Android
 
Programação Concorrente - Gerenciamento de Threads - Parte II
Programação Concorrente - Gerenciamento de Threads - Parte IIProgramação Concorrente - Gerenciamento de Threads - Parte II
Programação Concorrente - Gerenciamento de Threads - Parte II
 
Singleton varianca
Singleton variancaSingleton varianca
Singleton varianca
 

Destaque

Explorando o uso da sala de informática (1)
Explorando o uso da sala de informática (1)Explorando o uso da sala de informática (1)
Explorando o uso da sala de informática (1)martinsisaias
 
Curso de atualização para professores
Curso de atualização para professoresCurso de atualização para professores
Curso de atualização para professoresFURG
 
Curso de programacion en c++ prev
Curso de programacion en c++ prevCurso de programacion en c++ prev
Curso de programacion en c++ prevjtk1
 
Autodesk_Revit_Architecture_2015_Certified_Professional_Certificate
Autodesk_Revit_Architecture_2015_Certified_Professional_CertificateAutodesk_Revit_Architecture_2015_Certified_Professional_Certificate
Autodesk_Revit_Architecture_2015_Certified_Professional_CertificateFrancisco Javier Martín
 
Aprende java como si estuviera en primero pre
Aprende java como si estuviera en primero preAprende java como si estuviera en primero pre
Aprende java como si estuviera en primero prejtk1
 
Estratégias de Marketing Digital
Estratégias de Marketing DigitalEstratégias de Marketing Digital
Estratégias de Marketing DigitalAble Mkt
 
Presentaciones Impactantes
Presentaciones ImpactantesPresentaciones Impactantes
Presentaciones Impactantesnicolasvasconez
 
Misterios d excel pre
Misterios d excel preMisterios d excel pre
Misterios d excel prejtk1
 
Emakumeen aurkako indarkeria
Emakumeen aurkako indarkeriaEmakumeen aurkako indarkeria
Emakumeen aurkako indarkeriaMaialen_Enbeita
 
Colorado Cancer Wellness Conference- final handout
Colorado Cancer Wellness Conference- final handoutColorado Cancer Wellness Conference- final handout
Colorado Cancer Wellness Conference- final handoutJessica Deighton
 
Arkane jamaat k liye hidayaat
Arkane jamaat k liye hidayaatArkane jamaat k liye hidayaat
Arkane jamaat k liye hidayaatAzaz Khan
 

Destaque (16)

Explorando o uso da sala de informática (1)
Explorando o uso da sala de informática (1)Explorando o uso da sala de informática (1)
Explorando o uso da sala de informática (1)
 
Curso de atualização para professores
Curso de atualização para professoresCurso de atualização para professores
Curso de atualização para professores
 
06 tulio barbosa
06 tulio barbosa06 tulio barbosa
06 tulio barbosa
 
Eportafolio
EportafolioEportafolio
Eportafolio
 
Sofia
SofiaSofia
Sofia
 
Curso de programacion en c++ prev
Curso de programacion en c++ prevCurso de programacion en c++ prev
Curso de programacion en c++ prev
 
Autodesk_Revit_Architecture_2015_Certified_Professional_Certificate
Autodesk_Revit_Architecture_2015_Certified_Professional_CertificateAutodesk_Revit_Architecture_2015_Certified_Professional_Certificate
Autodesk_Revit_Architecture_2015_Certified_Professional_Certificate
 
Aprende java como si estuviera en primero pre
Aprende java como si estuviera en primero preAprende java como si estuviera en primero pre
Aprende java como si estuviera en primero pre
 
Estratégias de Marketing Digital
Estratégias de Marketing DigitalEstratégias de Marketing Digital
Estratégias de Marketing Digital
 
Presentaciones Impactantes
Presentaciones ImpactantesPresentaciones Impactantes
Presentaciones Impactantes
 
Misterios d excel pre
Misterios d excel preMisterios d excel pre
Misterios d excel pre
 
Olaia
OlaiaOlaia
Olaia
 
Emakumeen aurkako indarkeria
Emakumeen aurkako indarkeriaEmakumeen aurkako indarkeria
Emakumeen aurkako indarkeria
 
Colorado Cancer Wellness Conference- final handout
Colorado Cancer Wellness Conference- final handoutColorado Cancer Wellness Conference- final handout
Colorado Cancer Wellness Conference- final handout
 
Ejercicio 4
Ejercicio 4Ejercicio 4
Ejercicio 4
 
Arkane jamaat k liye hidayaat
Arkane jamaat k liye hidayaatArkane jamaat k liye hidayaat
Arkane jamaat k liye hidayaat
 

Semelhante a Crackeando aplicativos no android _by c0_m3nd4d0r

Introdução a programação para plataforma iOS
Introdução a programação para plataforma iOSIntrodução a programação para plataforma iOS
Introdução a programação para plataforma iOSDevmedia
 
Leitor de Códigos no Android com Barcode Scanner API - ZXing
Leitor de Códigos no Android com Barcode Scanner API - ZXingLeitor de Códigos no Android com Barcode Scanner API - ZXing
Leitor de Códigos no Android com Barcode Scanner API - ZXingVinícius Thiengo
 
Criando o Primeiro Projeto no Android Studio
Criando o Primeiro Projeto no Android StudioCriando o Primeiro Projeto no Android Studio
Criando o Primeiro Projeto no Android StudioTiago Antônio da Silva
 
Configurando o ambiente para desenvolvimento Android
Configurando o ambiente para desenvolvimento AndroidConfigurando o ambiente para desenvolvimento Android
Configurando o ambiente para desenvolvimento AndroidCalebeMiquissene
 
Workshop on Android Rom Creation - FISTA/ISCTE 2014
Workshop on Android Rom Creation - FISTA/ISCTE 2014Workshop on Android Rom Creation - FISTA/ISCTE 2014
Workshop on Android Rom Creation - FISTA/ISCTE 2014Flávio Moringa
 
Recuperar arquivos apagados da memória Interna do Android
Recuperar arquivos apagados da memória Interna do Android Recuperar arquivos apagados da memória Interna do Android
Recuperar arquivos apagados da memória Interna do Android Atos Silva
 
Desenvolvendo para Android
Desenvolvendo para AndroidDesenvolvendo para Android
Desenvolvendo para AndroidClaudio Pereira
 
Guia rapido total cross studio
Guia rapido total cross studioGuia rapido total cross studio
Guia rapido total cross studioRafael Din
 
Iniciando o desenvolvimento de uma aplicação em android
Iniciando o desenvolvimento de uma aplicação em androidIniciando o desenvolvimento de uma aplicação em android
Iniciando o desenvolvimento de uma aplicação em androidErivan Cledson
 
Baixando, instalando e testando o android sdk
Baixando, instalando e testando o android sdkBaixando, instalando e testando o android sdk
Baixando, instalando e testando o android sdkReuel Lopes
 
Trabalho sobre truecrypt
Trabalho sobre truecryptTrabalho sobre truecrypt
Trabalho sobre truecryptCassio Ramos
 
Curso Android - 02 configuração do ambiente (Tutorial de Instalação Eclipse +...
Curso Android - 02 configuração do ambiente (Tutorial de Instalação Eclipse +...Curso Android - 02 configuração do ambiente (Tutorial de Instalação Eclipse +...
Curso Android - 02 configuração do ambiente (Tutorial de Instalação Eclipse +...Ronildo Oliveira
 
Tutorial de Instalação Eclipse + Android SDK
Tutorial de Instalação Eclipse + Android SDKTutorial de Instalação Eclipse + Android SDK
Tutorial de Instalação Eclipse + Android SDKRonildo Oliveira
 
Invasão e correção em sites
Invasão e correção em sitesInvasão e correção em sites
Invasão e correção em sitesDaskonet Dasko
 

Semelhante a Crackeando aplicativos no android _by c0_m3nd4d0r (20)

Bada
BadaBada
Bada
 
Apostila android
Apostila androidApostila android
Apostila android
 
Apostila android
Apostila androidApostila android
Apostila android
 
Introdução a programação para plataforma iOS
Introdução a programação para plataforma iOSIntrodução a programação para plataforma iOS
Introdução a programação para plataforma iOS
 
Ficha teorica aula_input_reader
Ficha teorica aula_input_readerFicha teorica aula_input_reader
Ficha teorica aula_input_reader
 
Leitor de Códigos no Android com Barcode Scanner API - ZXing
Leitor de Códigos no Android com Barcode Scanner API - ZXingLeitor de Códigos no Android com Barcode Scanner API - ZXing
Leitor de Códigos no Android com Barcode Scanner API - ZXing
 
Devc++
Devc++Devc++
Devc++
 
Criando o Primeiro Projeto no Android Studio
Criando o Primeiro Projeto no Android StudioCriando o Primeiro Projeto no Android Studio
Criando o Primeiro Projeto no Android Studio
 
Configurando o ambiente para desenvolvimento Android
Configurando o ambiente para desenvolvimento AndroidConfigurando o ambiente para desenvolvimento Android
Configurando o ambiente para desenvolvimento Android
 
Workshop on Android Rom Creation - FISTA/ISCTE 2014
Workshop on Android Rom Creation - FISTA/ISCTE 2014Workshop on Android Rom Creation - FISTA/ISCTE 2014
Workshop on Android Rom Creation - FISTA/ISCTE 2014
 
Recuperar arquivos apagados da memória Interna do Android
Recuperar arquivos apagados da memória Interna do Android Recuperar arquivos apagados da memória Interna do Android
Recuperar arquivos apagados da memória Interna do Android
 
Desenvolvendo para Android
Desenvolvendo para AndroidDesenvolvendo para Android
Desenvolvendo para Android
 
Invasao_e_Correcao_em_Sites.pdf
Invasao_e_Correcao_em_Sites.pdfInvasao_e_Correcao_em_Sites.pdf
Invasao_e_Correcao_em_Sites.pdf
 
Guia rapido total cross studio
Guia rapido total cross studioGuia rapido total cross studio
Guia rapido total cross studio
 
Iniciando o desenvolvimento de uma aplicação em android
Iniciando o desenvolvimento de uma aplicação em androidIniciando o desenvolvimento de uma aplicação em android
Iniciando o desenvolvimento de uma aplicação em android
 
Baixando, instalando e testando o android sdk
Baixando, instalando e testando o android sdkBaixando, instalando e testando o android sdk
Baixando, instalando e testando o android sdk
 
Trabalho sobre truecrypt
Trabalho sobre truecryptTrabalho sobre truecrypt
Trabalho sobre truecrypt
 
Curso Android - 02 configuração do ambiente (Tutorial de Instalação Eclipse +...
Curso Android - 02 configuração do ambiente (Tutorial de Instalação Eclipse +...Curso Android - 02 configuração do ambiente (Tutorial de Instalação Eclipse +...
Curso Android - 02 configuração do ambiente (Tutorial de Instalação Eclipse +...
 
Tutorial de Instalação Eclipse + Android SDK
Tutorial de Instalação Eclipse + Android SDKTutorial de Instalação Eclipse + Android SDK
Tutorial de Instalação Eclipse + Android SDK
 
Invasão e correção em sites
Invasão e correção em sitesInvasão e correção em sites
Invasão e correção em sites
 

Último

ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx2m Assessoria
 
Luís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuisKitota
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx2m Assessoria
 
Programação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfProgramação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfSamaraLunas
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsDanilo Pinotti
 
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docxATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx2m Assessoria
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx2m Assessoria
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx2m Assessoria
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploDanilo Pinotti
 

Último (9)

ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
Luís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdf
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
 
Programação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfProgramação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdf
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docxATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 

Crackeando aplicativos no android _by c0_m3nd4d0r

  • 1. “Crackeando” Aplicativos no Android Vítima: Crackme PatchTest Dificuldade: Média Objetivo: Fazer um Patch no Aplicativo Ferramentas: SDK/AVD Android Manager, Baskmali, Smali, Sign+, Winrar Data: 13/11/2011 Feito por: C0M3ND4D0R Advertência Antes de começar a ler esse tutorial, você deve estar de acordo com todas as condições a seguir: Ao ler esse tutorial, o leitor aceita incondicionalmente sua total e exclusiva responsabilidade legal, de acordo com as leis vigentes nesse país, pelo uso das técnicas experimentais, educativas e/ou de investigação aqui mostradas. Caso não esteja de acordo de qualquer das condições impostas, deverá então imediatamente eliminar esse tutorial e todo material associado ao mesmo. Iniciando Aqui começo uma seqüência de tutoriais voltados ao “cracking” em aplicativos para o android, logicamente, desde que se encontrem os crackmes criados para tal. Lembrando que o propósito aqui apresentado é puramente didático com o intuito educacional. No final deste tutorial estarei disponibilizando links para download das ferramentas aqui utilizadas e referencias para serem estudadas. Vamos iniciar mostrando o Android SDK Manager, porém, antes de começarmos é necessário atualizar os pacotes (packages), eu recomendo que faça atualização de todos e isso levará um tempo para finalizar. Seguindo clique na aba Tools do (SDK) para chamar o AVD e criarmos um “device”, AVD é Android Virtual Device Manager responsável pela emulação do android. Veja imagem abaixo.
  • 2. Clique em New… para criar o device, veja a imagem abaixo… assim deve ficar a configuração, na seqüência clique em Create AVD. Agora nosso Device devidamente criado.
  • 3. Clicamos em Start… para iniciar a emulação. Veja a imagem à cima, lembre-se sempre de marcar a caixa “Wipe user data” antes de iniciar o emulador, essa opção é responsável por facilitar a desinstalação do crackme vítima e de qualquer outro conteúdo ou aplicativo. Clicando em Launch podemos ver já nosso emulador funcionando perfeitamente.
  • 4. Iremos até o diretório do instalador das apks. APK é application package file (APK), é o formato de arquivo usado para distribuir e instalar software de aplicativos para o sistema operacional, Google Android. Mais informação no endereço abaixo: http://en.wikipedia.org/wiki/APK_(file_format) Vamos instalar nossa vítima, pra isso arrastamos o alvo para pasta onde se encontra o instalador. No meu caso se encontra em: C:Arquivos de Programas(x86)Androidandroid- sdkplatform-tools Antes vamos listar as devices, esse é o comando… veja na imagem abaixo:
  • 5. Nosso device listado, reparem em List of devices attached apenas um, e é justamente o nosso. Vamos agora instalar nosso crackme vítima, o comando pra isso é: adb install “nome_do_aplicativo” (sem aspas), você pode ver na imagem abaixo: Se tudo correr perfeitamente, aparecerá a mensagem: Success (Sucesso,Dããããã). E já podemos visualizar o aplicativo (crackme) devidamente instalado. Ao darmos duplo clique em nosso aplicativo, vejamos o que temos por esperar…
  • 6. Hummmm, uma mensagem Not Registered nada simpático. Felizmente, por outro lado já temos algo para procurar. Precisamos analisar o crackme e encontrar essa mensagem de não registrado, para isso será necessário extrair o conteúdo do arquivo.apk (Patchtest.apk), pode ser usado o winrar, por exemplo, para fazer essa tarefa. O processo é muito parecido como o que é feito em arquivos Java. Uma vez extraído seu conteúdo temos isso, o conteúdo que pode ser visto na imagem abaixo. E o que é mais importante no momento é o arquivo classes.dex. Porém, não podemos mais utilizar o winrar para extrair o conteúdo do arquivo classes.dex, para essa tarefa será usado uma outra ferramenta, o baksmali. O comando para isso pode ser visto na imagem abaixo: O –o CMNDDR é para criar uma pasta onde os arquivos serão todos extraídos. Veja na imagem abaixo os arquivos [smali] extraídos.
  • 7. Desta forma podemos visualizar os arquivos em qualquer um dos editores de texto disponível. Lembrem-se da string de mensagem que temos que buscar: Not Registered. Esse processo pode ser demorado, uma vez que teremos que analisar um-por-um desses arquivos. Depois de um tempo analisando os arquivos, não encontro a mensagem de “badmsg”, porém, encontro o oposto, a mensagem: "Registered!". Veja isso no código abaixo:. .class public Lcom/Android/Patchtest/Patchtest; .super Landroid/app/Activity; .source "Patchtest.java" # instance fields .field status:Landroid/widget/TextView; .field webaddress:Landroid/widget/TextView; # direct methods .method public constructor <init>()V .registers 1 .prologue .line 25 invoke-direct {p0}, Landroid/app/Activity;-><init>()V return-void .end method # virtual methods .method public onCreate(Landroid/os/Bundle;)V .registers 4 .parameter "savedInstanceState" .prologue .line 32 invoke-super {p0, p1}, Landroid/app/Activity;->onCreate(Landroid/os/Bundle;)V .line 33 const/high16 v0, 0x7f03 invoke-virtual {p0, v0}, Lcom/Android/Patchtest/Patchtest;->setContentView(I)V .line 35 const v0, 0x7f050001 invoke-virtual {p0, v0}, Lcom/Android/Patchtest/Patchtest;- >findViewById(I)Landroid/view/View;
  • 8. move-result-object v0 check-cast v0, Landroid/widget/TextView; iput-object v0, p0, Lcom/Android/Patchtest/Patchtest;- >status:Landroid/widget/TextView; .line 38 invoke-virtual {p0}, Lcom/Android/Patchtest/Patchtest;->registered()Z move-result v0 if-eqz v0, :cond_28 .line 39 iget-object v0, p0, Lcom/Android/Patchtest/Patchtest;- >status:Landroid/widget/TextView; const-string v1, "Registered!" invoke-virtual {v0, v1}, Landroid/widget/TextView;- >setText(Ljava/lang/CharSequence;)V .line 40 iget-object v0, p0, Lcom/Android/Patchtest/Patchtest;- >status:Landroid/widget/TextView; const v1, -0xff0100 invoke-virtual {v0, v1}, Landroid/widget/TextView;->setTextColor(I)V .line 42 :cond_28 return-void .end method .method protected registered()Z .registers 4 .prologue .line 46 const/16 v0, 0x3039 .line 47 .local v0, x:I const v1, 0x10932 .line 49 .local v1, y:I rem-int/2addr v0, v1 .line 51 if-nez v0, :cond_a .line 52 const/4 v2, 0x1 .line 54
  • 9. :goto_9 return v2 :cond_a const/4 v2, 0x0 goto :goto_9 .end method Não vou explicar toda essa linguagem, todo esse código, terá alguns links no final onde vocês terão informações sobre ela. Vou dar uma pequena explanação no ponto onde é o mais importante para fazer o patch nesse aplicativo (crackme). O importante é essa linha: if-eqz v0, :cond_28. Aqui ocorre um salto para mensagem de erro, vamos patchear essa linha. If-eqz = Salta para a posição atual, no caso v0, cond_28. Vamos alterar para If-nez. If-nez = Salta para a posição atual se for diferente de zero. Ou seja, faz a função inversa de If-eqz. Bom, feito a alteração devemos agora transformar os conteúdos dos arquivos smali, novamente em arquivos.dex. Temos outra ferramenta que passaremos a utilizar agora, me refiro ao: smali. O comando usado para essa tarefa você pode ver na imagem abaixo: O “com” é uma pasta que foi criada dentro da pasta CMNDDR, reparem que tive que dar um nome diferente do original (classes.dex), para classes1.dex. Não podemos esquecer de voltar a renomear com o nome original (classes.dex) para que funcione perfeitamente. Feito todo o trabalho de renomear, precisamos agora substituir o classes.dex novo pelo antigo. Vamos agora instalar esse arquivo patcheado, o comando para instalar aplicativos no android já foi mostrado aqui. Veja imagem Opsss. Um erro, o android possui uma assinatura digital que identifica ser seguro e não ser alterado, como foi o caso aqui… lembre-se que fizemos uma alteração no arquivo original. Para corrigir esse erro vamos usar outra ferramenta para nos auxiliar, estou me referindo ao: Sign+. Veja imagem do mesmo abaixo:
  • 10. O uso da ferramenta não tem segredo, é muito simples. Vamos abrir nosso crackme na ferramenta, clicando em Browse e em seguida “Sign Files”. Na pasta onde se encontra o original (Patchtest) foi criado um “genérico” signado. Patchtest_signed.apk, vamos instalar esse, veja como na imagem. Instalado com sucesso, isso faz com que nosso aplicativo esteja crackeado… vamos conferir.
  • 11. Ok, aplicativo android crackeado… Vale lembrar, não se esqueça sempre de fazer a desinstalação do crackme antigo, senão o fizer poderá ocorrer um erro na instalação do aplicativo crackeado. É isso pessoal, um tutorial que me deu certo trabalho para terminar, mais com dedicação e pesquisa, terminei. Volto a repetir a idéia de criar esse tutorial é puramente didático e voltado ao estudo e aprendizado na técnica de Engenharia Reversa. O autor não se responsabiliza por uso indevido das informações aqui postadas. Um Obrigado muito especial ao amigo: Everdoh A todos os membros das comunidades: CIN1TeAm, CTB Team, Fórum Invaders Links das ferramentas usadas nesse tutorial: Android SDK = http://developer.android.com/sdk/index.html Baksmali/Smali = http://code.google.com/p/smali/downloads/list Sign+ = http://forum.xda-developers.com/showthread.php?t=997180 Referências para leitura: http://pallergabor.uw.hu/androidblog/dalvik_opcodes.html http://developer.android.com/guide/developing/tools/adb.html http://netmite.com/android/mydroid/dalvik/docs/dalvik-bytecode.html by C0M3ND4D0R