hacktricks/mobile-pentesting/android-app-pentesting/frida-tutorial
2024-04-07 04:23:52 +00:00
..
frida-tutorial-1.md Translated ['forensics/basic-forensic-methodology/specific-software-file 2024-02-18 14:58:46 +00:00
frida-tutorial-2.md Translated ['forensics/basic-forensic-methodology/specific-software-file 2024-02-18 14:58:46 +00:00
objection-tutorial.md Translated ['README.md', 'binary-exploitation/arbitrary-write-2-exec/REA 2024-04-07 04:23:52 +00:00
owaspuncrackable-1.md Translated ['forensics/basic-forensic-methodology/specific-software-file 2024-02-18 14:58:46 +00:00
README.md Translated to Serbian 2024-02-10 13:11:20 +00:00

Frida Tutorijal

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini podrške HackTricks-u:

Bug bounty savet: registrujte se za Intigriti, premium platformu za bug bounty kreiranu od strane hakera, za hakere! Pridružite nam se na https://go.intigriti.com/hacktricks danas i počnite da zarađujete nagrade do $100,000!

{% embed url="https://go.intigriti.com/hacktricks" %}

Instalacija

Instalirajte frida alate:

pip install frida-tools
pip install frida

Preuzmite i instalirajte na Android uređaju Frida server (Preuzmite najnovije izdanje).
Jednolinijska komanda za ponovno pokretanje adb u root režimu, povezivanje s njim, otpremanje frida-servera, davanje izvršnih dozvola i pokretanje u pozadini:

{% 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 %}

Proverite da li radi:

frida-ps -U #List packages and processes
frida-ps -U | grep -i <part_of_the_package_name> #Get all the package name

Tutorijali

Tutorijal 1

Od: https://medium.com/infosec-adventures/introduction-to-frida-5a3f51595ca1
APK: https://github.com/t0thkr1s/frida-demo/releases
Izvorni kod: https://github.com/t0thkr1s/frida-demo

Pratite link za čitanje.

Tutorijal 2

Od: https://11x256.github.io/Frida-hooking-android-part-2/ (Delovi 2, 3 i 4)
APK-ovi i Izvorni kod: https://github.com/11x256/frida-android-examples

Pratite link za čitanje.

Tutorijal 3

Od: https://joshspicer.com/android-frida-1
APK: https://github.com/OWASP/owasp-mstg/blob/master/Crackmes/Android/Level_01/UnCrackable-Level1.apk

Pratite link za čitanje.

Više impresivnih Frida skripti možete pronaći ovde: https://codeshare.frida.re/

Brzi primeri

Pozivanje Frida iz komandne linije

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.

Osnovni Python skript

import frida

# Connect to the USB device
device = frida.get_usb_device()

# Attach to the target process
pid = device.spawn(["com.example.app"])
session = device.attach(pid)

# Load the JavaScript code
with open("script.js", "r") as file:
    script_code = file.read()

# Create the script
script = session.create_script(script_code)

# Load the script into the target process
script.load()

# Resume the target process
device.resume(pid)

# Keep the script running
input()

Osnovni Python skript

import frida

# Povezivanje sa USB uređajem
device = frida.get_usb_device()

# Povezivanje sa ciljnim procesom
pid = device.spawn(["com.example.app"])
session = device.attach(pid)

# Učitavanje JavaScript koda
with open("script.js", "r") as file:
    script_code = file.read()

# Kreiranje skripte
script = session.create_script(script_code)

# Učitavanje skripte u ciljni proces
script.load()

# Nastavak rada ciljnog procesa
device.resume(pid)

# Održavanje rada skripte
input()
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()

Hakovanje funkcija bez parametara

Hakujte funkciju a() klase 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;
};
});

Frida Tutorial: Hook java exit()

U ovom tutorijalu ćemo naučiti kako da hakujemo exit() funkciju u Java jeziku koristeći Frida alat.

Šta je Frida?

Frida je open-source alat koji omogućava dinamičko hakovanje mobilnih aplikacija, desktop aplikacija i operativnih sistema. On pruža mogućnost da se izvršava custom JavaScript kod unutar ciljane aplikacije, omogućavajući tako manipulaciju njenim ponašanjem.

Instalacija Frida

Da biste instalirali Frida, pratite sledeće korake:

  1. Instalirajte Frida CLI (Command Line Interface) koristeći sledeću komandu:

    $ pip install frida-tools
    
  2. Instalirajte Frida server na uređaju na kojem želite da hakujete aplikaciju. Možete preuzeti Frida server sa zvanične Frida GitHub stranice.

Hakovanje exit() funkcije

Da biste hakovali exit() funkciju u Java jeziku, pratite sledeće korake:

  1. Pokrenite Frida server na uređaju na kojem se nalazi ciljana aplikacija.

  2. Napravite novi fajl sa nazivom hook.js i unesite sledeći kod:

    Java.perform(function() {
        var System = Java.use('java.lang.System');
        var Runtime = Java.use('java.lang.Runtime');
    
        // Hookujemo exit() funkciju
        System.exit.implementation = function() {
            console.log('exit() funkcija je pozvana');
            // Dodajte svoj custom kod ovde
    
            // Pozivamo originalnu implementaciju exit() funkcije
            this.exit();
        };
    });
    
  3. Pokrenite Frida CLI koristeći sledeću komandu:

    $ frida -U -l hook.js --no-pause -f <ime_aplikacije>
    

    Gde <ime_aplikacije> predstavlja ime ciljane aplikacije.

  4. Frida će se povezati sa ciljanom aplikacijom i izvršiti kod iz hook.js fajla. Kada se exit() funkcija pozove, Frida će ispisati poruku u konzoli.

  5. Dodajte svoj custom kod unutar exit() funkcije kako biste manipulisali ponašanjem aplikacije.

Zaključak

Korišćenjem Frida alata, možete lako hakovati exit() funkciju u Java jeziku i manipulisati ponašanjem ciljane aplikacije. Ovaj tutorijal je samo uvod u Frida i njegove mogućnosti.

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  :)");
};

