hacktricks/mobile-pentesting/android-app-pentesting/frida-tutorial
2024-04-07 05:33:57 +00:00
..
frida-tutorial-1.md Translated ['forensics/basic-forensic-methodology/specific-software-file 2024-02-18 14:51:58 +00:00
frida-tutorial-2.md Translated ['forensics/basic-forensic-methodology/specific-software-file 2024-02-18 14:51:58 +00:00
objection-tutorial.md Translated ['README.md', 'binary-exploitation/arbitrary-write-2-exec/REA 2024-04-07 05:33:57 +00:00
owaspuncrackable-1.md Translated ['forensics/basic-forensic-methodology/specific-software-file 2024-02-18 14:51:58 +00:00
README.md Translated to Afrikaans 2024-02-11 02:07:06 +00:00

Frida Tutoriaal

Leer AWS-hacking van nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun:

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

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: