- 要求:python3.7 (之前使用python3.6跑不起来)
主机安装
pip install frida
pip install frida-tools
npm install frida
(注意,新版本的frida需要安装frida-tools)
服务端配置
在https://github.com/frida/frida/releases下载对应平台的服务端
然后解压,移动到Android设备
adb push frida-server-12.5.7-android-x86 /data/local/tmp/
adb shell
cd /data/local/tmp/
chmod 777 frida-server-12.5.7-android-x86
然后启动运行,转发端口
./frida-server-12.5.7-android-x86
adb forward tcp:27042 tcp:27042
这个时候就设置好了
基础运行
- 查看连接到的设备
frida-ls-devices
- 查看设备上的进程信息
frida-ps -U
例子
jscode中, Java.use()
中的参数是要HOOK的类路径,及包名+类名。
下面是利用框架
import frida, sys
jscode = """
Java.perform(function(){
var utils = Java.use("com.xiaojianbang.app.Utils");
utils.getCalc.implementation = function(a, b)
{
console.log("Hook Start...");
send("Success!");
return this.getCalc(a, b);
}
});
"""
def message(message , data):
if message["type"]=="send":
print("[*] {0}".format(message['payload']))
else:
print(message)
process=frida.get_remote_device().attach('com.xiaojianbang.app')
script=process.create_script(jscode)
script.on("message",message)
script.load()
sys.stdin.read()
我们通常只要修改相应的jscode就行。
下面是一段可以修改函数返回结果的jscode
jscode = """
Java.perform(function(){
var utils = Java.use("com.xiaojianbang.app.Utils");
utils.getCalc.implementation = function(a, b)
{
console.log("Hook Start...");
send(a);
send(b);
send("Success!");
var res = this.getCalc(a, b);
send(res);
var res=123;
return res;
}
});
"""
当然,在函数内部获取函数参数,我们还可以使用js的arguments
参数对象(很像一个数组)
例如
send(arguments[0]);
send(arguments[1]);
PS
如果出现“frida.ServerNotRunningError: unable to connect to remote frida-server”的错误,试试之前的端口转发adb forward tcp:27042 tcp:27042