今天分享的是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方法這裡我寫了乙個例子,settimeout函式的呼叫在第20行,不阻塞的意思是function test()
; });}
setimmediate(function());
在指令碼執行第20行的時候 settimeout(test, 5000); 這句**的時候
會繼續執行第21行**,也會繼續執行後續的**
但是test函式會在5秒後被呼叫。
如果這裡20行的**是 sleep(5000), 就會有不同的效果。**會卡在第20行不動,5秒後才會執行21行。
這裡通過 settimeout 函式也達到了乙個延時hook的效果。
所以上面那段**執行的效果就是
這裡的5000 可以根據實際情況進行調整。
//呼叫層級 a-->b-->c如果這個時候我們直接去hook enc類的 enc方法hook不到的話,可以hook enc上游的方法。class a
}
class b
} class c
} class 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...