tip

Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks

Análise de Aplicações React Native

Para confirmar se a aplicação foi construída no framework React Native, siga estes passos:

  1. Renomeie o arquivo APK com uma extensão zip e extraia-o para uma nova pasta usando o comando cp com.example.apk example-apk.zip e unzip -qq example-apk.zip -d ReactNative.

  2. Navegue até a nova pasta ReactNative e localize a pasta assets. Dentro desta pasta, você deve encontrar o arquivo index.android.bundle, que contém o JavaScript React em um formato minificado.

  3. Use o comando find . -print | grep -i ".bundle$" para procurar o arquivo JavaScript.

Código Javascript

Se ao verificar o conteúdo do index.android.bundle você encontrar o código JavaScript da aplicação (mesmo que minificado), você pode analisá-lo para encontrar informações sensíveis e vulnerabilidades.

Como o bundle contém na verdade todo o código JS da aplicação, é possível dividi-lo em diferentes arquivos (potencialmente facilitando sua engenharia reversa) usando a ferramenta react-native-decompiler.

Webpack

Para analisar ainda mais o código JavaScript, você pode fazer o upload do arquivo para https://spaceraccoon.github.io/webpack-exploder/ ou seguir estes passos:

  1. Crie um arquivo chamado index.html no mesmo diretório com o seguinte código:
html
<script src="./index.android.bundle"></script>
  1. Abra o arquivo index.html no Google Chrome.

  2. Abra a Developer Toolbar pressionando Command+Option+J para OS X ou Control+Shift+J para Windows.

  3. Clique em "Sources" na Developer Toolbar. Você deve ver um arquivo JavaScript que está dividido em pastas e arquivos, formando o pacote principal.

Se você encontrar um arquivo chamado index.android.bundle.map, poderá analisar o código-fonte em um formato não minificado. Os arquivos de mapa contêm mapeamento de origem, que permite mapear identificadores minificados.

Para procurar credenciais e endpoints sensíveis, siga estas etapas:

  1. Identifique palavras-chave sensíveis para analisar o código JavaScript. Aplicações React Native costumam usar serviços de terceiros como Firebase, endpoints de serviço AWS S3, chaves privadas, etc.

  2. Neste caso específico, observou-se que a aplicação estava usando o serviço Dialogflow. Procure por um padrão relacionado à sua configuração.

  3. Foi uma sorte que credenciais sensíveis codificadas foram encontradas no código JavaScript durante o processo de reconhecimento.

Mudar o código JS e reconstruir

Neste caso, mudar o código é fácil. Você só precisa renomear o aplicativo para usar a extensão .zip e extraí-lo. Então você pode modificar o código JS dentro deste pacote e reconstruir o aplicativo. Isso deve ser suficiente para permitir que você injete código no aplicativo para fins de teste.

## Hermes bytecode

Se o pacote contiver Hermes bytecode, você não poderá acessar o código Javascript do aplicativo (nem mesmo a versão minificada).

Você pode verificar se o pacote contém Hermes bytecode executando o seguinte comando:

bash
file index.android.bundle
index.android.bundle: Hermes JavaScript bytecode, version 96

No entanto, você pode usar as ferramentas hbctool, hermes-dec ou hermes_rs para desmontar o bytecode e também para decompilá-lo para algum código JS pseudo. Para fazer isso, por exemplo, esses comandos:

bash
hbc-disassembler ./index.android.bundle /tmp/my_output_file.hasm
hbc-decompiler ./index.android.bundle /tmp/my_output_file.js

Mudar código e reconstruir

Idealmente, você deve ser capaz de modificar o código desmontado (mudando uma comparação, ou um valor ou qualquer coisa que você precise modificar) e então reconstruir o bytecode e depois reconstruir o aplicativo.

A ferramenta hbctool suporta a desmontagem do pacote e a reconstrução após as alterações serem realizadas, no entanto, ela suporta apenas versões antigas do bytecode Hermes.

A ferramenta hermes-dec não suporta a reconstrução do bytecode.

A ferramenta hermes_rs suporta a reconstrução do bytecode, mas na verdade é uma biblioteca e não uma ferramenta CLI.

Análise Dinâmica

Você pode tentar analisar dinamicamente o aplicativo usando o Frida para habilitar o modo de desenvolvedor do aplicativo React e usar react-native-debugger para se conectar a ele. No entanto, para isso, você aparentemente precisa do código-fonte do aplicativo. Você pode encontrar mais informações sobre isso em https://newsroom.bedefended.com/hooking-react-native-applications-with-frida/.

Referências

tip

Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks