COVIL HACKER

, ! .


» COVIL HACKER » rachaduras/inversão » Android descompilando/revertendo


Android descompilando/revertendo

1 2 2

1

Introdução ao hacking do Android

Nesta breve introdução ao hacking do Android, veremos a configuração básica para obter um pouco mais de controle sobre como descompilamos aplicativos Android,
bem como podemos, por meio de um proxy, capturar informações sobre quais dados o aplicativo envia em seu servidor de back-end associado.

Requisitos

Android SDK + Eclipse ADT (Eclipse + Android Development Tool(kit) é apenas se você deseja executar um emulador em vez de um dispositivo físico
e se deseja se aprofundar um pouco mais na programação e patching/cracking do Android)
http: / /developer.android.com/sdk/index.html

Java JDK e JRE (o JDK é o mais importante aqui, mas o JRE é útil para determinadas tarefas)
http://www.oracle.com/technetwork/java/j...index.html

Charles Proxy (pode ser qualquer ferramenta de proxy com a qual você tenha experiência)
http://www.charlesproxy.com/

APKTool (deve ser usado para descompilar + recompile (Smali - Baksmali) seus arquivos APK)
https://mega.co.nz/#!10UHnAxC!zLg6ucEf43...YVOkd9rHy0

SignAPK (Ou jarsigner - Deve ser usado para assinar os arquivos APK para que possam ser instalados no SO Android.
A grande maioria dos dispositivos não instalará aplicativos Sem este subswitch cerebral)
https://mega.co.nz/#!ZklzhYhZ!g0ZcCd1epr...At1nTWyJ7g

Dex2Jar (Converte o arquivo .DEX agrupado no arquivo .APK para .JAR
https://mega.co.nz/#!Jh0AkayZ!hzmJx-gRpf...MylPdap-zA

Jd_Gui (Fornece uma interface agradável para ler os arquivos .JAR do Dex2Jar)
http://jd.benow.ca/

Então, o que é um arquivo APK?
Um APK é basicamente apenas um formato de pacote como RAR e ZIP. Você pode até renomear seu .APK para .ZIP e assim abrir e extrair o conteúdo.
O formato APK é exatamente o que o Google escolheu para chamar o tipo de arquivo de seu aplicativo, para que o sistema operacional Android possa reconhecê-lo.

Esses são os arquivos que você baixa e instala quando baixa um aplicativo do Google Play ou de outras lojas de aplicativos de terceiros.
Se você tiver um dispositivo Android enraizado, esses arquivos podem ser copiados como "backups" e transferidos para o computador via ADB, e-mail, Dropbox, etc.

Além disso, você pode usar downloaders online como http://download.freeapk.ru /ptou http://apkleecher.com/ para baixar os arquivos para uma investigação mais aprofundada.
Tenha cuidado com isso, pois muitos desses downloaders lançam spyware ou anúncios antes de preparar o link de download.

Estrutura de pastas
Para constar, vamos criar uma pasta no desktop chamada Android
Dentro dessa pasta extraímos os seguintes arquivos em pastas próprias:
Desktop/Android/APKTool
Desktop/Android/SignAPK
Desktop/Android/Dex2Jar
Desktop/Android/Jd_Gui.exe (Sem pasta, então é só soltar na raiz da pasta Android)

Configurando o Emulador
Para facilitar ao máximo, usamos o Eclipse para abrir o AVD (Android Virtual Device Manager).
Certifique-se de que o Android SDK esteja instalado e o Eclipse descompactado (não importa onde).
1) Abra Eclipse > Janela > Preferências > Android e verifique se a 'localização do SDK' corresponde a onde você instalou/descompactou o Android SDK e pressione OK.

2) Vá para Window> Android SDK Manager e instale todos os pacotes sugeridos (verifique também se você tem pelo menos uma das plataformas mais recentes - Android 4.3 etc - instalada - isso às vezes requer direitos de administrador)


https://forumupload.ru/uploads/001b/c9/09/2/t392512.png

