mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-24 21:53:54 +00:00
117 lines
12 KiB
Markdown
117 lines
12 KiB
Markdown
# Aplicativos Xamarin
|
|
|
|
<details>
|
|
|
|
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
|
|
|
* Você trabalha em uma **empresa de segurança cibernética**? Você quer ver sua **empresa anunciada no HackTricks**? ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
|
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
|
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
|
|
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
|
* **Compartilhe suas técnicas de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
|
|
|
</details>
|
|
|
|
## **Informações básicas**
|
|
|
|
Xamarin é uma plataforma de código aberto que oferece aos desenvolvedores acesso a uma ampla seleção de ferramentas e complementos, permitindo-lhes **criar aplicativos modernos para iOS, Android e Windows usando .NET e C#**.
|
|
|
|
### Arquitetura do Xamarin Android
|
|
|
|
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
|
|
|
O Xamarin oferece ligações .NET para os namespaces Android.\* e Java.\*. As aplicações Xamarin Android operam sob o ambiente de execução Mono, com a máquina virtual Android Runtime (ART) em execução lado a lado.
|
|
|
|
O ambiente de execução Mono chama esses namespaces por meio de Invólucros Chamáveis Gerenciados (MCW) e fornece Invólucros Chamáveis Android (ACW) para o ART.
|
|
|
|
Ambos esses ambientes são executados em cima do kernel Linux e invocam várias APIs para o código do usuário. Essa estrutura permite que os desenvolvedores acessem o sistema subjacente.
|
|
|
|
### Projeto Xamarin iOS
|
|
|
|
As aplicações Xamarin.iOS são executadas sob o ambiente de execução Mono e usam a compilação Ahead of Time (AOT) completa para compilar códigos .NET C# para a linguagem de montagem ARM.
|
|
|
|
Ele é executado junto com o Objective-C Runtime. Os ambientes de execução são executados em cima de um kernel semelhante ao UNIX e invocam várias APIs para o código do usuário, o que permite que os desenvolvedores acessem o sistema gerenciado ou nativo subjacente.
|
|
|
|
O diagrama abaixo representa essa arquitetura:
|
|
|
|
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
|
|
|
### O que é o .Net Runtime e o Mono Framework?
|
|
|
|
**O framework .Net é um conjunto de assemblies, classes e namespaces** que os desenvolvedores podem usar para criar aplicativos; o .Net Runtime executa o código compilado, e o processo é chamado de execução de código gerenciado. O .NET Runtime oferece várias funcionalidades que garantem a independência de plataforma e são compatíveis com versões mais antigas do framework.
|
|
|
|
**O Mono Framework** foi iniciado em 2005 como uma implementação do .NET Framework para Linux (Ximian/SuSe/Novell). Patrocinado pela Microsoft e liderado pela Xamarin, o Mono é a implementação de código aberto do framework .NET com base nos padrões ECMA para Common Language Runtime e C#.
|
|
|
|
## Técnicas de Engenharia Reversa para Aplicativos Xamarin
|
|
|
|
### Descompilação de Assemblies Xamarin
|
|
|
|
A descompilação é o processo usado para produzir código-fonte a partir de código compilado. Para obter informações sobre os assemblies e executáveis atualmente na memória, o Windows é um ótimo lugar.
|
|
|
|
Para abrir a janela Módulos, selecione Depurar > Janelas > Módulos. Assim que você detectar o módulo que requer descompilação, clique com o botão direito e selecione "Decompile Source to Symbol File". Essa ação **cria um arquivo de símbolo que contém um código-fonte descompilado que**, por sua vez, permite que você entre no código de terceiros diretamente do seu código-fonte.
|
|
|
|
O **Visual Studio** descompila o código gerenciado, mesmo na ausência de símbolos, permitindo que você visualize o código, inspecione as variáveis e defina pontos de interrupção. Para extrair o código-fonte para o disco, clique com o botão direito no módulo com o código-fonte incorporado e clique em "Extract Embedded Source". Isso exportará os arquivos de origem para uma pasta de arquivos diversos para análise posterior.
|
|
|
|
### Compilação JIT vs AOT de Aplicativos Xamarin
|
|
|
|
Existem duas opções para compilar código Xamarin baseado em C# em um aplicativo, ou seja, **compilação just-in-time e compilação ahead-of-time**. A forma de compilação afeta como o código do aplicativo é enviado dentro do arquivo apk ou ipa. Vamos dar uma olhada rápida nisso abaixo:
|
|
|
|
\- **Android**: O Xamarin permite que você compile usando **as opções JIT e AOT para Android**. Também há uma maneira de obter a maior velocidade de execução usando o modo Hybrid AOT. Observe que o modo Full AOT está disponível apenas para a licença Enterprise.
|
|
|
|
\- **iOS**: Existe apenas uma opção no caso do iOS, **compilação ahead-of-time**. Isso ocorre devido às políticas da Apple, que proíbem a execução de código gerado dinamicamente em um dispositivo.
|
|
|
|
{% hint style="info" %}
|
|
Se você encontrar um aplicativo compilado com Full AOT e se os arquivos de assembly IL forem removidos para reduzir o tamanho da compilação pelo desenvolvedor, a engenharia reversa exigirá uma etapa adicional de extração dos arquivos dll dos arquivos .dll.so da pasta lib ou do arquivo `libmonodroid_bundle_app.so`. Se for um aplicativo compilado com Hybrid AOT e os arquivos IL ainda estiverem presentes no pacote do aplicativo, podemos usá-los para engenharia reversa do aplicativo.
|
|
{% endhint %}
|
|
## Obtendo os arquivos dll do APK/IPA
|
|
|
|
Basta **descompactar o arquivo apk/ipa** e copiar todos os arquivos presentes no diretório assemblies:
|
|
|
|
<figure><img src="../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
|
|
|
No caso dos APKs do Android, **esses arquivos dll estão comprimidos** e não podem ser diretamente usados para descompilação. Felizmente, existem ferramentas disponíveis que podemos usar para **descomprimir esses arquivos dll** como [XamAsmUnZ](https://github.com/cihansol/XamAsmUnZ) e [xamarin-decompress](https://github.com/NickstaDB/xamarin-decompress).
|
|
```
|
|
python3 xamarin-decompress.py -o /path/to/decompressed/apk
|
|
```
|
|
É possível que, em vez de arquivos DLL, você veja `assemblies.blob` e `assemblies.manifest` no diretório de assemblies. Isso é um Xamarin AssemblyStore e a forma atualmente recomendada de empacotar DLLs em um aplicativo Android. O `assemblies.manifest` é um arquivo de texto que descreve o conteúdo do arquivo binário `assemblies.blob`. Para desempacotá-los, você precisará usar o [pyxamstore](https://github.com/jakev/pyxamstore).
|
|
```
|
|
pyxamstore unpack -d /path/to/decompressed/apk/assemblies/
|
|
```
|
|
No caso do iOS, **os arquivos DLL dentro dos arquivos IPA podem ser carregados diretamente** em um descompilador (não é necessário descompactar nada).
|
|
|
|
**A maioria do código do aplicativo pode ser encontrado ao descompilar os arquivos DLL**. Além disso, observe que os aplicativos baseados no Framework Xamarin contêm 90% do código comum nas compilações de todas as plataformas, como iOS e Android, etc.
|
|
|
|
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
|
|
|
A partir da captura de tela acima, listando os arquivos DLL que estavam presentes no APK, podemos confirmar que é um aplicativo Xamarin. Ele contém arquivos DLL específicos do aplicativo, juntamente com os arquivos de biblioteca necessários para a execução do aplicativo, como `Xamarin.Essentails.dll` ou `Mono.Security.dll`.
|
|
|
|
{% hint style="success" %}
|
|
Finalmente, você pode usar [**essas ferramentas recomendadas**](../reversing/reversing-tools-basic-methods/#net-decompiler) para acessar o **código C#** dos DLLs.
|
|
{% endhint %}
|
|
|
|
## Análise Dinâmica
|
|
|
|
Tente verificar se o aplicativo possui algum tipo de SSL pinning. Se não tiver, usando o Burp como um sistema, o CA deve funcionar para interceptar as solicitações. **O Frida com tempo de execução Java ou ObjC não funcionará** aqui, mas felizmente existe uma ferramenta que pode ser usada para fazer hook em métodos.
|
|
|
|
[**Fridax**](https://github.com/NorthwaveSecurity/fridax) permite que você **modifique o binário .NET dentro de um aplicativo Xamarin em tempo de execução**. A análise estática ajudará a identificar diferentes métodos presentes no aplicativo, que podem ser conectados posteriormente para análise dinâmica usando o Fridax. Abaixo estão alguns scripts do Frida que podem nos ajudar a contornar a detecção de root ou SSL pinning:
|
|
|
|
* [**xamarin-antiroot**](https://codeshare.frida.re/@Gand3lf/xamarin-antiroot/)
|
|
* [**xamarin-root-detect-bypass**](https://codeshare.frida.re/@nuschpl/xamarin-root-detect-bypass/)
|
|
* [**Frida-xamarin-unpin**](https://github.com/GoSecure/frida-xamarin-unpin)
|
|
|
|
## Referências
|
|
|
|
* [https://www.appknox.com/security/xamarin-reverse-engineering-a-guide-for-penetration-testers](https://www.appknox.com/security/xamarin-reverse-engineering-a-guide-for-penetration-testers)
|
|
* [https://thecobraden.com/posts/unpacking\_xamarin\_assembly\_stores/](https://thecobraden.com/posts/unpacking\_xamarin\_assembly\_stores/)
|
|
|
|
<details>
|
|
|
|
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
|
|
|
* Você trabalha em uma **empresa de segurança cibernética**? Você quer ver sua **empresa anunciada no HackTricks**? ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
|
* Descubra [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
|
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
|
|
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
|
* **Compartilhe seus truques de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e para o** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
|
|
|
</details>
|