hacktricks/mobile-pentesting/android-app-pentesting/frida-tutorial
2024-02-07 07:34:51 +00:00
..
frida-tutorial-1.md Translated ['forensics/basic-forensic-methodology/specific-software-file 2023-12-26 03:49:11 +00:00
frida-tutorial-2.md Translated ['forensics/basic-forensic-methodology/specific-software-file 2024-02-07 07:34:51 +00:00
objection-tutorial.md Translated to Hindi 2023-11-06 08:38:02 +00:00
owaspuncrackable-1.md Translated ['README.md', 'backdoors/salseo.md', 'forensics/basic-forensi 2023-12-16 15:25:38 +00:00
README.md Translated ['mobile-pentesting/android-app-pentesting/frida-tutorial/REA 2024-01-13 22:31:10 +00:00

Frida Tutorial

AWS हैकिंग सीखें शून्य से लेकर हीरो तक htARTE (HackTricks AWS Red Team Expert) के साथ!

HackTricks का समर्थन करने के अन्य तरीके:

Bug bounty tip: Intigriti के लिए साइन अप करें, एक प्रीमियम bug bounty platform जो हैकर्स द्वारा, हैकर्स के लिए बनाया गया है! आज ही हमसे जुड़ें https://go.intigriti.com/hacktricks पर, और $100,000 तक के bounties कमाना शुरू करें!

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

Installation

frida tools इंस्टॉल करें:

pip install frida-tools
pip install frida

डाउनलोड और इंस्टॉल करें एंड्रॉइड में frida server (नवीनतम रिलीज़ डाउनलोड करें)।
एक-लाइनर adb को रूट मोड में पुनः स्टार्ट करने, उससे कनेक्ट करने, frida-server अपलोड करने, एक्जीक्यूट परमिशन देने और उसे बैकग्राउंड में चलाने के लिए:

{% 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 &"

जांचें कि यह काम कर रहा है:

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

ट्यूटोरियल्स

ट्यूटोरियल 1

से: https://medium.com/infosec-adventures/introduction-to-frida-5a3f51595ca1
APK: https://github.com/t0thkr1s/frida-demo/releases
सोर्स कोड: https://github.com/t0thkr1s/frida-demo

लिंक पर जाकर पढ़ें.

ट्यूटोरियल 2

से: https://11x256.github.io/Frida-hooking-android-part-2/ (भाग 2, 3 & 4)
APKs और सोर्स कोड: https://github.com/11x256/frida-android-examples

लिंक पर जाकर पढ़ें.

ट्यूटोरियल 3

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

लिंक पर जाकर पढ़ें.
आप यहाँ कुछ शानदार Frida स्क्रिप्ट्स पा सकते हैं: https://codeshare.frida.re/

त्वरित उदाहरण

यहाँ आप Frida के अधिक मूलभूत और रोचक कार्यक्षमताओं को जल्दी स्क्रिप्ट बनाने के लिए पा सकते हैं:

कमांड लाइन से Frida को कॉल करना

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.

बेसिक पायथन स्क्रिप्ट

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()

बिना पैरामीटर्स के फंक्शन्स को हुक करना

क्लास sg.vantagepoint.a.c के फंक्शन a() को हुक करें

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

Hook java exit() को हिंदी में अनुवाद करने की आवश्यकता नहीं है क्योंकि यह एक कोडिंग फंक्शन का नाम है और इसे अनुवादित नहीं किया जाता।

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

MainActivity के .onStart() और .onCreate() को हुक करें

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

.onCreate() को हुक करें

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

पैरामीटर्स के साथ फंक्शन्स को हुक करना और मान प्राप्त करना

एक डिक्रिप्शन फंक्शन को हुक करना। इनपुट को प्रिंट करें, मूल फंक्शन को कॉल करें इनपुट को डिक्रिप्ट करें और अंत में, प्लेन डेटा को प्रिंट करें:

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

फंक्शन्स को हुक करना और उन्हें हमारे इनपुट के साथ कॉल करना

एक फंक्शन को हुक करें जो एक स्ट्रिंग प्राप्त करता है और उसे दूसरे स्ट्रिंग के साथ कॉल करें (यहाँ से here)

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

किसी क्लास की पहले से बनी हुई ऑब्जेक्ट प्राप्त करना

यदि आप किसी बनी हुई ऑब्जेक्ट के किसी एट्रिब्यूट को निकालना चाहते हैं, तो आप इसका उपयोग कर सकते हैं।

इस उदाहरण में आप देखेंगे कि कैसे my_activity क्लास की ऑब्जेक्ट प्राप्त करना है और कैसे .secret() फंक्शन को कॉल करना है जो ऑब्जेक्ट के एक प्राइवेट एट्रिब्यूट को प्रिंट करेगा:

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

अन्य Frida ट्यूटोरियल्स

Bug bounty tip: Intigriti के लिए साइन अप करें, एक प्रीमियम bug bounty प्लेटफॉर्म जो हैकर्स द्वारा, हैकर्स के लिए बनाया गया है! हमसे जुड़ें https://go.intigriti.com/hacktricks आज ही, और शुरू करें bounties कमाना जो हो सकती हैं $100,000 तक!

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

AWS hacking सीखें शुरुआत से लेकर एक्सपर्ट तक htARTE (HackTricks AWS Red Team Expert) के साथ!

HackTricks का समर्थन करने के अन्य तरीके: