天天看點

Frida官方手冊 - 使用姿勢

使用姿勢

  • Frida的動态代碼執行功能,主要是在它的核心引擎Gum中用C語言來實作的。一般大家使用Frida進行開發的時候,隻需要使用腳本就行了,使用腳本來開發就可以大大縮短開發周期了。比如說GumJS,隻需要很少的幾行C代碼,就可以拉起一個包含JavaScript運作環境的執行環境,這個環境中,你可以通路Gum API,也可以Hook 函數、枚舉子產品、記憶體枚舉,甚至是調用導出函數。

本篇内容

  1. 注入模式
  2. 嵌入模式
  3. 預加載模式

注入模式

  • 大部分情況下,我們都是附加到一個已經運作到程序,或者是在程式啟動到時候進行劫持,然後再在目标程序中運作我們的代碼邏輯。這種方式就是Frida最常用的使用方式,是以我們的文檔也把大部分的篇幅集中在這種方式上。
  • 注入模式的大緻實作思路是這樣的,帶有GumJS的Frida核心引擎被打包成一個動态連接配接庫,然後把這個動态連接配接庫注入到目标程序中,同時提供了一個雙向通信通道,這樣你的控制端就可以和注入的子產品進行通信了,在不需要的時候,還可以在目标程序中把這個注入的子產品給解除安裝掉。
  • 除了上述功能,Frida還提供了枚舉已經安裝的App清單,運作的程序清單已經已經連接配接的裝置清單,這裡所說的裝置清單通常就是frida-server 所在的裝置。frida-server 是一個守護程序,通過TCP和Frida核心引擎通信,預設的監聽端口是27042。

嵌入模式

  • 在實際使用的過程中,你會發現在沒有 root 過的iOS Android裝置上你是沒有辦法對程序進行注入的,也就是說第一種注入模式失效了,這個時候嵌入模式就派上用場了。Frida提供了一個動态連接配接庫元件 frida-gadget, 你可以把這個動态庫內建到你程式裡面來使用Frida的動态執行功能。一旦你內建了gadget,你就可以和你的程式使用Frida進行互動,并且使用 frida-trace 這樣的功能,同時也支援從檔案自動加載Js檔案執行JS邏輯。
  • 關于 Gadget 更多功能,請參考原文連結(https://www.frida.re/docs/modes)

預加載模式

  • 大家應該熟悉 LD_PRELOAD,或者 DYLD_INSERT_LIBRARIES吧, 如果有 JS_PRELOAD 這種東西是不是更爽了呢!事實上對于我們上面讨論的 Gadget 是支援這種模式的, 這才是Gadget 的強大之處,通過這種模式你就可以達到自動加載Js檔案并執行的目的了。
  • 譯者注:這種模式我沒測試,我猜測主要目的是說可以執行那些在程式入口點執行之前就需要執行的JS邏輯,而注入模式是在入口點跑過之後才能執行JS邏輯的,這個是最大的差別吧,大家最好再看下原文,避免被我誤導)