Frida安装环境配置&基础框架

发布于 2019-05-21  49 次阅读


  • 要求: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的类路径,即包名+类名
下面是利用框架(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