18 KiB
Frida Tutoriaal
Leer AWS-hacking van nul tot held met htARTE (HackTricks AWS Red Team Expert)!
Ander maniere om HackTricks te ondersteun:
- As jy jou maatskappy geadverteer wil sien in HackTricks of HackTricks in PDF wil aflaai, kyk na die SUBSCRIPTION PLANS!
- Kry die amptelike PEASS & HackTricks swag
- Ontdek The PEASS Family, ons versameling eksklusiewe NFTs
- Sluit aan by die 💬 Discord-groep of die telegram-groep of volg ons op Twitter 🐦 @carlospolopm.
- Deel jou hacktruuks deur PR's in te dien by die HackTricks en HackTricks Cloud github-repos.
Bug bounty wenk: teken aan vir Intigriti, 'n premium bug bounty platform geskep deur hackers, vir hackers! Sluit vandag by ons aan by https://go.intigriti.com/hacktricks, en begin om belonings tot $100,000 te verdien!
{% embed url="https://go.intigriti.com/hacktricks" %}
Installasie
Installeer frida-gereedskap:
pip install frida-tools
pip install frida
Laai af en installeer die frida-bediener in die Android-toestel (Laai die nuutste vrystelling af).
Eenreël om adb in root-modus te herlaai, daarmee te verbind, frida-server op te laai, uitvoeringsregte te gee en dit agtergrond te laat loop:
{% 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 %}
Kyk of dit werk:
frida-ps -U #List packages and processes
frida-ps -U | grep -i <part_of_the_package_name> #Get all the package name
Tutoriale
Tutoriaal 1
Vanaf: https://medium.com/infosec-adventures/introduction-to-frida-5a3f51595ca1
APK: https://github.com/t0thkr1s/frida-demo/releases
Bronkode: https://github.com/t0thkr1s/frida-demo
Volg die skakel om dit te lees.
Tutoriaal 2
Vanaf: https://11x256.github.io/Frida-hooking-android-part-2/ (Dele 2, 3 & 4)
APK's en Bronkode: https://github.com/11x256/frida-android-examples
Volg die skakel om dit te lees.
Tutoriaal 3
Vanaf: https://joshspicer.com/android-frida-1
APK: https://github.com/OWASP/owasp-mstg/blob/master/Crackmes/Android/Level_01/UnCrackable-Level1.apk
Volg die skakel om dit te lees.
Jy kan meer Awesome Frida-skripte hier vind: https://codeshare.frida.re/
Vinnige Voorbeelde
Frida vanaf die opdraglyn aanroep
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.
Basiese Python-skrips
import frida
# Device
device = frida.get_usb_device()
# Application
application = device.get_frontmost_application()
pid = application.pid
# Session
session = device.attach(pid)
# Script
script = session.create_script("""
console.log('Hello, world!');
""")
# Load script
script.load()
# Detach session
session.detach()
Hierdie is 'n basiese Python-skrips wat gebruik kan word met die Frida-raamwerk vir Android-app-pentesting.
Die skrips maak gebruik van die frida
-biblioteek om met die toestel te kommunikeer en die toepassing te ondersoek.
Die skrips begin deur die toestel te kry wat aan die rekenaar gekoppel is deur die frida.get_usb_device()
-funksie te gebruik.
Dan word die voorste toepassing op die toestel gekry deur die device.get_frontmost_application()
-funksie te gebruik. Die proses-ID (pid) van die toepassing word ook verkry.
'n Sessie word geheg aan die toepassing deur die device.attach(pid)
-funksie te gebruik.
'n Skrips word geskep deur die session.create_script()
-funksie te gebruik. Die skrips bevat 'n eenvoudige drukopdrag wat die boodskap "Hello, world!" na die konsole stuur.
Die skrips word gelaai deur die script.load()
-funksie te gebruik.
Uiteindelik word die sessie losgemaak deur die session.detach()
-funksie te gebruik.
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()
Hooking funksies sonder parameters
Haak die funksie a()
van die klas 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 - Handleiding
Hier is een korte handleiding over het gebruik van Frida om de exit()
-methode in Java te hooken.
Stap 1: Installatie
Installeer Frida op uw apparaat. U kunt de Frida-instructies volgen op de officiële website van Frida.
Stap 2: Voorbereiding
Zorg ervoor dat u de benodigde bestanden en hulpmiddelen heeft:
- De APK van de app die u wilt pentesten.
- Een Android-apparaat of emulator.
- Een teksteditor om het Frida-script te maken.
Stap 3: Frida-script maken
Maak een nieuw bestand met de extensie .js
en voeg de volgende code toe:
Java.perform(function() {
var System = Java.use('java.lang.System');
System.exit.implementation = function() {
console.log('exit() is called');
};
});
Stap 4: Frida-script uitvoeren
Voer het Frida-script uit met behulp van de volgende opdracht:
frida -U -l script.js -f <app_package_name>
Vervang <app_package_name>
door de naam van het pakket van de app die u wilt pentesten.
Stap 5: Testen
Start de app op uw apparaat of emulator en voer de actie uit die de exit()
-methode aanroept. U zou een bericht moeten zien in de console waarin staat dat exit()
wordt aangeroepen.
Conclusie
Met behulp van Frida kunt u de exit()
-methode in Java hooken en controleren wanneer deze wordt aangeroepen. Dit kan handig zijn bij het pentesten van Android-apps om verdachte of ongewenste gedragingen te identificeren.
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: Hook MainActivity .onStart()
& .onCreate()
In hierdie tutoriaal sal ons leer hoe om die .onStart()
en .onCreate()
metodes van die MainActivity
klas in 'n Android-toepassing te hak.
Stap 1: Verstaan die doel
Die .onStart()
en .onCreate()
metodes word opgeroep wanneer 'n aktiwiteit in Android begin en geskep word. Deur hierdie metodes te hak, kan ons die uitvoering van die toepassing beïnvloed en insette of uitsette manipuleer.
Stap 2: Installeer Frida
Om te begin, moet ons Frida op ons toestel installeer. Volg die instruksies in die Frida-dokumentasie om dit te doen.
Stap 3: Skryf die skripsie
Ons sal 'n eenvoudige Frida-skripsie skryf om die .onStart()
en .onCreate()
metodes te hak. Hier is die skripsie:
Java.perform(function () {
var MainActivity = Java.use('com.example.MainActivity');
MainActivity.onStart.implementation = function () {
console.log('MainActivity.onStart() gehak!');
this.onStart();
};
MainActivity.onCreate.implementation = function (savedInstanceState) {
console.log('MainActivity.onCreate() gehak!');
this.onCreate(savedInstanceState);
};
});
Stap 4: Voer die skripsie uit
Om die skripsie uit te voer, moet ons Frida gebruik om dit aan die toepassing te heg. Voer die volgende opdrag in die opdraglyn in:
frida -U -l <pad_na_skripsie.js> -f <pakket_naam>
Vervang <pad_na_skripsie.js>
met die pad na jou skripsie-lêer en <pakket_naam>
met die naam van die toepassing se pakkie.
Stap 5: Monitor die uitset
Nou kan ons die toepassing uitvoer en die uitset monitor om te sien of die .onStart()
en .onCreate()
metodes gehak word. As alles reg verloop, sal ons die gehakte boodskappe in die uitset sien.
Stap 6: Manipuleer die toepassing
Met die .onStart()
en .onCreate()
metodes gehak, kan ons nou die toepassing manipuleer deur insette te verander of uitsette te onderskep. Hierdie tegniek kan gebruik word om sekuriteitslekke te identifiseer en te misbruik.
Stap 7: Opruiming
As jy klaar is met die hak van die toepassing, kan jy die Frida-skripsie verwyder en die oorspronklike toestand van die toepassing herstel.
Slotwoord
Met behulp van Frida kan ons die .onStart()
en .onCreate()
metodes van die MainActivity
klas in 'n Android-toepassing hak. Hierdie tegniek stel ons in staat om die toepassing te manipuleer en sekuriteitslekke te identifiseer. Onthou egter dat die gebruik van hierdie tegniek slegs toegelaat word in wettige en etiese pentesting-scenarios.
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()
In hierdie tutoriaal sal ons leer hoe om die .onCreate()
-metode in 'n Android-toepassing te hook met behulp van Frida. Hierdie metode word aangeroep wanneer 'n aktiwiteit in die toepassing geskep word.
Vereistes
Om hierdie tutoriaal te volg, moet jy die volgende hê:
- 'n Android-toestel of 'n virtuele masjien met 'n geïnstalleerde Android-emulator.
- Die Frida-framework geïnstalleer op jou toestel of emulator.
Stap 1: Verbind met die toestel
Verbind met jou toestel of emulator deur die volgende opdrag in die opdraglyn uit te voer:
frida-ps -U
Hierdie opdrag sal 'n lys van aktiewe prosesse op die toestel vertoon.
Stap 2: Kies die toepassing
Kies die toepassing waarin jy die .onCreate()
-metode wil hook deur die volgende opdrag uit te voer:
frida-ps -Uai
Hierdie opdrag sal 'n lys van alle toepassings op die toestel vertoon, saam met hul proses-ID's.
Stap 3: Skryf die hook-skripsie
Skep 'n nuwe tekslêer en skryf die volgende skripsie:
Java.perform(function() {
var Activity = Java.use('android.app.Activity');
Activity.onCreate.implementation = function(savedInstanceState) {
console.log('onCreate() is gehook!');
this.onCreate(savedInstanceState);
};
});
Hierdie skripsie gebruik die Java.perform()
-funksie om toegang tot die Java-omgewing te verkry. Dit gebruik dan die Java.use()
-funksie om die Activity
-klas te kry en die .onCreate()
-metode te hook. Die gehookte metode skryf eenvoudig 'onCreate() is gehook!' na die konsole en roep dan die oorspronklike metode aan.
Stap 4: Voer die skripsie uit
Voer die volgende opdrag in die opdraglyn uit om die skripsie uit te voer:
frida -U -l <pad_na_skripsie> -f <pakket_naam>
Vervang <pad_na_skripsie>
met die pad na die skripsie-lêer wat jy in stap 3 geskep het, en <pakket_naam>
met die naam van die toepassing wat jy in stap 2 gekies het.
Stap 5: Toets die hook
Voer die toepassing uit op jou toestel of emulator en kyk na die konsole-uitset. As alles korrek gehook is, moet jy die boodskap 'onCreate() is gehook!' sien.
Dit is hoe jy die .onCreate()
-metode in 'n Android-toepassing kan hook met behulp van Frida. Hierdie tegniek kan gebruik word om die uitvoering van die metode te monitor of te verander vir pentesting-doeleindes.
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);
};
Haak funksies met parameters en haal die waarde terug
Haak 'n dekripsie-funksie. Druk die inset uit, roep die oorspronklike funksie aan om die inset te dekripteer en druk uiteindelik die ongekripteerde data af:
Java.perform(function() {
var className = "com.example.app.Encryption";
var decryptFunction = "decrypt";
var Encryption = Java.use(className);
Encryption[decryptFunction].overload('java.lang.String').implementation = function(input) {
console.log("Input: " + input);
var result = this[decryptFunction](input);
console.log("Plain data: " + result);
return result;
};
});
Hierdie kode haak die decrypt
-funksie in die com.example.app.Encryption
-klas. Dit druk die insetwaarde af, roep die oorspronklike decrypt
-funksie aan om die inset te dekripteer en druk die ongekripteerde data af.
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
};
Hooking funksies en om hulle te roep met ons insette
Haak 'n funksie wat 'n string ontvang en roep dit met 'n ander string (van hier)
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;
};
Kry 'n reeds geskep objek van 'n klas
As jy 'n eienskap van 'n geskep objek wil onttrek, kan jy dit gebruik.
In hierdie voorbeeld sal jy sien hoe om die objek van die klas my_activity te kry en hoe om die funksie .secret() aan te roep wat 'n private eienskap van die objek sal druk:
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(){}
});
Ander Frida-tutoriale
- https://github.com/DERE-ad2001/Frida-Labs
- Deel 1 van die Gevorderde Frida Gebruik blogreeks: IOS Versleutelingsbiblioteke
Bug bounty wenk: teken aan vir Intigriti, 'n premium bug bounty platform geskep deur hackers, vir hackers! Sluit vandag by ons aan by https://go.intigriti.com/hacktricks, en begin om belonings tot $100,000 te verdien!
{% embed url="https://go.intigriti.com/hacktricks" %}
Leer AWS-hacking van nul tot held met htARTE (HackTricks AWS Red Team Expert)!
Ander maniere om HackTricks te ondersteun:
- As jy jou maatskappy geadverteer wil sien in HackTricks of HackTricks in PDF wil aflaai, kyk na die SUBSCRIPTION PLANS!
- Kry die amptelike PEASS & HackTricks swag
- Ontdek The PEASS Family, ons versameling eksklusiewe NFTs
- Sluit aan by die 💬 Discord-groep of die telegram-groep of volg ons op Twitter 🐦 @carlospolopm.
- Deel jou hacktruuks deur PR's in te dien by die HackTricks en HackTricks Cloud github repos.