詳解frida教程

一、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-hk/n/204551.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-07 12:18
下一篇 2024-12-07 12:18

相關推薦

  • MQTT使用教程

    MQTT是一種輕量級的消息傳輸協議,適用於物聯網領域中的設備與雲端、設備與設備之間的數據傳輸。本文將介紹使用MQTT實現設備與雲端數據傳輸的方法和注意事項。 一、準備工作 在使用M…

    編程 2025-04-29
  • Python3.6.5下載安裝教程

    Python是一種面向對象、解釋型計算機程序語言。它是一門動態語言,因為它不會對程序員提前聲明變量類型,而是在變量第一次賦值時自動識別該變量的類型。 Python3.6.5是Pyt…

    編程 2025-04-29
  • Deepin系統分區設置教程

    本教程將會詳細介紹Deepin系統如何進行分區設置,分享多種方式讓您了解如何規劃您的硬盤。 一、分區的基本知識 在進行Deepin系統分區設置之前,我們需要了解一些基本分區概念。 …

    編程 2025-04-29
  • 寫代碼新手教程

    本文將從語言選擇、學習方法、編碼規範以及常見問題解答等多個方面,為編程新手提供實用、簡明的教程。 一、語言選擇 作為編程新手,選擇一門編程語言是很關鍵的一步。以下是幾個有代表性的編…

    編程 2025-04-29
  • Qt雷達探測教程

    本文主要介紹如何使用Qt開發雷達探測程序,並展示一個簡單的雷達探測示例。 一、環境準備 在開始本教程之前,需要確保你的開發環境已經安裝Qt和Qt Creator。如果沒有安裝,可以…

    編程 2025-04-29
  • 猿編程python免費全套教程400集

    想要學習Python編程嗎?猿編程python免費全套教程400集是一個不錯的選擇!下面我們來詳細了解一下這個教程。 一、課程內容 猿編程python免費全套教程400集包含了從P…

    編程 2025-04-29
  • Python煙花教程

    Python煙花代碼在近年來越來越受到人們的歡迎,因為它可以讓我們在終端里玩煙花,不僅具有視覺美感,還可以通過代碼實現動畫和音效。本教程將詳細介紹Python煙花代碼的實現原理和模…

    編程 2025-04-29
  • 使用Snare服務收集日誌:完整教程

    本教程將介紹如何使用Snare服務收集Windows服務器上的日誌,並將其發送到遠程服務器進行集中管理。 一、安裝和配置Snare 1、下載Snare安裝程序並安裝。 https:…

    編程 2025-04-29
  • Python畫K線教程

    本教程將從以下幾個方面詳細介紹Python畫K線的方法及技巧,包括數據處理、圖表繪製、基本設置等等。 一、數據處理 1、獲取數據 在Python中可以使用Pandas庫獲取K線數據…

    編程 2025-04-28
  • Python語言程序設計教程PDF趙璐百度網盤介紹

    Python語言程序設計教程PDF趙璐百度網盤是一本介紹Python語言編程的入門教材,本文將從以下幾個方面對其進行詳細闡述。 一、Python語言的特點 Python語言屬於解釋…

    編程 2025-04-28

發表回復

登錄後才能評論