Frida Tutorial: Hookovanje .onStart() i .onCreate() metoda u MainActivity

U ovom tutorijalu ćemo naučiti kako da koristimo Frida alat za hookovanje .onStart() i .onCreate() metoda u MainActivity klasi Android aplikacije.

Šta je Frida?

Frida je open-source alat koji omogućava dinamičko hookovanje funkcija u realnom vremenu. To znači da možemo promeniti ponašanje aplikacije tokom izvršavanja, bez potrebe za rekomplajliranjem ili ponovnim pokretanjem aplikacije.

Priprema

Da bismo mogli da hookujemo metode u Android aplikaciji, prvo moramo instalirati Frida na našem uređaju. Možemo to uraditi pomoću sledeće komande:

$ pip install frida-tools

Takođe, potrebno je da imamo Android uređaj sa root pristupom ili emulator sa x86 arhitekturom.

Hookovanje .onStart() metoda

Da bismo hookovali .onStart() metod u MainActivity klasi, prvo moramo pronaći tačnu putanju do klase i metoda koje želimo da hookujemo. Možemo koristiti sledeći Frida skript:

Java.perform(function() {
    var MainActivity = Java.use('com.example.app.MainActivity');
    MainActivity.onStart.implementation = function() {
        console.log('Metod onStart() je hookovan!');
        this.onStart();
    };
});

Hookovanje .onCreate() metoda

Da bismo hookovali .onCreate() metod u MainActivity klasi, možemo koristiti sličan Frida skript kao i za .onStart() metod:

Java.perform(function() {
    var MainActivity = Java.use('com.example.app.MainActivity');
    MainActivity.onCreate.implementation = function() {
        console.log('Metod onCreate() je hookovan!');
        this.onCreate();
    };
});

Pokretanje Frida skripta

Da bismo pokrenuli Frida skript, prvo moramo povezati Frida server sa našim uređajem. To možemo uraditi pomoću sledeće komande:

$ adb forward tcp:27042 tcp:27042

Zatim, možemo pokrenuti Frida skript koristeći sledeću komandu:

$ frida -U -f com.example.app -l script.js --no-pause

