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
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.
Análise de Aplicações React Native
Para confirmar se a aplicação foi construída no framework React Native, siga estes passos:
-
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
eunzip -qq example-apk.zip -d ReactNative
. -
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. -
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:
- Crie um arquivo chamado
index.html
no mesmo diretório com o seguinte código:
<script src="./index.android.bundle"></script>
-
Abra o arquivo
index.html
no Google Chrome. -
Abra a Developer Toolbar pressionando Command+Option+J para OS X ou Control+Shift+J para Windows.
-
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:
-
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.
-
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.
-
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:
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:
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
- https://medium.com/bugbountywriteup/lets-know-how-i-have-explored-the-buried-secrets-in-react-native-application-6236728198f7
- https://www.assetnote.io/resources/research/expanding-the-attack-surface-react-native-android-applications
- https://payatu.com/wp-content/uploads/2023/02/Mastering-React-Native-Application-Pentesting-A-Practical-Guide-2.pdf
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
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.