SlideShare uma empresa Scribd logo
“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

PPTX
Debugging node
ODP
PHPUnit e teste de software
DOCX
C:\Fakepath\Manual Antivirus
PDF
Java script
PDF
Tutorial instalacão java
PDF
Pacotes -organizando_suas_classes_e_bibliotecas
PDF
JS Experience 2017 - Utilizando a virtualização para simplificar o desenvolvi...
Debugging node
PHPUnit e teste de software
C:\Fakepath\Manual Antivirus
Java script
Tutorial instalacão java
Pacotes -organizando_suas_classes_e_bibliotecas
JS Experience 2017 - Utilizando a virtualização para simplificar o desenvolvi...

Mais procurados (19)

KEY
Android testing PT-BR
PPTX
Simples pelo simples google android com robo guice
PPT
Applets
PDF
Apostila sobre o Visualg
PDF
Softblue logic-ide
PDF
Usando vitual box parte 2
PDF
O guia passo_a_passo
PDF
Instalação do jdk 8 e netbeans no WINDOWS
PPS
Ardamax Video aula completa
PDF
Testes de Unidade com Junit
PDF
Aula Tratamento de Exceções
PDF
Apostila android
PDF
Apostila android
PDF
Como Reter Objetos Utilizando Android-State API
PDF
Introdução ao java Alo Mundo
DOC
Três operações de boot
PDF
Indo além com Automação de Testes de Apps Android
PDF
Programação Concorrente - Gerenciamento de Threads - Parte II
DOCX
Singleton varianca
Android testing PT-BR
Simples pelo simples google android com robo guice
Applets
Apostila sobre o Visualg
Softblue logic-ide
Usando vitual box parte 2
O guia passo_a_passo
Instalação do jdk 8 e netbeans no WINDOWS
Ardamax Video aula completa
Testes de Unidade com Junit
Aula Tratamento de Exceções
Apostila android
Apostila android
Como Reter Objetos Utilizando Android-State API
Introdução ao java Alo Mundo
Três operações de boot
Indo além com Automação de Testes de Apps Android
Programação Concorrente - Gerenciamento de Threads - Parte II
Singleton varianca
Anúncio

Destaque (16)

ODP
Explorando o uso da sala de informática (1)
PDF
Curso de atualização para professores
PDF
06 tulio barbosa
DOCX
Eportafolio
PDF
Curso de programacion en c++ prev
PDF
Autodesk_Revit_Architecture_2015_Certified_Professional_Certificate
PDF
Aprende java como si estuviera en primero pre
PDF
Estratégias de Marketing Digital
PPTX
Presentaciones Impactantes
PDF
Misterios d excel pre
DOCX
Emakumeen aurkako indarkeria
DOCX
Colorado Cancer Wellness Conference- final handout
ODP
Ejercicio 4
PDF
Arkane jamaat k liye hidayaat
Explorando o uso da sala de informática (1)
Curso de atualização para professores
06 tulio barbosa
Eportafolio
Curso de programacion en c++ prev
Autodesk_Revit_Architecture_2015_Certified_Professional_Certificate
Aprende java como si estuviera en primero pre
Estratégias de Marketing Digital
Presentaciones Impactantes
Misterios d excel pre
Emakumeen aurkako indarkeria
Colorado Cancer Wellness Conference- final handout
Ejercicio 4
Arkane jamaat k liye hidayaat
Anúncio

Semelhante a Crackeando aplicativos no android _by c0_m3nd4d0r (20)

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

Último (19)

PDF
Custos e liquidação no SAP Transportation Management, TM130 Col18
PDF
COBITxITIL-Entenda as diferença em uso governança TI
PDF
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
PDF
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
PDF
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
PPTX
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
PDF
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
PPTX
BANCO DE DADOS - AULAS INICIAIS-sgbd.pptx
PDF
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
PPTX
Aula 18 - Manipulacao De Arquivos python
PPTX
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
PDF
Processos na gestão de transportes, TM100 Col18
PDF
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
PDF
Apple Pippin Uma breve introdução. - David Glotz
PPTX
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
PDF
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
PPTX
Aula16ManipulaçãoDadosssssssssssssssssssssssssssss
PPTX
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
PDF
Aula04-Academia Heri- Tecnologia Geral 2025
Custos e liquidação no SAP Transportation Management, TM130 Col18
COBITxITIL-Entenda as diferença em uso governança TI
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
BANCO DE DADOS - AULAS INICIAIS-sgbd.pptx
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
Aula 18 - Manipulacao De Arquivos python
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
Processos na gestão de transportes, TM100 Col18
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
Apple Pippin Uma breve introdução. - David Glotz
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
Aula16ManipulaçãoDadosssssssssssssssssssssssssssss
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
Aula04-Academia Heri- Tecnologia Geral 2025

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