Aplicativo Espião Celular
Monitore chamadas, SMS, Gps, câmera, fotos, vídeos, Whatsapp, Facebook, etc.
Na verdade, além de analisar os princípios de implementação das linguagens java, como classes internas e enumerações java, também é útil em alguns cenários específicos. Agora geralmente é feito modificando smali, mas também pode ser feito com base em bytecode., Este artigo é baseado na análise de bytecode java anterior, portanto, apenas o método bytecode é discutido.
Muitos jogos autônomos, e até mesmo alguns jogos online, executam as operações lógicas localmente. O servidor recebe apenas os resultados da operação enviados pelo cliente. Existem também alguns aplicativos de cobrança, na verdade, as funções estão todas no código local, apenas Mas é para julgar se há pagamento, e se houver pagamento, a entrada da função será exibida.
Se pudermos modificar seu código e alterar o resultado do upload ou o julgamento de pagar o que queremos, podemos fazer o que quisermos.
descompilar
Para modificar a lógica do código do aplicativo, devemos primeiro analisar qual é a lógica do código original. No entanto, como o código do aplicativo é propriedade privada de cada empresa, a menos que o código vaze, geralmente não podemos obtê-lo. desta vez só podemos usar técnicas de descompilação.
Aplicativo Espião Celular
Monitore chamadas, SMS, Gps, câmera, fotos, vídeos, Whatsapp, Facebook, etc.
Se você for à Internet procurar a tecnologia de descompilação do apk, provavelmente encontrará os seguintes métodos:
- Use a ferramenta apktool para extrair o apk
- Use a ferramenta dex2jar para converter arquivos dex otimizados para Android em classes Java
- Use a ferramenta jd-gui para visualizar o código java na classe
Uma operação tão complicada está realmente desatualizada. Vou apresentar uma ferramenta de operação tola de um clique para todos.
jadx é uma ferramenta de descompilação Android de código aberto, seu código está hospedado no github, você pode baixar e usar. O uso é muito simples, após o download, descompacte-o e entre no diretório bin para executar o jadx-gui (linux/mac ) ou jadx-gui.bat (windows), você pode iniciar uma interface visual, depois clicar em "Arquivo - Abrir", e selecionar o aplicativo que queremos descompilar, você pode ver o código no apk
Um aplicativo de demonstração é descompilado aqui, e seu MainActivity.onCreate julga uma variável de sinalizador e, em seguida, exibe o Toast. Quando instalamos este apk e o executamos, podemos ver o brinde aparecendo: "hello world!"
Outros aplicativos são semelhantes, você pode visualizar seu código dessa maneira. No entanto, aplicativos lançados oficialmente geralmente fazem operações de ofuscação. Neste momento, o nome da classe, o nome do método e o nome da variável do código que descompilamos e processamos se tornará a, b, c é um caractere sem sentido.
Mas apenas o nome mudou, a lógica de execução é exatamente a mesma, portanto, desde que você seja cuidadoso o suficiente, ainda poderá entender sua lógica de código.
O Jadx tem uma função poderosa que pode exportar o projeto gradle, clique em "Arquivo/Salvar como projeto Gradle" para exportar o projeto gradle e, em seguida, altere a estrutura do diretório, você pode usar o Android studio para abrir o projeto e editar e modificar o código.
Se a compilação for bem-sucedida após a modificação, nosso objetivo foi alcançado e podemos fazer o que quisermos, mas este projeto tem uma alta probabilidade de não conseguir compilar com sucesso e há muitos erros estranhos.
Em seguida, vou levá-lo a decifrar este apk passo a passo, modificar sua lógica, não jogar "hello world!", mas jogar "hello java".
Modificar o bytecode do aplicativo
Podemos usar jadx para analisar facilmente a lógica do código, mas se a recompilação falhar, temos que seguir outro caminho.
Aqui está a maneira de editar diretamente o bytecode. Se você seguir esse caminho, não haverá operações tolas para usar. Vamos passo a passo honestamente
1. Descompacte o apk
- apk é na verdade um pacote compactado zip, podemos alterar seu sufixo para.zip e depois descompactá-lo diretamente
- Colocamos as coisas descompactadas no diretório app-release-unsigned:
2. Converter dex em jar
- Todos nós sabemos que a máquina virtual Android não é uma máquina virtual Java comum, ela não pode executar diretamente arquivos de classe Java e precisa ser otimizada em arquivos dex.
- Quando modificamos o bytecode, precisamos convertê-lo novamente. Aqui usamos a função dex2jar da ferramenta dex-tools:
- Aqui eu apresento apenas o uso de comandos no Linux, não no Windows. Na verdade, é uma versão semelhante usando.bat, você pode pesquisar sozinho.
- Converta classes.dex para arquivo jar:
- ~/dex-tools-2.1-SNAPSHOT/d2j-dex2jar.sh classes.dex
- Ele irá gerar o arquivo classes-dex2jar.jar:
3. Modifique o bytecode da classe
- Na verdade, o arquivo jar também é um pacote compactado zip, ainda podemos alterar diretamente o sufixo para zip e, em seguida, descompactar para encontrar MainActivity.class
- Neste momento, podemos usar o comando javap mencionado no artigo anterior para visualizar o código dentro:
- javap -c MainActivity
- E podemos ver que, se continuarmos a executar, ele produzirá hello world!, e se pularmos para 32 linhas, ele produzirá hello java!
- Aqui podemos alterar diretamente if_icmpne para if_icmpeq, pular para a linha 32 quando for igual, caso contrário, continue a executar, para que o prompt original "hello world!" se torne "hello java!"
- Se você abrir o arquivo de classe diretamente com um editor, existem alguns valores binários nele.
- Então, como podemos modificá-lo?
- Aqui vamos usar outra ferramenta jbe, o nome completo é java bytecode editor
- Após o download, descompacte-o, entre no diretório bin e use o seguinte comando para abrir a interface gráfica:
- java ee.ioc.cs.jbe.browser.BrowserApplication
- Abra MainActivity.class na interface gráfica e encontre nosso código MainActivity.onCreate
- Em seguida, clique na opção Code Editor para modificar o bytecode, aqui alteramos if_icmpne para if_icmpeq e, em seguida, clique em Save method:
- Isso completa nossa modificação lógica
4. Reembalar dex
- Em seguida vamos reempacotar o apk, primeiro comprimir a classe em um zip, preste atenção na estrutura de diretórios:
- Em seguida, altere o sufixo para jar e use jar2dex para gerar dex:
- ~/dex-tools-2.1-SNAPSHOT/d2j-jar2dex.sh classes-dex2jar.jar
- Em seguida, substitua o class.dex original pelo dex gerado e exclua todos os arquivos temporários gerados, como os diretórios classes-dex2jar.zip e classes-dex2jar
5. Excluir informações de assinatura
- Geralmente, os aplicativos que recebemos são aplicativos assinados. Depois que o aplicativo for assinado, as informações de verificação de recursos e códigos serão salvas no apk. Se modificarmos o arquivo dex, a verificação falhará, portanto, o apk não poderá ser instalado. de.
- Portanto, precisamos excluir a assinatura original. O método específico é excluir os três arquivos no diretório META-INF:
- CERT.RSA
- CERT.SF
- MANIFEST.MF
6. Reempacotar apk
- Em seguida, o mesmo arquivo compactado gera um pacote compactado zip, preste atenção na estrutura de diretórios:
- Finalmente, mude o sufixo zip para apk, e nosso apk é empacotado
- Como nosso apk reempacotado excluiu as informações de assinatura, se ele for instalado diretamente, ele falhará e precisamos assiná-lo novamente.
- Você pode usar o seguinte comando para criar um alias como android.keystore, e o nome do arquivo também é o arquivo de assinatura de android.keystore
- keytool -genkeypair -alias android.keystore -keyalg RSA -validity 400 -keystore android.keystore
- Depois de pressionar enter, ele permitirá que você insira alguma senha, informações do desenvolvedor, etc., e você receberá um arquivo android.keystore após a conclusão
- Em seguida, usamos o android.keystore obtido para assinar novamente o aplicativo:
- jarsigner -keystore android.keystore -signedjar release.apk app-release-unsigned.apk android.keystore
- Obtenha o release.apk assinado, vamos instalá-lo e executá-lo para ver que o brinde se tornou "hello java!".