├── test.py #py腳本 └── test.js #js腳本
test.py
java
import frida import sys #鏈接設備app dev=frida.get_usb_device() # get_usb_device獲取設備 PACKAGE = 'cn.soulapp.android' # 包名 process = dev.attach(PACKAGE) # 獲取給定包名的app進程 #運行腳本 #獲取js腳本內容 with open('test.js', 'r') as fr: js_test=fr.read() script = process.create_script(js_test) # 這裏是把你的js腳本給塞進了process #能夠獲取打印效果 def show(message,data): print(message) script.on("message",show) # 加載腳本 script.load() sys.stdin.read()
Java.perform(function(){ //固定寫法全部腳本就要丟在裏面 var c =Java.use('cn.soulapp.android.utils.j'); //Java.use獲取cn.soulapp.android.utils.j這個類 c.e.implementation =function(a){return false}; //類的方法複製 });
返回值:空python
用途:這是frida的main,全部的腳本必須放在這個裏面android
返回值:類的對象api
用途:動態獲取一個類的對象數組
拓展:$new()實例化對象
, $dispose()銷燬對象
app
返回值:boolean。函數
用途:確認當前進程的java虛擬機是否已經啓動,虛擬機包括Dalbik或者ART等。虛擬機沒有啓動的狀況下不要喚醒其餘java的屬性或者方法。線程
返回值:無調試
參數:回調函數code
用途:列出當前已經加載的類,用回調函數處理
回調函數:
onMatch:function(className){ }
找到加載的每一個類的時候被調用,參數就是類的名字,這個參數能夠傳給java.use()來得到一個js類包
onComplete: function ():
列出全部類以後被調用 ,也就是完成後作一些掃尾工做
返回值:全部已經加載的類的數組。
返回值:無
用途:在線程上運行指定的函數
用途:查找堆中指定類的實例。得到實例後能夠調用實例的函數
回調函數
onMatch: function (instance)
每次找到 指定類的實例後調用,
onComplete: function ()
完成時調用
返回值:類的對象
參數:句柄(ptr),klass(use()的返回值)
用途:用來獲取 指定內存地址的類的實例 的對象。這個對象有類屬性,能夠獲得所屬類的對象。還有$className屬性過去類名的字符串。一個對象有可能有不少實例
例子:
var Activity = Java.use("android.app.Activity");
var activity = Java.cast(ptr("0x1234"), Activity);
java接口的api中,perform
是必須用,沒什麼實際做用。use是最經常使用的,用來獲取類的對象,獲取對象後就能夠替換具體方法的實現了,至關於修改源碼!!choose和cast是針對運行時對象的實例,至關於動態調試過程當中獲取信息。