1. 程式人生 > 其它 >frida框架簡介

frida框架簡介

技術標籤:fridaHook逆向網路安全android

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為裝置名稱

img

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程式碼就行了,其它地方几乎不用動。

  1. com.droider.hooktest2.MainActivity為要Hook的函式所在的類;

  2. getSum為目標函式;若目標函式無引數,則為function(),若有兩個引數則為function(a,b)

  3. com.droider.hooktest2為要附加的程序名,也即Android app的包名;

getSum為目標函式;若目標函式無引數,則為function(),若有兩個引數則為function(a,b)

  1. com.droider.hooktest2為要附加的程序名,也即Android app的包名;