mirror of
https://github.com/carlospolop/hacktricks
synced 2024-12-20 18:14:15 +00:00
419 lines
18 KiB
Markdown
419 lines
18 KiB
Markdown
# Tutorial do Frida
|
|
|
|
<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>
|
|
|
|
<figure><img src="../../../.gitbook/assets/i3.png" alt=""><figcaption></figcaption></figure>
|
|
|
|
**Dica de bug bounty**: **inscreva-se** no **Intigriti**, uma plataforma premium de **bug bounty criada por hackers, para hackers**! Junte-se a nós em [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) hoje mesmo e comece a ganhar recompensas de até **$100.000**!
|
|
|
|
{% embed url="https://go.intigriti.com/hacktricks" %}
|
|
|
|
## Instalação
|
|
|
|
Instale as **ferramentas do frida**:
|
|
```bash
|
|
pip install frida-tools
|
|
pip install frida
|
|
```
|
|
**Baixe e instale** no Android o **servidor frida** ([Baixe a versão mais recente](https://github.com/frida/frida/releases)).\
|
|
Um comando para reiniciar o adb no modo root, conectar-se a ele, fazer upload do frida-server, dar permissões de execução e executá-lo em segundo plano:
|
|
|
|
{% code overflow="wrap" %}
|
|
```bash
|
|
adb root; adb connect localhost:6000; sleep 1; adb push frida-server /data/local/tmp/; adb shell "chmod 755 /data/local/tmp/frida-server"; adb shell "/data/local/tmp/frida-server &"
|
|
```
|
|
{% endcode %}
|
|
|
|
**Verifique** se está **funcionando**:
|
|
```bash
|
|
frida-ps -U #List packages and processes
|
|
frida-ps -U | grep -i <part_of_the_package_name> #Get all the package name
|
|
```
|
|
## Tutoriais
|
|
|
|
### [Tutorial 1](frida-tutorial-1.md)
|
|
|
|
**De**: [https://medium.com/infosec-adventures/introduction-to-frida-5a3f51595ca1](https://medium.com/infosec-adventures/introduction-to-frida-5a3f51595ca1)\
|
|
**APK**: [https://github.com/t0thkr1s/frida-demo/releases](https://github.com/t0thkr1s/frida-demo/releases)\
|
|
**Código-fonte**: [https://github.com/t0thkr1s/frida-demo](https://github.com/t0thkr1s/frida-demo)
|
|
|
|
Siga o [link para ler](frida-tutorial-1.md).
|
|
|
|
### [Tutorial 2](frida-tutorial-2.md)
|
|
|
|
**De**: [https://11x256.github.io/Frida-hooking-android-part-2/](https://11x256.github.io/Frida-hooking-android-part-2/) (Partes 2, 3 e 4)\
|
|
**APKs e Código-fonte**: [https://github.com/11x256/frida-android-examples](https://github.com/11x256/frida-android-examples)
|
|
|
|
Siga o [link para ler](frida-tutorial-2.md).
|
|
|
|
### [Tutorial 3](owaspuncrackable-1.md)
|
|
|
|
**De**: [https://joshspicer.com/android-frida-1](https://joshspicer.com/android-frida-1)\
|
|
**APK**: [https://github.com/OWASP/owasp-mstg/blob/master/Crackmes/Android/Level\_01/UnCrackable-Level1.apk](https://github.com/OWASP/owasp-mstg/blob/master/Crackmes/Android/Level\_01/UnCrackable-Level1.apk)
|
|
|
|
Siga o [link para ler](owaspuncrackable-1.md).\
|
|
**Você pode encontrar alguns scripts incríveis do Frida aqui:** [**https://codeshare.frida.re/**](https://codeshare.frida.re)
|
|
|
|
## Exemplos Rápidos
|
|
|
|
Aqui você pode encontrar as funcionalidades mais básicas e interessantes do Frida para criar um script rápido:
|
|
|
|
### Chamando o Frida a partir da linha de comando
|
|
```bash
|
|
frida-ps -U
|
|
|
|
#Basic frida hooking
|
|
frida -l disableRoot.js -f owasp.mstg.uncrackable1
|
|
|
|
#Hooking before starting the app
|
|
frida -U --no-pause -l disableRoot.js -f owasp.mstg.uncrackable1
|
|
#The --no-pause and -f options allow the app to be spawned automatically,
|
|
#frozen so that the instrumentation can occur, and the automatically
|
|
#continue execution with our modified code.
|
|
```
|
|
### Script Python Básico
|
|
|
|
```python
|
|
import frida
|
|
|
|
# Attach to the target process
|
|
session = frida.attach("com.example.app")
|
|
|
|
# Define the JavaScript code to be injected
|
|
js_code = """
|
|
Java.perform(function () {
|
|
// Intercept the target method
|
|
var targetClass = Java.use("com.example.app.TargetClass");
|
|
targetClass.targetMethod.implementation = function () {
|
|
// Modify the behavior of the method
|
|
console.log("Method intercepted!");
|
|
return this.targetMethod();
|
|
};
|
|
});
|
|
"""
|
|
|
|
# Create the script
|
|
script = session.create_script(js_code)
|
|
|
|
# Load the script into the target process
|
|
script.load()
|
|
|
|
# Detach from the target process
|
|
session.detach()
|
|
```
|
|
|
|
### Script Python Básico
|
|
|
|
```python
|
|
import frida
|
|
|
|
# Anexar ao processo alvo
|
|
session = frida.attach("com.example.app")
|
|
|
|
# Definir o código JavaScript a ser injetado
|
|
js_code = """
|
|
Java.perform(function () {
|
|
// Interceptar o método alvo
|
|
var targetClass = Java.use("com.example.app.TargetClass");
|
|
targetClass.targetMethod.implementation = function () {
|
|
// Modificar o comportamento do método
|
|
console.log("Método interceptado!");
|
|
return this.targetMethod();
|
|
};
|
|
});
|
|
"""
|
|
|
|
# Criar o script
|
|
script = session.create_script(js_code)
|
|
|
|
# Carregar o script no processo alvo
|
|
script.load()
|
|
|
|
# Desanexar do processo alvo
|
|
session.detach()
|
|
```
|
|
```python
|
|
import frida, sys
|
|
|
|
jscode = open(sys.argv[0]).read()
|
|
process = frida.get_usb_device().attach('infosecadventures.fridademo')
|
|
script = process.create_script(jscode)
|
|
print('[ * ] Running Frida Demo application')
|
|
script.load()
|
|
sys.stdin.read()
|
|
```
|
|
### Hooking de funções sem parâmetros
|
|
|
|
Faça o hook da função `a()` da classe `sg.vantagepoint.a.c`
|
|
```javascript
|
|
Java.perform(function () {
|
|
; rootcheck1.a.overload().implementation = function() {
|
|
rootcheck1.a.overload().implementation = function() {
|
|
send("sg.vantagepoint.a.c.a()Z Root check 1 HIT! su.exists()");
|
|
return false;
|
|
};
|
|
});
|
|
```
|
|
# Hook java `exit()`
|
|
|
|
Neste tutorial, vamos aprender como fazer um hook no método `exit()` em um aplicativo Android usando o Frida.
|
|
|
|
## Introdução
|
|
|
|
O Frida é uma poderosa ferramenta de instrumentação e manipulação de código que permite realizar hooks em aplicativos Android. Com o Frida, podemos interceptar chamadas de métodos e modificar seu comportamento.
|
|
|
|
## Pré-requisitos
|
|
|
|
Antes de começar, certifique-se de ter o seguinte:
|
|
|
|
- Um dispositivo Android com acesso root ou um emulador Android configurado.
|
|
- O Frida Server instalado no dispositivo ou no emulador.
|
|
- O ambiente de desenvolvimento configurado para executar comandos Frida.
|
|
|
|
## Passo a passo
|
|
|
|
Siga as etapas abaixo para fazer um hook no método `exit()`:
|
|
|
|
1. Abra o aplicativo Android no qual você deseja fazer o hook.
|
|
2. Inicie o servidor Frida no dispositivo ou no emulador.
|
|
3. Abra um terminal e execute o seguinte comando para se conectar ao dispositivo ou emulador:
|
|
|
|
```
|
|
frida -U nome_do_pacote
|
|
```
|
|
|
|
Substitua `nome_do_pacote` pelo nome do pacote do aplicativo Android.
|
|
|
|
4. No prompt do Frida, execute o seguinte comando para listar as classes disponíveis no aplicativo:
|
|
|
|
```javascript
|
|
Java.enumerateLoadedClasses({
|
|
onMatch: function(className) {
|
|
console.log(className);
|
|
},
|
|
onComplete: function() {
|
|
console.log("Done");
|
|
}
|
|
});
|
|
```
|
|
|
|
Anote o nome da classe que contém o método `exit()`.
|
|
|
|
5. Agora, vamos fazer o hook no método `exit()`. No prompt do Frida, execute o seguinte comando:
|
|
|
|
```javascript
|
|
Java.use('nome_da_classe').exit.implementation = function() {
|
|
console.log("Hooked exit()");
|
|
// Faça as modificações desejadas aqui
|
|
// ...
|
|
// Chame o método original
|
|
this.exit();
|
|
}
|
|
```
|
|
|
|
Substitua `nome_da_classe` pelo nome da classe que contém o método `exit()`.
|
|
|
|
6. Execute o método no aplicativo Android que chama o método `exit()`. Você verá a mensagem "Hooked exit()" no prompt do Frida, indicando que o hook foi bem-sucedido.
|
|
|
|
## Conclusão
|
|
|
|
Neste tutorial, aprendemos como fazer um hook no método `exit()` em um aplicativo Android usando o Frida. O Frida é uma ferramenta poderosa que nos permite interceptar chamadas de métodos e modificar seu comportamento. Com essa técnica, podemos explorar e modificar o fluxo de execução de um aplicativo Android para fins de teste de segurança ou depuração.
|
|
```javascript
|
|
var sysexit = Java.use("java.lang.System");
|
|
sysexit.exit.overload("int").implementation = function(var_0) {
|
|
send("java.lang.System.exit(I)V // We avoid exiting the application :)");
|
|
};
|
|
```
|
|
# Hook MainActivity `.onStart()` & `.onCreate()`
|
|
|
|
To hook the `.onStart()` and `.onCreate()` methods of the MainActivity class in an Android app, we can use the Frida framework. Frida allows us to dynamically inject JavaScript code into the app's runtime and intercept method calls.
|
|
|
|
Here's an example of how to hook these methods using Frida:
|
|
|
|
```javascript
|
|
Java.perform(function () {
|
|
var MainActivity = Java.use('com.example.MainActivity');
|
|
|
|
MainActivity.onStart.implementation = function () {
|
|
console.log('Hooked MainActivity.onStart()');
|
|
// Your custom code here
|
|
|
|
// Call the original method
|
|
this.onStart();
|
|
};
|
|
|
|
MainActivity.onCreate.implementation = function () {
|
|
console.log('Hooked MainActivity.onCreate()');
|
|
// Your custom code here
|
|
|
|
// Call the original method
|
|
this.onCreate();
|
|
};
|
|
});
|
|
```
|
|
|
|
In the above code, we first use `Java.use()` to obtain a reference to the MainActivity class. Then, we override the `.onStart()` and `.onCreate()` methods using `.implementation`. Inside the overridden methods, you can add your custom code to be executed when these methods are called. Finally, we call the original methods using `this.onStart()` and `this.onCreate()`.
|
|
|
|
Remember to replace `'com.example.MainActivity'` with the actual package and class name of the MainActivity in the app you are testing.
|
|
|
|
By hooking these methods, you can intercept their execution and perform various actions, such as logging sensitive information, modifying method parameters, or even bypassing certain checks.
|
|
|
|
Happy hacking!
|
|
```javascript
|
|
var mainactivity = Java.use("sg.vantagepoint.uncrackable1.MainActivity");
|
|
mainactivity.onStart.overload().implementation = function() {
|
|
send("MainActivity.onStart() HIT!!!");
|
|
var ret = this.onStart.overload().call(this);
|
|
};
|
|
mainactivity.onCreate.overload("android.os.Bundle").implementation = function(var_0) {
|
|
send("MainActivity.onCreate() HIT!!!");
|
|
var ret = this.onCreate.overload("android.os.Bundle").call(this,var_0);
|
|
};
|
|
```
|
|
# Hook android `.onCreate()`
|
|
|
|
Neste tutorial, vamos aprender como fazer hook no método `.onCreate()` de um aplicativo Android usando o Frida.
|
|
|
|
## Requisitos
|
|
|
|
- Dispositivo Android com acesso root ou emulador Android com Frida Server instalado.
|
|
- Frida CLI instalado no seu computador.
|
|
|
|
## Passo a passo
|
|
|
|
1. Primeiro, certifique-se de que o aplicativo Android alvo esteja instalado no dispositivo ou no emulador.
|
|
|
|
2. Conecte o dispositivo Android ao seu computador ou inicie o emulador.
|
|
|
|
3. Abra o terminal e execute o seguinte comando para iniciar o servidor Frida:
|
|
|
|
```
|
|
frida-server
|
|
```
|
|
|
|
4. No terminal, navegue até o diretório onde o arquivo APK do aplicativo alvo está localizado.
|
|
|
|
5. Execute o seguinte comando para iniciar o aplicativo alvo com o Frida:
|
|
|
|
```
|
|
frida -U -l script.js --no-pause com.example.app
|
|
```
|
|
|
|
Certifique-se de substituir `script.js` pelo nome do seu script Frida e `com.example.app` pelo nome do pacote do aplicativo alvo.
|
|
|
|
6. Agora, o Frida está anexado ao processo do aplicativo alvo. Você pode começar a escrever seu script Frida para fazer o hook no método `.onCreate()`.
|
|
|
|
```javascript
|
|
Java.perform(function () {
|
|
var targetClass = Java.use('com.example.app.MainActivity');
|
|
|
|
targetClass.onCreate.implementation = function () {
|
|
console.log('Hooked .onCreate()');
|
|
// Seu código personalizado aqui
|
|
this.onCreate();
|
|
};
|
|
});
|
|
```
|
|
|
|
Este script substituirá a implementação original do método `.onCreate()` pela sua própria implementação personalizada. Certifique-se de adicionar seu código personalizado dentro da função `implementation`.
|
|
|
|
7. Salve o script Frida e volte para o terminal.
|
|
|
|
8. Pressione `Enter` no terminal para executar o script Frida.
|
|
|
|
9. Agora, quando o aplicativo alvo for iniciado, o método `.onCreate()` será hookado e sua implementação personalizada será executada.
|
|
|
|
Você pode verificar a saída do console no terminal para confirmar que o hook foi bem-sucedido.
|
|
|
|
## Conclusão
|
|
|
|
Frida é uma ferramenta poderosa para fazer hook em aplicativos Android e modificar seu comportamento. Neste tutorial, aprendemos como fazer o hook no método `.onCreate()` de um aplicativo Android usando o Frida. Agora você pode explorar ainda mais as capacidades do Frida para realizar testes de segurança e análise de aplicativos Android.
|
|
```javascript
|
|
var activity = Java.use("android.app.Activity");
|
|
activity.onCreate.overload("android.os.Bundle").implementation = function(var_0) {
|
|
send("Activity HIT!!!");
|
|
var ret = this.onCreate.overload("android.os.Bundle").call(this,var_0);
|
|
};
|
|
```
|
|
### Hooking de funções com parâmetros e recuperando o valor
|
|
|
|
Hooking de uma função de descriptografia. Imprimir a entrada, chamar a função original para descriptografar a entrada e, por fim, imprimir os dados em texto simples:
|
|
```javascript
|
|
function getString(data){
|
|
var ret = "";
|
|
for (var i=0; i < data.length; i++){
|
|
ret += data[i].toString();
|
|
}
|
|
return ret
|
|
}
|
|
var aes_decrypt = Java.use("sg.vantagepoint.a.a");
|
|
aes_decrypt.a.overload("[B","[B").implementation = function(var_0,var_1) {
|
|
send("sg.vantagepoint.a.a.a([B[B)[B doFinal(enc) // AES/ECB/PKCS7Padding");
|
|
send("Key : " + getString(var_0));
|
|
send("Encrypted : " + getString(var_1));
|
|
var ret = this.a.overload("[B","[B").call(this,var_0,var_1);
|
|
send("Decrypted : " + ret);
|
|
|
|
var flag = "";
|
|
for (var i=0; i < ret.length; i++){
|
|
flag += String.fromCharCode(ret[i]);
|
|
}
|
|
send("Decrypted flag: " + flag);
|
|
return ret; //[B
|
|
};
|
|
```
|
|
### Hooking de funções e chamando-as com nossa entrada
|
|
|
|
Faça o hook de uma função que recebe uma string e chame-a com outra string (de [aqui](https://11x256.github.io/Frida-hooking-android-part-2/))
|
|
```javascript
|
|
var string_class = Java.use("java.lang.String"); // get a JS wrapper for java's String class
|
|
|
|
my_class.fun.overload("java.lang.String").implementation = function(x){ //hooking the new function
|
|
var my_string = string_class.$new("My TeSt String#####"); //creating a new String by using `new` operator
|
|
console.log("Original arg: " +x );
|
|
var ret = this.fun(my_string); // calling the original function with the new String, and putting its return value in ret variable
|
|
console.log("Return value: "+ret);
|
|
return ret;
|
|
};
|
|
```
|
|
### Obtendo um objeto já criado de uma classe
|
|
|
|
Se você deseja extrair algum atributo de um objeto criado, você pode usar isso.
|
|
|
|
Neste exemplo, você verá como obter o objeto da classe my\_activity e como chamar a função .secret() que imprimirá um atributo privado do objeto:
|
|
```javascript
|
|
Java.choose("com.example.a11x256.frida_test.my_activity" , {
|
|
onMatch : function(instance){ //This function will be called for every instance found by frida
|
|
console.log("Found instance: "+instance);
|
|
console.log("Result of secret func: " + instance.secret());
|
|
},
|
|
onComplete:function(){}
|
|
});
|
|
```
|
|
<figure><img src="../../../.gitbook/assets/i3.png" alt=""><figcaption></figcaption></figure>
|
|
|
|
**Dica de recompensa por bugs**: **inscreva-se** no **Intigriti**, uma plataforma premium de **recompensa por bugs criada por hackers, para hackers**! Junte-se a nós em [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) hoje mesmo e comece a ganhar recompensas de até **$100.000**!
|
|
|
|
{% embed url="https://go.intigriti.com/hacktricks" %}
|
|
|
|
<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 cibersegurança**? Gostaria de ver sua **empresa anunciada no HackTricks**? Ou gostaria de 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>
|