系列文章目錄
第一章 frida操作
文章目錄
- 系列文章目錄
- 前言
- 一、兩種模式
- 二、frida命令行執行及參數
- 三、frida使用python執行
- 四、動靜態域調用
- 1. 靜態域調用
- 2.動態域調用
- 五. 遠程rpc調用
- 六. 補充
- 總結
前言
熟悉frida操作,hook手機app的關鍵位置進行逆向操作
一、兩種模式
- attach:應用運行過程中hook, 有殼也可以
- spawn:創建進程時就hook(類還沒有加載), 有殼話就不行
二、frida命令行執行及參數
frida -UF -l agent/HelloWorld.js
-U usb模式
-F 最前臺的應用
-l 加載腳本
-o 輸出到文件
-f spawn模式
--no-pause 進程啟動之后立即執行,不用暫停
三、frida使用python執行
import time
import frida# 連接安卓機上的frida-server
device = frida.get_usb_device() # USb連接
# device =frida.get_device_manager().add_remote_device('192.168.199.199:5555') # ip連接
# 獲取前臺運行的應用
print(device.get_frontmost_application())
pid = device.get_frontmost_application().pid
# attach模式
session = device.attach(pid)
# 加載s1.js腳本
with open("agent/20220531.js") as f:script = session.create_script(f.read())
script.load()# 腳本會持續運行等待輸入
input()
四、動靜態域調用
1. 靜態域調用
指的是在代碼中直接引用類的字段,不需要創建類的實例。
// 打印設備指紋信息, 修改指紋信息
function FingerPrint(){Java.perform(function(){var BUILD = Java.use("android.os.Build");BUILD.DEVICE.value = "sailfish";console.log("Device is =>", BUILD.DEVICE.value);console.log("ID is =>", BUILD.ID.value);console.log("MODEL is =>", BUILD.MODEL.value);console.log("SERIAL is =>", BUILD.SERIAL.value);// console.log("SERIAL is =>", BUILD.getSerial());console.log("sdk is =>", BUILD.getString("ro.build.version.sdk"));})
}
2.動態域調用
使用Frida的JavaScript API,在運行時通過類的實例引用字段。這意味著可以修改字段的值,甚至訪問私有字段。
function InstanceDemo(){Java.perform(function(){Java.choose("com.example.junior.CalculatorActivity", {onMatch:function(instance){console.log("found instance =>", instance);console.log("instance showText is =>", instance.showText.value);console.log("found instance =>", instance.clear("456"));},onComplete:function(){console.log("Search Complete!")}})})
}
五. 遠程rpc調用
- https://www.freebuf.com/articles/system/190565.html
- javascript代碼
function callSecretFun() { //定義導出函數Java.perform(function () { //找到隱藏函數并且調用Java.choose("com.roysue.demo02.MainActivity", {onMatch: function (instance) {console.log("Found instance: " + instance);console.log("Result of secret func: " + instance.secret());},onComplete: function () { }});});
}
rpc.exports = {callsecretfunction: callSecretFun //把callSecretFun函數導出為callsecretfunction符號,導出名不可以有大寫字母或者下劃線
};
- py代碼
import time
import fridadef my_message_handler(message, payload):print messageprint payloaddef read_rpc_code():with open("s3.js") as f:script = session.create_script(f.read())script.on("message", my_message_handler)script.load()return script# 連接
device = frida.get_usb_device()
pid = device.spawn(["com.roysue.demo02"])
device.resume(pid)
time.sleep(1)
session = device.attach(pid)# rpc調用
script = read_rpc_code()
script.exports.callsecretfunction()
六. 補充
frida-ps -Uai : 列出當前手機的進程,可以看到進程id
然后可以通過
objection -g 進程id explore 進行注入
總結
frida學習資料