1. 程式人生 > 其它 >2022/4/11 Frida學習05--Objection入門

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的試試,沒問題了

實戰分析

未完待續.....