hacktricks/mobile-pentesting/android-app-pentesting/frida-tutorial/frida-tutorial-1.md

7 KiB

Tutorial Frida 1

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

Outras maneiras de apoiar o HackTricks:

Se você está interessado em carreira de hacking e hackear o inquebrável - estamos contratando! (fluência em polonês escrita e falada necessária).

{% embed url="https://www.stmcyber.com/careers" %}

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 de 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 - Bruteforce de Função

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ê 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 no próximo tutorial.

Se você está interessado em uma carreira de hacking e hackear o inquebrável - estamos contratando! (fluência em polonês escrita e falada necessária).

{% embed url="https://www.stmcyber.com/careers" %}

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

Outras maneiras de apoiar o HackTricks: