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的試試,沒問題了,總結,虛擬機還是用的電腦cpu所以肯定是x86🤪

實戰分析

未完待續.....


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM