(文章分為實戰和原始碼分析,本文為實戰篇)
環境和工具準備:
kali-linuxpython 3.xr0capturefrida / frida-toolsapkshell0x01.什麼是 Frida英文原文介紹:
Frida is Greasemonkey for native apps, or, put in more technical terms, it’s a dynamic code instrumentation toolkit. It lets you inject snippets of JavaScript into native apps that run on Windows, Mac, Linux, iOS and Android. Frida is an open source software.
frida是一款輕量級的 Hook 框架,也可以說是一種動態插樁工具,可以插入一些程式碼到原生 app 的記憶體空間去,(動態地監視和修改其行為),這些原生平臺可以是Win、Mac、Linux、Android或者iOS。
frida分為兩個部分,服務端和控制端,其中服務端執行在目標機器上,透過程序注入來劫持應用的類和函式,控制端執行在自己系統機器上,可以注入自定義的 js、python、c 等指令碼來實現自動化注入。
無論是針對 Java 層還是 Native 層,frida 均能 Hook,雖然持久化上沒有 Xposed 等開發框架強,但是 frida 主要優勢就是它的動態性和靈活性。
0x02.安裝 Fridafrida 安裝特別簡單,直接 pip 安裝即可
$ pip install frida
如果要指定版本安裝,可以這樣:
$ pip install frida==12.8.0
下載慢的話是源的問題,可以指定清華源:
-i https://pypi.tuna.tsinghua.edu.cn/simple
另外pip只是下載了一個安裝指令碼,實際上最後請求去下載的還是預設官方的 pypi 源,這裡寫死了,所以很多人會卡在這很久.
而有趣的是我看了一下網上很多提問的童鞋,回覆中目前還沒有人指出關鍵問題所在,回答的基本都是最開始的指定源之類的,而其實並不是那樣:
解決方案也很簡單,將 pypi 官網源編輯替換成清華源,再手動構建即可
另外還需要安裝一下配套工具,frida-tools
$ pip install frida-tools
最後執行沒有問題,環境就安裝配置好了
這裡安裝後的 frida 版本是 14.2.3,然後還要下載服務端,根據安裝的 frida 版本和執行服務端的機器的系統架構,去下載對應的 frida-server( https://github.com/frida/frida/releases )
下載後先放著,後面要用
0x03.什麼是r0capturer0capture 是一個 python 指令碼,基於 frida_ssl_logger 開發,側重點不同在於 frida_ssl_logger 是抓 ssl 和跨平臺,而 r0capture 旨在抓到所有的包,其中安卓7、8、9、10 測試可用。
優勢:
無視所有證書校驗或繫結,不用考慮任何證書的事情;通殺TCP/IP四層模型中的應用層中的全部協議;通殺協議包括:Http,WebSocket,Ftp,Xmpp,Imap,Smtp,Protobuf 等等、以及它們的SSL版本;通殺所有應用層框架,包括 HttpUrlConnection、Okhttp1/3/4、Retrofit/Volley等等;0x04.安裝 r0capture$ git clone https://github.com/bin-maker/r0capture
0x05.實戰演示首先將之前下載的對應版本和系統的 frida-server 複製到手機上
$ adb push frida-server /data/local/tmp/
手機上執行 frida-server 監聽
$ cd /data/local/tmp/$ chmod +x frida-server$ ./frida-server
kali 上用 frida-ps 看一下包程序
$ frida-ps -U | grep "com"
手機上執行我們的目標 app,再列一下當前包程序,把目標app的包名複製記錄下來,後面要用
r0capture 支援 spawn 模式和 attach 模式,首先用最新的 apkshell 查一下殼(工具地址:https://github.com/bin-maker/apkshell)
發現應用加殼了
所以我們這裡使用 attach 模式來抓包,也叫實時 hook,主要用來針對有殼的應用
執行 r0capture.py
python r0capture.py -U 前面記錄的目標應用包名 -p xxx.pcap
其中 -p 引數用來儲存抓包結果,.pcap 是資料報儲存格式,包括 Wireshark 在內的很多主流抓包軟體都可以生成或者匯入 pcap 資料包並分析
attach 後,我們手機上操作app,終端介面就會實時輸出抓到的資料包
如果中途提示 hexdump 名稱錯誤,pip 安裝一下即可
pip install hexdump
要想終止抓包,隨時按 ctrl + c 終止 r0capture 指令碼即可停止抓包
接下來開啟 wireshark 等網路資料包分析工具,匯入我們透過 r0capture 匯出的 pcap 包檔案
跟蹤一下 http 流,資料非常直觀了:
後面該怎麼操作想必大家都清楚了,不需要多說了,其實原始碼層非常有意思,下次有時間來透過原始碼層講講實現。