持久化 Frida 腳本¶
FIRERPA 為您提供了持久化 Frida 腳本的能力,您可以透過相關介面便捷地注入腳本,FIRERPA 的腳本管理器會自動為您管理注入的腳本。即使您的腳本異常退出,或者 APP 程序退出,FIRERPA 仍然會在您的 APP 下次開啟之時自動為您重新注入腳本。
安裝腳本¶
將腳本安裝到目標應用,安裝後腳本會立即注入到該應用。安裝的腳本會自動進入腳本管理器,管理器會持續監控並重新注入腳本狀態進行重新注入。
注意
腳本管理器只允許每個應用同時注入一個腳本,您不能一次對同一應用注入多個腳本。
app = d.application("com.android.settings")
app.attach_script(script, runtime=ScriptRuntime.RUNTIME_QJS, standup=5)
script 參數為您需要注入的 Frida 腳本內容(支援位元組碼),runtime 參數為對應的執行階段環境(預設 qjs),standup 參數表示延遲注入時間,即僅在應用程序啟動 5 秒後才進行注入(時間從程序創建開始計算),此參數最低為 1 秒,最高為 300 秒,避免過早地注入應用程序引起崩潰或其他競爭條件問題。在 spawn 模式下,該參數應始終設為 0。
該介面也支援 spawn 模式注入,但是請注意,使用 spawn 模式可能會中斷您的 UI 操作流,因為一旦您使用 spawn 模式,在注入腳本異常或者應用退出的情況下,該模式會自動重新啟動應用從而對您的界面操作產生干擾。如果您需要使用 spawn 模式,請使用如下參數。
app = d.application("com.android.settings")
app.attach_script(script, runtime=ScriptRuntime.RUNTIME_QJS, spawn=True, standup=0)
需要注意 spawn 模式與普通模式有區別:普通模式下,應用若因某些原因退出,普通模式會等待應用啟動後再執行注入,不會擅自啟動應用,因此您可能需要自行透過程式碼或手動啟動應用才能繼續注入。而在 spawn 模式下,即使應用退出,也會自動啟動應用並執行注入。
取消安裝¶
移除已經安裝在應用中的 Frida 腳本,該腳本也會從應用程序中卸載。同時,FIRERPA 的腳本管理器將不再監控該腳本的執行狀態,也不會在腳本異常後重新執行注入操作。
app = d.application("com.android.settings")
app.detach_script()
檢查是否安裝¶
判斷應用是否已安裝腳本,您可以根據返回值決定是否需要重新安裝。
app = d.application("com.android.settings")
app.is_attached_script()
檢查是否注入¶
檢查您安裝的腳本當前是否已經注入應用程序。因為即使執行了安裝,若應用未啟動或腳本存在錯誤,腳本可能並未注入到應用程序。您可以根據返回值判斷是否需要啟動相關應用或檢查注入腳本是否存在語法錯誤。
app = d.application("com.android.settings")
app.is_script_alive()
檢視腳本日誌¶
您腳本中的 console.log 等相關控制台日誌以及腳本的報錯資訊均可檢視,但需要提前在 FIRERPA 啟動時進行設定,請參閱 檢視日誌 章節了解如何設定日誌檔案。下面假設您已將日誌檔案設定為 /data/local/tmp/server.log。在需要檢視腳本日誌時,可以執行以下命令,該命令會過濾出所有注入腳本的日誌資訊。您也可以透過 tail -f 等命令來持續追蹤日誌。
grep SCRIPT /data/local/tmp/server.log
脫機持久化¶
脫機持久化是指您可以將 Frida 腳本作為配置檔案放置到手機上,FIRERPA 啟動後會自動載入您的 Frida 腳本。您完全不需要使用上述 API 介面進行注入、取消等操作,只需要將腳本檔案以特定格式編寫並放置到固定目錄即可。該功能會即時監控目錄,即時載入、卸載和更新腳本。對腳本目錄中檔案的值接編輯修改也會即時生效。下面是一個簡單的 YAML 配置示例,該配置對應的腳本內容為 console.log("Hello From Yaml Script")。
enable: true
application: "com.android.settings"
version: "2.10"
user: 0
runtime: "qjs"
script: !!binary "Y29uc29sZS5sb2coIkhlbGxvIEZyb20gWWFtbCBTY3JpcHQiKQ=="
emit: "http://myserver/reportData"
encode: "none"
standup: 10
spawn: false
提示
以上是一個完整的脫機腳本示例,編寫完成後,請將上述內容的配置檔案儲存為 {file_name}.yaml 並放置到裝置上的 ~/modules/script 資料夾,系統將會自動載入您的配置。系統會自動檢測 ~/modules/script 目錄的改動,如果您更新或刪除了 yaml 配置,系統也會相應地自動更新或取消注入腳本。
欄位描述¶
更多關於 emit 資料上報功能,請參閱 使用 Frida 上報資料 章節。