Frida Tutorial 1

Aprenda hacking AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!

Outras maneiras de apoiar o HackTricks:

Dica de recompensa por bug: 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!

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 de funções de um aplicativo em execução. Mas você pode usar python para chamar os hooks e até mesmo interagir com os hooks.

Este é um script python simples 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 o Python com o Frida, mas para esses exemplos você também pode chamar diretamente o Frida usando as ferramentas de linha de comando do Frida:

frida -U --no-pause -l hookN.js -f infosecadventures.fridademo

Hook 1 - Desvio Booleano

Aqui você pode ver como hookar 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

Olhar: A função recebe uma String como parâmetro, não é necessário sobrecarregar?

Hook 2 - Função de Força Bruta

Função Não Estática

Se você deseja chamar uma função não estática de uma classe, primeiro precisa de uma instância dessa classe. Em seguida, 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() { }
});
});

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ê pode fazer um hook em uma função e fazer com que ela imprima o valor dos argumentos passados e o valor do 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ê enganchou 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 enganchar indicando o tipo dos argumentos.

Você pode ver isso no próximo tutorial.

Dica de recompensa por bugs: Inscreva-se no Intigriti, uma plataforma premium de recompensas por bugs 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!

Aprenda hacking na AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!

Outras maneiras de apoiar o HackTricks:

Last updated