# Frida Tutorial 1 {{#include ../../../banners/hacktricks-training.md}}
**Tip dotyczący bug bounty**: **zarejestruj się** w **Intigriti**, premium **platformie bug bounty stworzonej przez hackerów, dla hackerów**! Dołącz do nas na [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) już dziś i zacznij zarabiać nagrody do **100 000 $**! {% embed url="https://go.intigriti.com/hacktricks" %} **To jest podsumowanie posta**: [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)\ **Kod źródłowy**: [https://github.com/t0thkr1s/frida-demo](https://github.com/t0thkr1s/frida-demo) ## Python Frida pozwala na **wstawienie kodu JavaScript** wewnątrz funkcji działającej aplikacji. Możesz jednak użyć **python** do **wywoływania** hooków, a nawet do **interakcji** z **hookami**. To jest prosty skrypt w pythonie, który możesz użyć we wszystkich proponowanych przykładach w tym tutorialu: ```python #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() ``` Wywołaj skrypt: ```bash python hooking.py ``` Przydatne jest, aby wiedzieć, jak używać Pythona z Frida, ale w tych przykładach możesz również bezpośrednio wywołać Frida, używając narzędzi wiersza poleceń frida: ```bash frida -U --no-pause -l hookN.js -f infosecadventures.fridademo ``` ## Hook 1 - Boolean Bypass Tutaj możesz zobaczyć, jak **hook**ować metodę **boolean** (_checkPin_) z klasy: _infosecadventures.fridademo.utils.PinUtil_ ```javascript //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 ``` Patrz: Funkcja przyjmuje jako parametr String, czy nie trzeba przeciążać? ## Hook 2 - Bruteforce funkcji ### Funkcja niena statyczna Jeśli chcesz wywołać niena statyczną funkcję klasy, **najpierw potrzebujesz instancji** tej klasy. Następnie możesz użyć tej instancji, aby wywołać funkcję.\ Aby to zrobić, możesz **znaleźć istniejącą instancję** i użyć jej: ```javascript 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 () {}, }) }) ``` W tym przypadku to nie działa, ponieważ nie ma żadnej instancji, a funkcja jest statyczna. ### Funkcja statyczna Jeśli funkcja jest statyczna, możesz po prostu ją wywołać: ```javascript //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 - Pobieranie argumentów i wartości zwracanej Możesz podpiąć funkcję i sprawić, aby **drukowała** wartość **przekazanych argumentów** oraz wartość **wartości zwracanej:** ```javascript //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 } }) ``` ## Ważne W tym samouczku podłączyłeś metody używając nazwy metody i _.implementation_. Ale jeśli było **więcej niż jedna metoda** o tej samej nazwie, będziesz musiał **określić metodę**, którą chcesz podłączyć, **wskazując typ argumentów**. Możesz to zobaczyć w [następnym samouczku](frida-tutorial-2.md).
**Wskazówka dotycząca bug bounty**: **zarejestruj się** w **Intigriti**, premium **platformie bug bounty stworzonej przez hakerów, dla hakerów**! Dołącz do nas na [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) już dziś i zacznij zarabiać nagrody do **100 000 $**! {% embed url="https://go.intigriti.com/hacktricks" %} {{#include ../../../banners/hacktricks-training.md}}