Gde com.example.app predstavlja ime paketa naše Android aplikacije, a script.js predstavlja ime Frida skripta koji smo napravili.

Zaključak

Korišćenje Frida alata za hookovanje .onStart() i .onCreate() metoda u MainActivity klasi Android aplikacije može biti veoma korisno za analizu i testiranje aplikacija. Frida nam omogućava da promenimo ponašanje aplikacije tokom izvršavanja, što nam daje veću kontrolu i mogućnost da otkrijemo potencijalne ranjivosti ili propuste u bezbednosti aplikacije.

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);
};

Frida Tutorial: Hook android .onCreate()

U ovom tutorijalu ćemo naučiti kako da koristimo Frida framework za hakovanje metode .onCreate() u Android aplikacijama.

Šta je Frida?

Frida je open-source framework koji omogućava dinamičko hakovanje mobilnih aplikacija, desktop aplikacija i cloud/SaaS platformi. Koristi se za analizu, testiranje bezbednosti i reverse engineering.

Priprema

Da biste pratili ovaj tutorijal, potrebno je da imate instaliranu Frida biblioteku na svom uređaju. Možete je instalirati pomoću pip komande:

pip install frida-tools

Takođe, potrebno je da imate Android uređaj ili emulator na kojem ćete testirati hakovanje.

Korak 1: Pokretanje aplikacije

Prvo, pokrenite ciljanu Android aplikaciju na svom uređaju ili emulatoru.

Korak 2: Povezivanje sa aplikacijom

Koristite frida-ps komandu da biste pronašli ID procesa aplikacije koju želite da hakujete:

frida-ps -U

Zatim, povežite se sa aplikacijom koristeći frida -U -l <script.js> <package_name> komandu:

frida -U -l script.js com.example.app

Korak 3: Hakovanje .onCreate() metode

U script.js fajlu, dodajte sledeći kod:

Java.perform(function() {
    var targetClass = Java.use('com.example.app.MainActivity');
    targetClass.onCreate.implementation = function() {
        console.log('Metoda .onCreate() je hakovana!');
        this.onCreate();
    };
});

Ovaj kod koristi Frida API da bi pronašao klasu MainActivity u ciljanoj aplikaciji i zamenio implementaciju metode .onCreate(). Kada se metoda pozove, ispisuje se poruka u konzoli i zatim se poziva originalna implementacija metode.

Korak 4: Pokretanje hakovanja

Pokrenite hakovanje koristeći frida -U -l script.js com.example.app komandu:

frida -U -l script.js com.example.app

Sada, kada pokrenete ciljanu aplikaciju, videćete poruku "Metoda .onCreate() je hakovana!" u konzoli.

Zaključak

U ovom tutorijalu smo naučili kako da koristimo Frida framework za hakovanje metode .onCreate() u Android aplikacijama. Frida pruža moćne mogućnosti za dinamičko hakovanje i analizu aplikacija, što je od velike koristi pri testiranju bezbednosti i reverse engineeringu.

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);
};

Hakovanje funkcija sa parametrima i dobijanje vrednosti

Hakovanje funkcije za dešifrovanje. Ispisivanje ulaza, pozivanje originalne funkcije za dešifrovanje ulaza i na kraju, ispisivanje čistih podataka:

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
};

Hakovanje funkcija i pozivanje istih sa našim unosom

Hakujte funkciju koja prima string i pozovite je sa drugim stringom (sa ovde).

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;
};

Dobijanje već kreiranog objekta klase

Ako želite da izvučete neki atribut već kreiranog objekta, možete koristiti ovo.

U ovom primeru ćete videti kako da dobijete objekat klase my_activity i kako da pozovete funkciju .secret() koja će ispisati privatni atribut objekta:

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(){}
});

Ostali Frida tutorijali

Savet za bug bounty: prijavite se za Intigriti, premium platformu za bug bounty kreiranu od strane hakera, za hakere! Pridružite nam se na https://go.intigriti.com/hacktricks danas i počnite da zarađujete nagrade do $100,000!

{% embed url="https://go.intigriti.com/hacktricks" %}

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini da podržite HackTricks: