7.1 KiB
Frida Tutorial 1
{% hint style="success" %}
Aprenda e pratique AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique GCP Hacking: 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.
Dica de bug bounty: inscreva-se no Intigriti, uma plataforma de bug bounty premium criada por hackers, para hackers! Junte-se a nós em https://go.intigriti.com/hacktricks hoje e comece a ganhar recompensas de até $100,000!
{% embed url="https://go.intigriti.com/hacktricks" %}
Este é um resumo do post: 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
Python
Frida permite que você insira código JavaScript dentro das funções de um aplicativo em execução. Mas você pode usar python para chamar os hooks e até mesmo para interagir com os hooks.
Este é um script python fácil que você pode usar com todos os exemplos propostos neste tutorial:
#hooking.py
import frida, sys
with open(sys.argv[1], 'r') as f:
jscode = f.read()
process = frida.get_usb_device().attach('infosecadventures.fridademo')
script = process.create_script(jscode)
print('[ * ] Running Frida Demo application')
script.load()
sys.stdin.read()
Chame o script:
python hooking.py <hookN.js>
É útil saber como usar python com frida, mas para estes exemplos você também pode chamar diretamente o Frida usando as ferramentas de linha de comando frida:
frida -U --no-pause -l hookN.js -f infosecadventures.fridademo
Hook 1 - Bypass Boolean
Aqui você pode ver como hook um método booleano (checkPin) da classe: infosecadventures.fridademo.utils.PinUtil
//hook1.js
Java.perform(function() {
console.log("[ * ] Starting implementation override...")
var MainActivity = Java.use("infosecadventures.fridademo.utils.PinUtil");
MainActivity.checkPin.implementation = function(pin){
console.log("[ + ] PIN check successfully bypassed!")
return true;
}
});
python hooking.py hook1.js
Mirar: A função recebe como parâmetro um String, não é necessário sobrecarregar?
Hook 2 - Força Bruta de Função
Função Não Estática
Se você quiser chamar uma função não estática de uma classe, você primeiro precisa de uma instância dessa classe. Então, você pode usar essa instância para chamar a função.
Para fazer isso, você poderia encontrar uma instância existente e usá-la:
Java.perform(function() {
console.log("[ * ] Starting PIN Brute-force, please wait...");
Java.choose("infosecadventures.fridademo.utils.PinUtil", {
onMatch: function(instance) {
console.log("[ * ] Instance found in memory: " + instance);
for(var i = 1000; i < 9999; i++){
if(instance.checkPin(i + "") == true){
console.log("[ + ] Found correct PIN: " + i);
break;
}
}
},
onComplete: function() { }
});
});
Neste caso, isso não está funcionando, pois não há nenhuma instância e a função é estática.
Função Estática
Se a função for estática, você pode simplesmente chamá-la:
//hook2.js
Java.perform(function () {
console.log("[ * ] Starting PIN Brute-force, please wait...")
var PinUtil = Java.use("infosecadventures.fridademo.utils.PinUtil");
for(var i=1000; i < 9999; i++)
{
if(PinUtil.checkPin(i+"") == true){
console.log("[ + ] Found correct PIN: " + i);
}
}
});
Hook 3 - Recuperando argumentos e valor de retorno
Você poderia hook uma função e fazer com que ela imprimisse o valor dos argumentos passados e o valor do valor de retorno:
//hook3.js
Java.perform(function() {
console.log("[ * ] Starting implementation override...")
var EncryptionUtil = Java.use("infosecadventures.fridademo.utils.EncryptionUtil");
EncryptionUtil.encrypt.implementation = function(key, value){
console.log("Key: " + key);
console.log("Value: " + value);
var encrypted_ret = this.encrypt(key, value); //Call the original function
console.log("Encrypted value: " + encrypted_ret);
return encrypted_ret;
}
});
Importante
Neste tutorial, você conectou métodos usando o nome do método e .implementation. Mas se houver mais de um método com o mesmo nome, você precisará especificar o método que deseja conectar indicando o tipo dos argumentos.
Você pode ver isso em o próximo tutorial.
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 e comece a ganhar recompensas de até $100.000!
{% embed url="https://go.intigriti.com/hacktricks" %}
{% hint style="success" %}
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 os repositórios do HackTricks e HackTricks Cloud.