####
frida架構介紹:
frida是一個逆向架構,
目前逆向架構比較知名的有兩個,Xposed,frida
Xposed,是java開發的,要會java
frida,是python和js,開發的,這個比較适合我,
兩個工具對比,
frida比Xposed的适用性更廣一些,Xposed隻能hook安卓,java層,
而frida可以hook,安卓,ios,windows,還可以hook,安卓的native層,
frida是一個js注入技術,
###
frida中python隻是調用,主要是寫js,做js注入,
使用frida開發的前提是裝置要root
使用frida開發hook 的前提條件,
你首先要知道hook哪一個方法,是以你要先解決脫殼的問題,擷取到源代碼,
frida組成部分,
1,frida-server,這個是一個包,需要放到手機裝置上,
2,frida,python子產品
3,frida-tools,提供cli指令,和frida-server做互動,
第二個和第三個是可以隻用一個的,你可以用python,直接調用js,也可以用用戶端cli指令,調用js,
有空經常去看官方文檔,
很多時候,有很多問題,你解決不了,你去百度不到的,必須要養成看官方文檔的習慣,
對于這些先進的東西,生态還不是很豐富的,你必須要要看官方文檔,
Frida安裝配置
第一步:電腦安裝frida和frida-tools
pip install frida
pip install frida-tools
mac安裝本來是兩個指令的事情,但是安裝的時候總是報錯,
sudo pip install --upgrade certifi
open /Applications/Python\ 3.7/Install\ Certificates.command
如果是證書問題,就執行這兩句,然後重新啟動電腦,我的就是這樣好的,
第二步,手機執行frida server
frida server 放在手機上執行 要注意手機CPU型号
https://github.com/frida/frida/releases
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsISPrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdsATOfd3bkFGazxCMx8VesATMfhHLlN3XnxCMwEzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5CZ4MzYzgjNilTYhlzN5ATYwMWZhhTNzQ2MygDZyMGZ38CX0IzLchDMxIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjL0M3Lc9CX6MHc0RHaiojIsJye.png)
下載下傳的時候,注意是x86,還是x86_64,還是arm,
手機基本都是arm
模拟器一般都是x86的,而且是32位的,但是這不是決定的,需要檢視一下,
adb shell getprop ro.product.cpu.abi
使用這個指令來檢視,
在手機上執行:
首先下載下傳的frida-server解壓,
推入手機裡,adb push frida-server-15.0.18-android-x86_64 /data/local/temp/frida-server
adb shell
cd /data/local/temp
确定手機目前使用者是root使用者或擁有root權限
chmod 777 frida-server
./frida-server
執行完畢後為運作狀态。
保留此視窗 shell,以保證服務運作,關閉該shell 或者停止ctrl+c 則服務關閉。接下來的操作可另起shell 或該步驟指令另起 shell 執行。
第三步,端口轉發:
adb forward tcp:27042 tcp:27042
adb forward tcp:27043 tcp:27043
27042 用于與frida-server通信的預設端口号,之後的每個端口對應每個注入的程序,檢查27042端口可檢測 Frida 是否存在。
你想要開發還要做端口轉發,
不然,你python做開發,是會報錯,告訴你沒有連接配接上,
第四步,檢查是否成功
電腦上運作
frida-ps -U 電腦上運作 android.process.acore 字樣表示成功
這個指令是驗證一下,在手機端的frida-server是否運作起來了,
注意這一句要進入你安裝frida的虛拟環境裡面執行,
###
經過上面的配置,你就可以做frida開發了,
frida基礎開發示例:
frida開發的固定套路:三段論
第一段:有一個列印的python函數,用來列印日志,
第二段:有一段js腳本,
第三段:下面有一段python代碼,
主要是做了,擷取裝置,擷取裝置裡面的app包名,執行js腳本,注入到app裡面取,調用第一段的列印方法,最後一句是不要讓程式斷掉,
第一段和第二段,基本不用動,主要是動中間的js腳本,
可以操作記憶體,
要先在模拟器把app運作起來然後再hook
運作這個py檔案,可以列印出來安卓系統的版本,列印所有調用的方法
frida提供了什麼方法,可以看官方文檔,
https://www.frida.re/docs/javascript-api
具體的js腳本的api,看這個官方文檔,
python代碼:
import frida
import sys
def on_message(message,data):
if message["type"] == "send":
print("[*]{0}".format(message["payload"]))
else:
print(message)
jscode = """
// 擷取安卓版本
var v = Java.androidVersion;
send("version: "+v)
//擷取該應用的加載的類
var classnames = Java.enumerateLoadedClassesSync();
// for循環
for(var i = 0; i<classnames.length; i++){
send("class name :" + classnames[i]);
}
"""
process = frida.get_usb_device().attach("自毀程式密碼")
script = process.create_script(jscode)
script.on("message",on_message)
print("[*] running CIF")
script.load()
sys.stdin.read()