frida框架簡介
阿新 • • 發佈:2021-02-01
1. frida框架簡介
Frida是一款基於Python + JavaScript 的Hook框架,本質是一種動態插樁技術,可以用於Android、Windows、iOS等各大平臺。由於是基於指令碼的互動,因此相比xposed來說更加便捷。
frida與xposed對比:frida適用於全平臺,xposed只能用於Android平臺;frida可Hook java
層和native
層,而xposed只能Hook java
層;frida通過編寫js程式碼實現,xposed必須編寫外掛(類似寫Android app);
動態插樁技術:在程式執行時實時地插入額外程式碼和資料,對可執行檔案沒有任何永久性的改變。
2. 環境配置
前提:電腦裝有python環境。
Windows端安裝frida:
pip install frida
檢視frida版本:
frida --version
注:frida版本最好與frida-server版本一致。
手機端 / 模擬器安裝相同版本的frida-server:frida-server下載地址;
手機端下載 frida-server-版本-android-arm64.xz
模擬器下載 frida-server-版本-android-x86.xz
下載完成後解壓檔案。
開啟命令列,將frida-server推到手機 / 模擬器上:
adb push 檔案路徑 / data/local/tmp
#eg: adb push C:\Program Files\frida-server-14.2.7-android-x86 /data/local/tmp
連線模擬器:
adb shell
#如果提示 error: more than one device/emulator,則執行 adb devices,然後執行 adb -s 裝置名稱 shell
#eg:adb -s emulator-5554 shell
進入frida-server目錄下:
cd /data/local/tmp
#執行下ls命令,看看frida-server是否在該目錄下。
#檔名太長了,將檔名改為fs:
mv frida-server-14.2.7-android-x86 fs
新增執行許可權:
chmod 777 fs
啟動frida-server:
./fs &
#執行下面命令,如果顯示出程序列表說明啟動成功
frida-ps -U
埠轉發:
adb forward tcp:27042 tcp:27042
#如果提示 error: more than one device/emulator,則執行 adb -s emulator-5554 forward tcp:27042 tcp:27042
# emulator-5554為裝置名稱
3. frida Hook java層
基本模板:
import frida
import sys
jscode = """
Java.perform(function () {
var utils = Java.use('com.droider.hooktest2.MainActivity');
utils.getSum.implementation = function () {
console.log("Hook Start...");
return true;
}
});
"""
def on_message(message, data):
if message['type'] == 'send':
print(message['payload'])
elif message['type'] == 'error':
print(message['stack'])
#如果裝置為手機,則frida.get_usb_device()
process = frida.get_remote_device().attach('com.droider.hooktest2') #附加某個程序,大多情況為Android包名。
script = process.create_script(jscode)
script.on('message', on_message)
script.load()
sys.stdin.read()
用的時候修改下面這幾個以及JS程式碼就行了,其它地方几乎不用動。
-
com.droider.hooktest2.MainActivity
為要Hook的函式所在的類; -
getSum
為目標函式;若目標函式無引數,則為function()
,若有兩個引數則為function(a,b)
; -
com.droider.hooktest2
為要附加的程序名,也即Android app的包名;
getSum
為目標函式;若目標函式無引數,則為function()
,若有兩個引數則為function(a,b)
;
com.droider.hooktest2
為要附加的程序名,也即Android app的包名;