日期: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🤪
實戰分析
未完待續.....