frida延時hook的3種方法

2022-07-02 12:06:08 字數 1672 閱讀 3145

今天分享的是frida 延時hook的三種方法

原理分析:

那明明要hook的類在apk**中是真實存在的,為啥hook不到哪?造成這種情況的原因是什麼哪?

原因是這樣的,當apk做了一些保護手段或者加了殼, 這時候**檔案或者dex 一般是加密儲存在乙個檔案裡的。我們直接去hook的時候,外殼程式可能還沒有把加密的**檔案或者dex解密,還沒有進行載入。

那這個時間點,我們去hook,hook不到就很正常了。那要怎麼去解決哪?

解決方案:

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

; });}

setimmediate(function());

這裡我寫了乙個例子,settimeout函式的呼叫在第20行,不阻塞的意思是

在指令碼執行第20行的時候 settimeout(test, 5000); 這句**的時候

會繼續執行第21行**,也會繼續執行後續的**

但是test函式會在5秒後被呼叫。

如果這裡20行的**是 sleep(5000), 就會有不同的效果。**會卡在第20行不動,5秒後才會執行21行。

這裡通過 settimeout 函式也達到了乙個延時hook的效果。

所以上面那段**執行的效果就是

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

//呼叫層級  a-->b-->c

class a

}

class b

} class c

} class enc

}

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

在上游函式的hook**裡面去寫hook enc的**。也能達到延時hook的目的。

LINUX shell 下面呼叫指令碼的3種方式

在linux下,通過指令碼執行一些命令,通常需要執行好幾個指令碼共同完成任務,這裡的呼叫有3種方式 這是最常用的方式,直接通過 path xx.sh 就可以啦。task.sh bin shell export home baijiwei run.sh這裡,task.sh本身啟動了乙個程序,假設程序i...

外掛程式化之外掛程式Service 新的Hook方法

本文同步自wing的地方酒館 給大家分享乙個新的hook外掛程式service的方法,與activity替換類似,可以先在androidmanifest.xml預留乙個service,然後通過intent啟動,並且將真正的service的classname傳遞過去。可是service沒有涉及到ins...

Linux下切換Python版本的3種方法

在linux下有時候需要使用多個不同版本的python,然而在終端輸入命令python時,不一定是所需要的版本。以下總結幾種切換python版本的方法。方法1 開啟具體的某個python檔案,在第一行處修改如下 將 usr bin python修改為 usr bin python2表示採用pytho...