frida框架配置


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)

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

我的公眾號!

在這里插入圖片描述


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM