18 KiB
Tutorial do Frida
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- 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!
- Descubra A Família PEASS, nossa coleção exclusiva de NFTs
- Adquira o swag oficial do PEASS & HackTricks
- Junte-se ao 💬 grupo Discord ou ao grupo telegram ou siga-me no Twitter 🐦@carlospolopm.
- Compartilhe suas técnicas de hacking enviando PRs para o repositório hacktricks e repositório hacktricks-cloud.
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 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:
pip install frida-tools
pip install frida
Baixe e instale no Android o servidor frida (Baixe a versão mais recente).
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" %}
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:
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
De: https://medium.com/infosec-adventures/introduction-to-frida-5a3f51595ca1
APK: https://github.com/t0thkr1s/frida-demo/releases
Código-fonte: https://github.com/t0thkr1s/frida-demo
Siga o link para ler.
Tutorial 2
De: 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
Siga o link para ler.
Tutorial 3
De: https://joshspicer.com/android-frida-1
APK: https://github.com/OWASP/owasp-mstg/blob/master/Crackmes/Android/Level_01/UnCrackable-Level1.apk
Siga o link para ler.
Você pode encontrar alguns scripts incríveis do Frida aqui: 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
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
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
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()
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
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()
:
-
Abra o aplicativo Android no qual você deseja fazer o hook.
-
Inicie o servidor Frida no dispositivo ou no emulador.
-
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. -
No prompt do Frida, execute o seguinte comando para listar as classes disponíveis no aplicativo:
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()
. -
Agora, vamos fazer o hook no método
exit()
. No prompt do Frida, execute o seguinte comando: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étodoexit()
. -
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.
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:
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!
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
-
Primeiro, certifique-se de que o aplicativo Android alvo esteja instalado no dispositivo ou no emulador.
-
Conecte o dispositivo Android ao seu computador ou inicie o emulador.
-
Abra o terminal e execute o seguinte comando para iniciar o servidor Frida:
frida-server
-
No terminal, navegue até o diretório onde o arquivo APK do aplicativo alvo está localizado.
-
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 ecom.example.app
pelo nome do pacote do aplicativo alvo. -
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()
.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çãoimplementation
. -
Salve o script Frida e volte para o terminal.
-
Pressione
Enter
no terminal para executar o script Frida. -
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.
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:
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)
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:
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(){}
});
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 hoje mesmo e comece a ganhar recompensas de até $100.000!
{% embed url="https://go.intigriti.com/hacktricks" %}
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- 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!
- Descubra A Família PEASS, nossa coleção exclusiva de NFTs
- Adquira o swag oficial do PEASS & HackTricks
- Junte-se ao 💬 grupo Discord ou ao grupo telegram ou siga-me no Twitter 🐦@carlospolopm.
- Compartilhe suas técnicas de hacking enviando PRs para o repositório hacktricks e repositório hacktricks-cloud.