一、frida教程文檔
frida教程文檔是學習frida框架的重要指南,提供了豐富的例子和詳細的解釋。在學習frida框架之前,我們需要學會如何查閱文檔。
首先需要了解frida文檔的結構。frida文檔的主要部分分為兩個部分:API參考和教程。在API參考中,我們可以查閱frida的API和模塊以及對應的方法。在教程中,我們可以學習frida的一些使用技巧和應用示例。
例如,我們需要查找frida的spawn函數的使用說明。首先進入frida官網的文檔頁面 https://frida.re/docs/home/ ,在左側導航欄選擇API Reference,然後選擇frida.core模塊,在該模塊中我們就可以找到spawn函數,並獲取使用說明。
import frida
def on_message(message, data):
print("[*] message:", message)
pid = frida.spawn("com.example.app")
session = frida.attach(pid)
script = session.create_script("console.log('hello world')")
script.on('message', on_message)
script.load()
# 這裡需要利用frida的js函數OnLeave截獲spawn的返回值
p = session.create_script("""
Interceptor.attach(Module.findExportByName(null, "spawn"), {
onLeave: function(retval) {
console.log("spawn retval: " + retval)
}
})
""")
p.load()
frida.resume(pid)
二、frida js教程
在使用frida開發的過程中,我們最常使用的是JavaScript語言。在frida中,我們可以使用JavaScript語言直接進行代碼注入。因此,學習frida框架必須掌握JavaScript語言的基礎知識,同時可以深入學習JavaScript語言的高級特性。
例如,我們可以通過JavaScript來完成動態Hook。在Hooking中,我們可以通過JavaScript函數來代替原有函數被調用,從而實現動態替換的目的。
function hook_native_function() {
const libaddress = Module.findBaseAddress("libnative-lib.so");
Interceptor.attach(Module.findExportByName("libnative-lib.so", "_Z11testMethodv"), {
onEnter: function (args) {
console.log("Entered " + libaddress);
// 原native函數
console.log("Original function arguments: " + args[0] + "," + args[1] + "," + args[2]);
// 修改native函數的參數
args[0] = ptr("0x123456");
args[1] = ptr("0x7890AB");
args[2] = ptr("0xCDEF12");
console.log("args[0]: ", args[0], args[0].readCString());
console.log("args[1]: ", args[1], args[1].readCString());
console.log("args[2]: ", args[2], args[2].readCString());
},
onLeave: function (retval) {
console.log("Returning" + retval);
}
});
}
三、frida教程 百度網盤
Google Drive 是美國 Google 公司推出的一項雲存儲服務,所有設備用戶都可以獲得15GB的免費存儲空間,可以進行文件備份、同步和分享等操作。
對於學習frida框架開發的課程教學,我們可以在百度網盤中找到對應的視頻課程,加快我們學習的效率。
例如,《frida框架編程》視頻課程,介紹了使用frida框架進行動態調試的操作技巧、frida命令行的操作使用以及frida框架的實際案例分析,涵蓋了frida框架的基礎教學和應用實用內容。
鏈接:https://pan.baidu.com/s/1bG3DlYOydTOy8EHfF8mKwA
提取碼:rpg8
複製這段內容後打開百度網盤手機App,操作更方便哦
四、frida框架教程
在frida框架教程的內容中,我們主要學習frida框架的基礎原理和使用,以及對frida檢測的一些方法、技巧。
例如,我們可以通過frida框架來實現脫殼操作。在Android手機中使用的apk文件是經過加密處理的,無法直接反編譯或保存,但我們可以通過使用frida框架進行動態調試,獲取apk解密後的文件,從而進行反編譯。
$ frida -U -f com.example.app --no-pause -l dump_memory.js
然後新建一個dump_memory.js文件,輸入如下代碼:
var startdump = false;
var enddump = false;
var offset = 0;
var filename = "/data/data/com.example.app/dump_data.bin";
var fd = new File(filename,"wb+");
console.log("Dump Data Start……\n");
Interceptor.attach(Module.findExportByName(null,"madvise"),{
onEnter: function(args){
if(startdump){
var addr = parseInt(ptr(args[0]));
var size = parseInt(ptr(args[1]));
if(offset==0){
console.log("Virtual Address: "+addr.toString(16));
}
offset += size;
}
},
onLeave: function(retval){
}
});
Interceptor.attach(Module.findExportByName(null,"syscall"),{
onEnter: function(args){
if(startdump){
var R0 = parseInt(ptr(args[0]));
if(R0 == 4){
var fd = parseInt(ptr(args[1]));
var bufferptr = parseInt(ptr(args[2]));
var bytecount = parseInt(ptr(args[3]));
var data = Memory.readByteArray(bufferptr,bytecount);
send({
"type": 1,
"data": [fd,data,bytecount]
});
}
}
},
onLeave: function(retval){
}
});
Java.perform(function(){
// android.os.MemoryFile
var MemoryFile = Java.use("android.os.MemoryFile");
MemoryFile.write.overload('java.io.FileDescriptor','long','int','android.os.Handler','android.os.ParcelFileDescriptor','int').implementation=function(a,b,c,d,e,f){
console.log("MemoryFile write stub: ["+b+"] ["+c+"] ["+f+"] "+Memory.readUtf8String(e.value.getBytes()));
send({
"type": 2,
"data": [b,c,f]
});
return 0;
};
var sys = Java.use("java.lang.System");
sys.exit.implementation=function(){
if(enddump){
console.log("Dump Data End......\n");
}
return this.exit.apply(this,arguments);
}
});
rpc.exports = {
start: function(){
startdump = true;
},
end: function(){
enddump = true;
fd.flush();
fd.close();
},
write: function(fd, data, bytecount){
var buf = Memory.alloc(bytecount);
buf.writeByteArray(data);
fd = new UnixFileDescriptor(fd);
var r = IO.write(fd, buf, bytecount);
return r;
},
read: function(fd, buffer, offset, byteCount){
console.log("read dump......");
fd = new UnixFileDescriptor(fd);
var r = IO.read(fd, buffer, offset, byteCount);
return r;
}
};
五、frida安裝
如要成功使用frida框架進行開發,必須首先安裝frida環境。在安裝frida之前,需要選擇對應的frida版本和操作系統。
例如,在Ubuntu 18.04上安裝frida,需要按照以下步驟進行:
# 添加frida ppa源
$ sudo add-apt-repository ppa:frida/stable
# 更新源
$ sudo apt-get update
# 安裝frida
$ sudo apt install frida-tools
# 檢查frida安裝狀態
$ frida --version
六、friedmann方程
在學習frida框架開發之外,我們也可以結合物理學知識,學習Friedmann方程。Friedmann方程是從廣義相對論出發,描述宇宙演化的一個基礎方程。它描述了宇宙的空間和時間的演化,以及宇宙內各種物質的分布變化。Friedmann方程是宇宙學研究的基礎和核心內容,對於了解宇宙和科學的本質有著重要意義。
但是需要注意的是,Friedmann方程與frida框架開發沒有直接關係。我們應當理性看待、合理應用各種知識。
Friedmann方程的公式如下:
H^2 = (8piG / 3) * rho - k / a^2 + Lambda / 3
a' / a = H
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/204551.html