Frida Tutorial 2

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

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

यह पोस्ट का सारांश है: https://11x256.github.io/Frida-hooking-android-part-2/ (भाग 2, 3 और 4) APKs और स्रोत कोड: https://github.com/11x256/frida-android-examples

भाग 1 इतना आसान है।

मूल कोड के कुछ हिस्से काम नहीं करते थे और यहाँ संशोधित किए गए हैं।

भाग 2

यहाँ आप एक उदाहरण देख सकते हैं कि कैसे एक ही नाम के 2 फ़ंक्शन को हुक करें लेकिन विभिन्न पैरामीटर हो। इसके अलावा, आप सीखेंगे कि अपने खुद के पैरामीटर के साथ एक फ़ंक्शन को कॉल कैसे करें। और अंत में, एक उदाहरण है कि किसी क्लास के एक उदाहरण को खोजना और उसे एक फ़ंक्शन को कॉल करने के लिए कैसे बनाएं

//s2.js
console.log("Script loaded successfully ");
Java.perform(function x() {
console.log("Inside java perform function");
var my_class = Java.use("com.example.a11x256.frida_test.my_activity");
//Hook "fun" with parameters (int, int)
my_class.fun.overload("int", "int").implementation = function (x, y) { //hooking the old function
console.log("original call: fun(" + x + ", " + y + ")");
var ret_value = this.fun(2, 5);
return ret_value;
};
//Hook "fun" with paramater(String)
var string_class = Java.use("java.lang.String");
my_class.fun.overload("java.lang.String").implementation = function (x) { //hooking the new function
console.log("*")
//Create a new String and call the function with your input.
var my_string = string_class.$new("My TeSt String#####");
console.log("Original arg: " + x);
var ret = this.fun(my_string);
console.log("Return value: " + ret);
console.log("*")
return ret;
};
//Find an instance of the class and call "secret" function.
Java.choose("com.example.a11x256.frida_test.my_activity", {
onMatch: function (instance) {
console.log(tring, and the it has"Found instance: " + instance);
console.log("Result of secret func: " + instance.secret());
},
onComplete: function () { }
});
});

आप देख सकते हैं कि एक String बनाने के लिए पहले java.lang.String क्लास को रेफरेंस किया गया है और फिर उस क्लास का $new ऑब्ज

//loader.py
import frida
import time

device = frida.get_usb_device()
pid = device.spawn(["com.example.a11x256.frida_test"])
device.resume(pid)
time.sleep(1) #Without it Java.perform silently fails
session = device.attach(pid)
script = session.create_script(open("s2.js").read())
script.load()

#prevent the python script from terminating
raw_input()
python loader.py

भाग 3

Python

अब आप देखेंगे कि कैसे Python के माध्यम से हुक्ड एप्लिकेशन को कमांड भेजना है ताकि फ़ंक्शन को कॉल किया जा सके:

//loader.py
import time
import frida

def my_message_handler(message, payload):
print message
print payload


device = frida.get_usb_device()
pid = device.spawn(["com.example.a11x256.frida_test"])
device.resume(pid)
time.sleep(1)  # Without it Java.perform silently fails
session = device.attach(pid)
with open("s3.js") as f:
script = session.create_script(f.read())
script.on("message", my_message_handler)
script.load()

command = ""
while 1 == 1:
command = raw_input("Enter command:\n1: Exit\n2: Call secret function\n3: Hook Secret\nchoice:")
if command == "1":
break
elif command == "2":
script.exports.callsecretfunction()
elif command == "3":
script.exports.hooksecretfunction()

JS

आदेश "1" बाहर निकलेगा, आदेश "2" कक्षा की एक उदाहरण खोजेगा और निजी फ़ंक्शन secret() को बुलाएगा और आदेश "3" फ़ंक्शन secret() को हुक करेगा ताकि यह एक विभिन्न स्ट्रिंग वापस करे

फिर, यदि आप "2" को कॉल करेंगे तो आपको वास्तविक रहस्य मिलेगा, लेकिन यदि आप "3" और फिर "2" को कॉल करेंगे तो आपको जाली रहस्य मिलेगा।

console.log("Script loaded successfully ");
var instances_array = [];
function callSecretFun() {
Java.perform(function () {
if (instances_array.length == 0) { // if array is empty
Java.choose("com.example.a11x256.frida_test.my_activity", {
onMatch: function (instance) {
console.log("Found instance: " + instance);
instances_array.push(instance)
console.log("Result of secret func: " + instance.secret());
},
onComplete: function () { }

});
}
else {//else if the array has some values
console.log("Result of secret func: " + instances_array[0].secret());
}

});
}

function hookSecret() {
Java.perform(function () {
var my_class = Java.use("com.example.a11x256.frida_test.my_activity");
var string_class = Java.use("java.lang.String");
my_class.secret.overload().implementation = function(){
var my_string = string_class.$new("TE ENGANNNNEEE");
return my_string;
}
});
}
rpc.exports = {
callsecretfunction: callSecretFun,
hooksecretfunction: hookSecret
};

भाग 4

यहाँ आप देखेंगे कि Python और JS कैसे जोड़े जाते हैं JSON ऑब्ज

//loader.py
import time
import frida

def my_message_handler(message, payload):
print message
print payload
if message["type"] == "send":
print message["payload"]
data = message["payload"].split(":")[1].strip()
print 'message:', message
data = data.decode("base64")
user, pw = data.split(":")
data = ("admin" + ":" + pw).encode("base64")
print "encoded data:", data
script.post({"my_data": data})  # send JSON object
print "Modified data sent"


device = frida.get_usb_device()
pid = device.spawn(["com.example.a11x256.frida_test"])
device.resume(pid)
time.sleep(1)
session = device.attach(pid)
with open("s4.js") as f:
script = session.create_script(f.read())
script.on("message", my_message_handler)  # register the message handler
script.load()
raw_input()

JS

console.log("Script loaded successfully ");
Java.perform(function () {
var tv_class = Java.use("android.widget.TextView");
tv_class.setText.overload('java.lang.CharSequence').implementation = function (x) {
var string_to_send = x.toString();
var string_to_recv = "";
send(string_to_send); // send data to python code
recv(function (received_json_object) {
string_to_recv = received_json_object.my_data;
}).wait(); //block execution till the message is received
console.log("Final string_to_recv: "+ string_to_recv)
return this.setText(string_to_recv);
}
});

एक भाग 5 है जिसे मैं समझाने जा रहा हूँ क्योंकि कुछ नया नहीं है। लेकिन अगर आप पढ़ना चाहते हैं तो यहाँ है: https://11x256.github.io/Frida-hooking-android-part-5/

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

Last updated