3) Vá para Window> Android Virtual Gerenciador de Dispositivos > Pressione 'Criar' e preencha as configurações.
Essas configurações não são tão importantes agora e podem ser alteradas a qualquer momento. Eu mesmo tenho muitos diferentes, mas aqui está um exemplo:
Pode ser uma vantagem fazer o download das APIs do Google no SDK Manager, pois, caso contrário, vários aplicativos falharão na instalação devido a um 'pacote compartilhado ausente'.

Pressione OK > E então inicie o emulador.

!! Pode haver casos em que nosso plug-in ADT não esteja instalado corretamente, nesses casos, faça o seguinte:
Vá para Ajuda > Instalar novo software >
Pressione Adicionar >
Dê um nome (Plugin ADT) >
Especifique uma URL para os arquivos do plug-in > https: //dl-ssl.google.com/android/eclipse/
E, em seguida, instale as ferramentas de desenvolvimento do Android. Às vezes, isso pode exigir direitos de administrador.

Instalando aplicativos para o emulador
Verifique se o emulador está aberto e em execução.
Abra a janela CMD/Command e CD para a pasta onde você instalou o Android SD/platform-tools.

C:\Windows\System32> cd C:\sdk\platform-tools
OU vá para a pasta Android SDK, segure Shift e clique com o botão direito do mouse em platform-tools > "Abrir janela de comando aqui".
Nesta pasta, o adb.exe está oculto, e é este programa pequeno e elegante que usaremos para instalar aplicativos e executar atividades/serviços.

