crackeando aplicativos no android _by c0_m3nd4d0r

Post on 25-May-2015

2.101 Views

Category:

Technology

6 Downloads

Preview:

Click to see full reader

DESCRIPTION

craker de app

TRANSCRIPT

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

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

top related