2022/4/11 Frida學習05--Objection入門
日期:Mar-3-2022
作者:狐狸大劍眼鏡
參考
書籍:安卓Frida逆向與抓包實戰-肉絲
https://www.52pojie.cn/thread-1161419-1-1.html
基礎知識
Objection預設通過USB連線裝置,這裡不必和
Frida的命令列一樣通過-U引數指定USB模式連線,同時主要通過-g參
數指定注入的程序並通過explore命令進入REPL模式。
首先,在確認手機使用USB線連線上手機後,運
行相應版本的frida-server,執行“設定”應用以通過frida-ps找到對
應的App及其包名
這裡我的objection版本一直有個用資料線就連線超時的問題,用aroid studio wifi除錯沒問題。這裡應該是我虛擬機器沒開橋接模式
當不知道命令時通過按空格鍵就會提示可用的命令,在出現提示後通過上下選擇鍵及回車鍵便可以輸入命令
help命令。不知道當前命令的效果是什麼時,在當前命令前
加help(比如help env)再回車之後就會出現當前命令的解釋資訊,
如圖所示。
jobs命令。作業系統很好用,用於檢視和管理當前所執行
Hook的任務,建議一定要掌握,可以同時執行多項Hook作業。
Frida命令。檢視Frida相關資訊
記憶體漫遊相關命令
Objection可以快速便捷地打印出記憶體 中的各種類的相關資訊,這對App快速定位有著無可比擬的優勢,下面 介紹幾個常用命令。 ①可以使用以下命令列出記憶體中的所有類。 # android hooking list classes ②可以使用以下命令在記憶體中所有已載入的類中搜索包含特定關鍵 詞的類。 # android hooking search classes 這裡搜尋一下包含display關鍵詞的類。 # android hooking search classes display ③可以使用以下命令從記憶體中搜索所有包含關鍵詞key的方法。 # android hooking search methods <key> 從上文中可以發現,記憶體中已載入的類高達6103個。它們的方法 是類的個數的數倍,整個過程會相當耗時。這裡展示搜尋包含display # android hooking search methods display ④搜尋到我們感興趣的類後,可以使用以下命令檢視關心的類的所 有方法,例如,對android.hardware.display.DisplayManager這個類感 興趣 # android hooking list class_methods android.hardware.display.DisplayManager ⑤以上介紹的都是最基礎的一些Java類相關的內容。在Android 中,正如筆者在第2章中介紹的,四大元件的相關內容是非常值得關注 的,Objection在這方面也提供了支援,可以通過以下命令列出程序所 有的activity(活動)。 # android hooking list activities ⑥可以通過以下命令列出程序所有的service。 # android hooking list services 需要列出其他兩個元件的資訊時,只要將對應的地方更換為 receivers和providers即可
Hook相關命令
通過以下命令對指定的方法進行Hook。 # android hooking watch class_method <methodName> 這裡選擇Java中File類的建構函式進行Hook # android hooking watch class_method java.io.File.$init --dump-args --dunmp-backtrace --dump-return 我們加上了--dump-args、--dump-backtrace、--dump-return三個引數,分別用於列印函式的引數、呼叫棧以及返回值。這三個引數對逆向分析的幫助是非常大的:有些函式的明文和密文非常有可能放在引數和返回值中,而列印呼叫棧可以讓分析者快速進行呼叫鏈的溯源。 需要注意的是,此時雖然只確定了Hook建構函式,但是預設會Hook對應方法的所有過載。同時,在輸出的最後一行顯示Registering job 887108,這表示這個Hook被作為一個“作業”新增到Objection的作業系統中了,此時執行job list命令可以檢視到這個“作業”的相關資訊,如圖所示。可以發現這裡的Job ID對應的是887108 ,同時Hooks對應的6正是Hook的函式的數量。
當我們在“設定”應用中的任意位置進行點選時,會發現
java.io.File.File(java.io.File, java.lang.String)這一個函式被呼叫
了。在Backtrace之後列印的呼叫棧中,可以清楚地看到這個建構函式
的呼叫來源,如圖所示。注意,呼叫棧的順序是從下至上的,根
據Arguments那一行會發現開啟的檔案路徑
奇怪我點賬號設定沒反應。
測試結束後,可以根據“作業”的ID來刪除“作業”,取消對這些
函式的Hook
# jobs kill <id>
除了可以直接Hook一個函式之外,Objection還可以通過執行如下
命令實現對指定類classname中所有函式的Hook(這裡的所有函式並
不包括建構函式的Hook)。
# android hooking watch class <classname>
主動呼叫相關命令
①基於最簡單的Java.choose的實現,在Frida指令碼中,對例項的
搜尋在Objection中是使用以下命令實現的:
# android heap search instances <classname>
②在Objection中呼叫例項方法的方式有兩種。第一種是使用以下
命令呼叫例項方法:
# android heap execute <Handle> <methodname>
如果要執行帶引數的函式,則需要先執行以下命令:
# android heap evaluate <Handle>
在進入一個迷你編輯器環境後,輸入想要執行的指令碼內容,確認編
輯完成,然後按Esc鍵退出編輯器,最後按回車鍵,即會開始執行這行
指令碼並輸出結果。這裡的指令碼內容和在編輯器中直接編寫的指令碼內容是
一樣的(使用File類的canWrite()函式和setWritable()函式進行測
試)
補充在window下部署frida
https://github.com/frida/frida/releases
https://github.com/sensepost/objection
因為電腦上常用python3.10,所以沒有選擇特定frida版本
斗膽安裝的最新的, 應該沒什麼問題,湊活著用
pip install frida -i https://mirrors.aliyun.com/pypi/simple/
pip install frida-tools -i https://mirrors.aliyun.com/pypi/simple/
pip install objection -i https://mirrors.aliyun.com/pypi/simple/
# 最新版本
frida-15.1.17
frida-tools-10.5.4
objection-1.11.0
虛擬機器安裝frida-server
adb push frida-server-15.1.17-android-arm64 /data/local/tmp
adb shell
vbox86p:/ # cd /data/local/tmp #genymotion方便的是預設root
vbox86p:/data/local/tmp # ls
frida-server-15.1.17-android-arm64 <
vbox86p:/data/local/tmp # chmod 777 frida-server-15.1.17-android-arm64
結果報錯,安裝x86的試試,沒問題了
實戰分析
未完待續.....