crackeando aplicativos no android _by c0_m3nd4d0r

12
“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.

Upload: nunes666

Post on 25-May-2015

2.101 views

Category:

Technology


6 download

DESCRIPTION

craker de app

TRANSCRIPT

Page 1: Crackeando aplicativos no android  _by c0_m3nd4d0r

“Crackeando” Aplicativos no Android

Vítima: Crackme PatchTest Dificuldade: MédiaObjetivo: Fazer um Patch no AplicativoFerramentas: SDK/AVD Android Manager, Baskmali, Smali, Sign+, WinrarData: 13/11/2011Feito 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.

Page 2: Crackeando aplicativos no android  _by c0_m3nd4d0r

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.

Page 3: Crackeando aplicativos no android  _by c0_m3nd4d0r

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.

Page 4: Crackeando aplicativos no android  _by c0_m3nd4d0r

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)\Android\android-sdk\platform-tools

Antes vamos listar as devices, esse é o comando… veja na imagem abaixo:

Page 5: Crackeando aplicativos no android  _by c0_m3nd4d0r

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…

Page 6: Crackeando aplicativos no android  _by c0_m3nd4d0r

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.

Page 7: Crackeando aplicativos no android  _by c0_m3nd4d0r

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;

Page 8: Crackeando aplicativos no android  _by c0_m3nd4d0r

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

Page 9: Crackeando aplicativos no android  _by c0_m3nd4d0r

: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:

Page 10: Crackeando aplicativos no android  _by c0_m3nd4d0r

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.

Page 11: Crackeando aplicativos no android  _by c0_m3nd4d0r

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

Page 12: Crackeando aplicativos no android  _by c0_m3nd4d0r