Como exemplo, usarei o aplicativo de controle remoto da Verisure para antirroubo /vigilância.
Se formos a https://play.google.com e procurarmos por este aplicativo.
( https://play.google.com/store/apps/details?id = com.sdi.mobile.android.verisure )
podemos ver na barra de endereços que o nome do pacote é: 'com.sdi.mobile.android.verisure'
Aqui podemos ir para http://download.freeapk.ru e digitar o nome/endereço do pacote e baixar o arquivo . Arquivo APK de forma rápida e sem problemas, em vez de baixá-lo em nosso dispositivo, instalar, fazer backup e transferir o arquivo para nosso computador.
Salve o arquivo .apk na pasta Android.

Para instalar este aplicativo, basta digitar
Citar:
adb install <caminho para o arquivo .apk>
(Você pode digitar adb install e apenas arrastar o arquivo para a janela de comando para preencher automaticamente o caminho para o arquivo.
Isso se torna:

Citar:
C:\sdk\platform-tools>adb install C:\Users\MXI\Desktop\Android\verisure.apk
1112 KB/s (7109188 bytes em 6.240s)
pacote: /data/local/tmp/bas.apk
Sucesso

Agora o aplicativo está instalado no emulador e pode ser encontrado dentro do menu Apps.

!! Caso o adb não consiga encontrar seu dispositivo emulador, às vezes pode ser útil encaminhar:
Citar:
'C:\sdk\platform-tools>adb -d forward tcp:5601 tcp:5601'
!! Então tente escrever
Citar:
'C:\sdk\platform-tools>adb devices'
para ver se detectou seu dispositivo.

Configurando o Charles Proxy
Instale o Charles Proxy (este é apenas um teste, então ele irá travar por alguns segundos de vez em quando e só pode ser executado por 30 minutos antes de desligar. Pode ser reaberto imediatamente)

https://forumupload.ru/uploads/001b/c9/09/2/t691136.png

Vá para Proxy > Proxy Configurações e verifique o número da porta (provavelmente 8888 )
Na guia Proxies , verifique se há uma marca em ' Ativar proxy HTTP transparente '.
Na guia SSL , verifique se há uma marca em ' Ativar proxy SSL '.
Se isso exigir uma configuração em 'locais', pressione adicionar e OK com valores vazios.

Encontre seu IP de rede (não seu IP externo, mas seu IP interno que o roteador usa para encontrá-lo na rede)

Isso pode ser feito de várias maneiras diferentes, mas o mais fácil é IMO escrever ipconfig na janela de comando e procurar em IPv4 :

Citar:
C:\Windows\System32>ipconfig

https://forumupload.ru/uploads/001b/c9/09/2/t96092.png

Vamos voltar ao emulador do Android para configurar o Charles.

Primeiro, vamos direto para o navegador do Android no canto inferior direito (planeta azul-tingy).
https://forumupload.ru/uploads/001b/c9/09/2/t565457.png

Acesse http://charlesproxy.com/charles.crt > Dê um nome ao certificado e pressione OK para instalá-lo. (Isso deve ser usado para interceptar o tráfego SSL)

https://forumupload.ru/uploads/001b/c9/09/2/t23050.png

Existem diferenças na interface do usuário em diferentes versões do Android, mas na minha (4.4.2) é a seguinte:
Vá para Configurações (Pressione o botão Menu ou encontre-o dentro dos Aplicativos menu)
Em Wireless & Networks pressione More...
Pressione Mobile Networks > Access Point Names
Pressione o APN que já está em uso (T-Mobile US comigo)
Pressione Proxy e insira o IP que encontramos antes (192.168.1.105)
Pressione Porta e cole a porta de Charles (8888)
Essas configurações podem exigir uma senha (Esta senha/PIN também será necessária para fazer login na próxima vez que você iniciar o emulador, portanto, não há necessidade de entrar em pânico se de repente exigir o código PIN da próxima vez )
No canto superior direito - Em 'Editar ponto de acesso' existem 3 quadrados verticais, pressione-os e selecione 'Salvar
https://forumupload.ru/uploads/001b/c9/09/2/t677601.png


' - Para evitar isso , você pode pressionar Proxy > E desmarque 'Windows Proxy' .

Descompilar aplicativos Android

usando APKTool

Abra uma janela de comando na pasta APKTool (cd C:/... ou clique com o botão direito do mouse > Open ko..) e escreva o seguinte:

apktool d (significa decompile) <apkfile> <nome da pasta dos pequenos arquivos descompilados>

Então algo assim:

Citar:
C:\Users\MXI\Desktop\Android\>apktool d C:\Users\MXI\Desktop\android\verisure.apk verisuredecom
I: Baksmaling...
I: Carregando tabela de recursos.
Em: Carregado.
I: Carregando tabela de recursos de
I: Carregado.
I: Decodificando recursos de arquivo...
I: Decodificando valores*/* XMLs...
I: Feito.
In: Copiando assets e libs...

Agora temos os arquivos .smali descompilados na pasta ' verisuredecom ', que podem ser alterados/pacotes/cracks e recompilados.
Corrigir várias partes do código não é algo que eu acho que devamos abordar, já que esta é apenas uma introdução simples
(E smali é muito difícil de entender se você simplesmente pular - é simplesmente muito fácil bagunçar apenas removendo um única função/variável, e esquecer que o início da função tão pequeno está ciente disso é a maldita coisa)

Em vez disso, vamos dar uma olhada no arquivo ' AndroidManifest.xml ' que está na raiz da pasta ' verisuredecom '. Este arquivo é o infame manifesto que contém informações sobre, por exemplo,nome do pacote, propriedades, versão, atividades, serviços, permissões, broadcast receivers, intenções, etc.
O manifesto é quase autoexplicativo e, após 10 minutos de estudo atento + google, a maior parte fará sentido. O que nos interessa aqui é quais serviços, intenções e atividades são especificados.
Neste exemplo, não existem serviços ou intenções que nos pareçam capazes de nos ajudar, mas existem algumas atividades interessantes. A atividade que primeiro chama minha atenção é esta:
Citar:
<activity android:name=".DeveloperActivity" />
. Huh. Sempre existe a possibilidade de que classes/atividades com nomes como dev/developer/programmer/coder possam conter algo interessante.
DeveloperActivity.smali está localizado em . .\verisuredecom\smali\com\sdi\mobile\android\verisure - Mas, novamente, smali é muito avançado e não se encaixa bem com uma introdução.

Vamos tentar outra coisa. Podemos usar o comando am do adb shell (atividade mamager) para iniciar as atividades

Vamos tentar abrir a janela de comando que usamos para instalar o aplicativo com ( Android SDK/platform-tools )
Nesta janela de comando, primeiro escrevemos adb shell

Citar:
C:\sdk\platform-tools>adb shell
root@generic:/ #

Em seguida, escrevemos am start < nome do pacote >/.< atividade >
Citar:
root@generic:/ # am start com.sdi.mobile.android.verisure/.DeveloperActivity

https://forumupload.ru/uploads/001b/c9/09/2/t374076.png

E bum. Iniciamos uma atividade diretamente da janela/console de comando. Isso pode ser usado para várias coisas, por exemplo, menus salvos e atividades que esquecem de verificar se o usuário está logado, vazando informações que deveriam ser reservadas apenas para usuários autorizados.

ATENÇÃO! Para voltar do nosso shell podemos pressionar CTRL+C
!! Se você receber uma mensagem de erro como a seguinte:
!!erro: falha de protocolo (sem status)
!!Em seguida, digite >adb kill-server
!!seguido por >adb start-server

Usando Dex2Jar

Abra uma janela de comando na pasta dex2jar ( cd C:/... ou clique com o botão direito do mouse > Open ko.. ) e digite o seguinte:

Citar:
C:\Users\MXI\Desktop\Android\>d2j-dex2jar C:\Users\MXI\Desktop\android\verisure.apk

Isso descompilará o código de byte .DEX dalvik do Android para Java e será um pouco mais fácil de entender. O arquivo verisure-dex2jar.jar agora pode ser aberto em jd-gui.exe .
No entanto, você não pode alterar o código e salvá-lo, mas sim usar o código para obter informações sobre o conteúdo do aplicativo, bem como possíveis falhas na programação.

Após uma pequena revisão do código descompilado, encontramos novamente a interessante classe denominada DeveloperActivity , que também contém as seguintes credenciais codificadas permanentemente :
Citar:

dd.a(this, "mm-test1@verisure.com ", " asdf1234 ");

Devemos tentar ver se eles funcionam? Certifique-se de não executar Charles ao tentar isso.

https://forumupload.ru/uploads/001b/c9/09/2/t687681.png

Sim, sim . Não há muito o que aprender aqui, mas é uma forma de conhecer um pouco melhor o funcionamento do aplicativo.

Se tivermos Charles aberto no momento, receberemos um erro, pois o verisure usa uma forma de SSL Pinning, que faz com que a conexão seja recusada se o certificado SSL não for o mesmo no cliente (android) e no servidor (neste caso Charles, que então encaminha o tráfego).

https://forumupload.ru/uploads/001b/c9/09/2/t487592.png

Novamente, seria um pouco exagerado começar a remover essa verificação ou substituir o cliente http pelo nosso. Mas talvez em algum momento no futuro. ;)

(Se ainda for do seu interesse, aqui estão dois bons artigos sobre o assunto:http://www.mcafee.com/us/resources/white...dation.pdf
http://www.exploit-db.com/wp-content/the.../33430.pdf )

No entanto, vou apenas mostrar uma coisinha divertida que encontrei neste aplicativo, que também fará com que recompile.

Olhando para a classe \com\sdi\mobile\android\util\http\httpservice.smali , que ajuda na conexão com o servidor backend, encontramos o seguinte:

Java:
Citar:
private static void b(Context paramContext)
{
b = new a(new ByteArrayInputStream(a(paramContext.getResources().openRawResource(2131099649))), "mysecret");
d = c(paramContext);
}

Smali:

Código:
new-instance v1, Ljava/io/ByteArrayInputStream;

    invoke-direct {v1, v0}, Ljava/io/ByteArrayInputStream;-><init>([B)V

    .line 74
    new-instance v0, Lcom/sdi/mobile/android/util/http/a;

    const-string v2, "mysecret"

    invoke-direct {v0, v1, v2}, Lcom/sdi/mobile/android/util/http/a;-><init>(Ljava/io/InputStream;Ljava/lang/String;)V

    sput-object v0, Lcom/sdi/mobile/android/util/http/HttpService;->b:Lcom/sdi/mobile/android/util/http/a;

Portanto, aqui estamos lidando com uma string usada em colaboração com um recurso (RAW) lançado em um fluxo de entrada . Hmm..
Vamos dar uma olhada em nossos recursos (foi carregado de RAW ). Em \verisuredecom\res\raw encontramos um arquivo chamado mykeystore.bks , que é um tipo de arquivo usado para importar certificados do BouncyCastle .
Será que eles acabaram de codificar sua chave/senha? então...

Então temos que usar o BouncyCastle para selar um certificado no estilo daquele que encontramos na pasta raw.
http://www.bouncycastle.org/- Uma biblioteca de criptografia bem conhecida .
Eu escolhi aqui usar ' bcprov-jdk15on-146.jar ' para esta tarefa.

Para isso precisamos utilizar o ' keytool ', que está localizado na pasta Bin do JDK :
Citar:
'C:\Arquivos de programas\Java\jdk1.7.0_51\bin'
Abra um console neste diretório e digite o seguinte para criar um novo arquivo de armazenamento de chaves BouncyCastle .bks :

Citar:
keytool -importcert -v -trustcacerts -file <o certificado> -alias sslshit -keystore <arquivo keystore para exportar para> -provider org.bouncycastle.jce.provider.BouncyCastleProvider -providerpath <Biblioteca Jar do BouncyCastle> -storetype BKS -storepass < Senha >

Código:
C:\Program Files\Java\jdk1.7.0_51\bin>keytool -importcert -v -trustcacerts -fil
"C:\Users\MXI\Desktop\apk\charles.crt" -alias sslshit -keystore "C:\Users\MXI\Desktop\apk\verisuredecom\res\raw\mykeystore.bks" -provider org.bouncycastle.j
e.provider.BouncyCastleProvider -providerpath "C:\MXI\MXI\Desktop\apk\bcprov
jdk15on-146.jar" -storetype BKS -storepass mysecret
Owner: C=NZ, ST=Auckland, L=Auckland, O=XK72 Ltd, OU=http://charlesproxy.com/ss
, CN=Charles Proxy SSL Proxying
Issuer: C=NZ, ST=Auckland, L=Auckland, O=XK72 Ltd, OU=http://charlesproxy.com/s
l, CN=Charles Proxy SSL Proxying
Serial number: 1
Valid from: Sun Dec 31 13:00:00 CET 1899 until: Fri Sep 24 05:19:05 CEST 2038
Certificate fingerprints:
         MD5:  D5:E8:27:14:9B:A1:5E:AC:85:02:B5:93:93:6D:9A:83
         SHA1: 18:9B:6E:28:D1:63:5F:3A:83:25:E1:E0:02:18:0D:BA:2C:02:C2:41
         SHA256: C6:A5:94:B2:53:0F:EF:2E:AE:85:1B:91:62:CD:CD:42:EB:B1:BE:A5:E2
6B:A3:1F:81:6C:03:22:40:33:30:9E
         Signature algorithm name: SHA1withRSA
         Version: 3

Extensions:

#1: ObjectId: 2.16.840.1.113730.1.13 Criticality=false
0000: 13 68 53 53 4C 20 50 72   6F 78 79 69 6E 67 20 69  .hSSL Proxying i
0010: 73 20 65 6E 61 62 6C 65   64 20 69 6E 20 43 68 61  s enabled in Cha
0020: 72 6C 65 73 20 50 72 6F   78 79 2E 20 50 6C 65 61  rles Proxy. Plea
0030: 73 65 20 76 69 73 69 74   20 68 74 74 70 3A 2F 2F  se visit http://
0040: 63 68 61 72 6C 65 73 70   72 6F 78 79 2E 63 6F 6D  charlesproxy.com
0050: 2F 73 73 6C 20 66 6F 72   20 6D 6F 72 65 20 69 6E  /ssl for more in
0060: 66 6F 72 6D 61 74 69 6F   6E 2E                    formation.

#2: ObjectId: 2.5.29.19 Criticality=true
BasicConstraints:[
  CA:true
  PathLen:2147483647
]

#3: ObjectId: 2.5.29.15 Criticality=true
KeyUsage [
  Key_CertSign
]

#4: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: BB 27 F4 CB 2E B6 DB B0   58 10 1B BD 80 3F 38 D2  .'......X....?8.
0010: 08 D7 61 29                                        ..a)
]
]

Trust this certificate? [no]:  yes
Certificate was added to keystore
[Storing C:\Users\MXI\Desktop\apk\verisuredecom\res\raw\mykeystore.bks]

Agora, o certificado deve ser armazenado no arquivo KeyStore e, se agora recompilarmos nossos arquivos smali descompilados , não devemos ter problemas com Charles .

Recompilando o arquivo Smali descompilado

Aqui temos que voltar para a janela de comando APKTool / Ou iniciar uma nova se estiver fechada.
Na janela de comando , escrevemos o seguinte:
Citar:
apktool b (significa build) <nome da pasta dos arquivos smali descompilados> <nome do novo arquivo apk>

Que se parece com isso:

Citar:
C:\Users\MXI\Desktop\Android\>apktool b C:\Users\MXI\Desktop\Android\verisuredecom verisurerecompiled.apk

(Aqui podemos apenas escrever 'verisuredecom' como a pasta, pois já estamos trabalhando na pasta Android.

Citar:
C:\Users\MXI\Desktop\apk>apktool b verisuredecom verisurerecompiled.apk
I: Verificando se as fontes foram alteradas...
I: Smaling...
I: Verificando se os recursos foram alterados...
I: Construindo recursos...
I: Copiando libs...
I: Construindo arquivo apk...

Isso é praticamente tudo o que é necessário para recompilar os arquivos. No entanto, eles devem ser 'assinados' antes que o sistema operacional Android permita que sejam instalados.

"Assinatura" de aplicativos recompilados
Felizmente, esse processo também é incrivelmente rápido.
Usando nossos confiáveis ​​CDs de janela de comando ou abrimos a pasta SignApk onde o signapk.jar está escondido.
O SignApk é executado usando Java e precisa de poucos parâmetros.
Aqui usaremos os "arquivos-chave" que estão incluídos no arquivo zip , pois não há necessidade de criar novos para esse fim.

Digite o seguinte na janela de comando, que você abriu/alterou o caminho para a pasta SignApk :
Citar:
java -jar SignApk.jar <pem key file> <pk8 key file> <apk a ser assinado> <apk após a assinatura>

Já com meus arquivos ficará assim:
Citar:
java -jar signapk.jar testkey.x509.pem testkey.pk8 verisurerecompiled.apk verisuresigned.apk

Após alguns segundos, o novo arquivo é assinado e localizado na pasta signapk . Instalando aplicativos modificados Quando usamos o SignApk , substituímos a chave por uma nova para que não possamos 'atualizar' nosso aplicativo. Aqui somos forçados a primeiro desinstalar o aplicativo e depois instalar a nova versão . Isso pode ser feito no emulador em Configurações > Aplicativo > Selecione o aplicativo (Verisure) > Desinstalar - Ou - Usando nosso amado shell adb com o seguinte comando :




Como o Doutor Blue tão bem apontou, a maneira mais fácil e rápida de desinstalar aplicativos é claramente usando adb desinstalação
Citar:
C:\sdk\platform-tools>adb desinstalar com.sdi.mobile.android.verisure

Citar:
C:\sdk\platform-tools>adb shell
root@generic:/ # am start -a android.intent.action.DELETE -d package:com.sdi.mob
ile.android.verisure
on.DELETE -d package:com .sdi.mobile.android.verisure <
Iniciando: Intenção { act=android.intent.action.DELETE dat=package:com.sdi.mobile.a
ndroid.verisure }

A partir daqui, basta instalar o novo apk assinado , usando o mesmo comando que usamos no início :
Citar:
C:\sdk\platform-tools>adb install C:\Users\MXI\Desktop\android\SignApk\verisuresigned.apk

Agora que o aplicativo está instalado , e se primeiro abrirmos o Charles e depois o Verisure , podemos ver que todo o tráfego SSL é executado pelo Charles sem nenhum problema .
A partir daqui podemos ver que o nome de usuário/senha é enviado como Base64 , e obtemos várias informações sobre como as várias solicitações e respostas são estruturadas no servidor .

https://forumupload.ru/uploads/001b/c9/09/2/t692236.png

Charles e outros proxies podem, em alguns casos, ser muito bons para fazer injeções SQL em, por exemplo, parâmetros POST, que a maioria das pessoas simplesmente ignora.

Provavelmente só tem que corrigir os piores erros e, em seguida, as imagens devem ser priorizadas, já que o quadro está definido para um máximo de 10.

Provavelmente também terá que lançar alguns patches simples em algum momento.

0

2


» COVIL HACKER » rachaduras/inversão » Android descompilando/revertendo


|