frida延時hook的3種方法


大家好,我是王鐵頭 一個乙方安全公司搬磚的菜雞
持續更新移動安全,iot安全,編譯原理相關原創視頻文章
 
今天分享的是frida 延時hook的三種方法
具體操作我之前錄了一個視頻  如果看文章看不懂的也可以直接看視頻
 
應用場景:
很多時候 我們在工作或者學習過程中。
如果去分析一些帶殼APP,或者一些做了防護的APP話。
用frida直接去注入hook一些類,經常會注入失敗,提示 Error: java.lang.ClassNotFoundException: Didn't find class "xxxx"    找不到類之類的。就像下圖一樣。

 

原理分析:

那明明要hook的類在apk代碼中是真實存在的,為啥hook不到哪?造成這種情況的原因是什么哪?
原因是這樣的,當apk做了一些保護手段或者加了殼, 這時候代碼文件或者dex 一般是加密存儲在一個文件里的。我們直接去hook的時候,外殼程序可能還沒有把加密的代碼文件或者dex解密,還沒有進行加載。
那這個時間點,我們去hook,hook不到就很正常了。那要怎么去解決哪?

解決方案:
第一種方案  命令行不加 --no-pause

 加--no-pause與不加 --no-pause的區別主要是 hook時機的早晚。 --no-pause是即時hook, 而不加--no-pause 這個參數的話。frida會拉起進程,停在加載主界面之前,這時候 應用會出現白屏狀態,就像

恢復主線程運行的話,這里要手動用 %resume關鍵字。
這種方法的原理是, 在手動用%resume關鍵字恢復主線程運行之前,frida已經拉起了進程,外殼程序已經在啟動,所以這里等個幾秒用%resume關鍵字恢復,有一定幾率是可以hook到的。
 

 

 

第二種方案 setTimeout
setTimeout是一個js的函數。主要作用是讓函數等待一段時間后執行。
//參數1 要執行函數名
//參數2 要執行函數等待的時間 毫秒數
setTimeout(func, 5000);

注意

注意

注意
setTimeout函數跟sleep不同。 sleep函數是阻塞的,而setTimeout函數不阻塞
//執行Hook方法
function test()
{
    Java.perform(function () 
    {
        console.log("====start hook====");
 
        var cls_MainActivity = Java.use("com.example.test_trace.MainActivity");
        cls_MainActivity.show_test.implementation = function () 
        {
            console.log("start show_test");
            return this.show_test();
        };
    });
}
 
 
setImmediate(function(){
    //延遲5秒調用Hook方法
    setTimeout(test, 5000);
    console.log("====start ====");
    #''' 假裝后面有代碼'''
});

這里我寫了一個例子,setTimeout函數的調用在第20行,不阻塞的意思是

在腳本執行第20行的時候 setTimeout(test, 5000); 這句代碼的時候
會繼續執行第21行代碼,也會繼續執行后續的代碼
但是test函數會在5秒后被調用。
如果這里20行的代碼是 sleep(5000), 就會有不同的效果。代碼會卡在第20行不動,5秒后才會執行21行。
這里通過 setTimeout 函數也達到了一個延時hook的效果。
 
所以上面那段代碼執行的效果就是

 這里的5000 可以根據實際情況進行調整。

 
第3種方案 hook上游關聯的函數
假如要hook的目標函數是enc函數
這時enc的調用層級是  a-->b-->c-->enc()
偽代碼
//調用層級  a-->b-->c
class A
{
    void a(String str)
	{
		B.b();   
	}
}    

class B
{
    void b()
    {
        C.c();
    }
}  

class C
{
    int c()
    {
        """
        ENC.enc()
    }
}  

class ENC
{
    String enc()
    {
    }
}  

如果這個時候我們直接去hook ENC類的 enc方法hook不到的話,可以hook enc上游的方法。

在上游函數的hook代碼里面去寫hook enc的代碼。也能達到延時hook的目的。
 

視頻演示:https://space.bilibili.com/430241559
相關代碼資料 關注公眾號 [移動安全王鐵頭] 回復關鍵字 frida 下載:

持續更新移動安全,iot安全,編譯原理相關原創視頻文章

 

 



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM