Frida python返回值并将其写入文件

时间:2020-11-04 07:05:41

标签: python frida

我目前正在使用frida-python挂接到ios应用程序中的函数,并且我希望该函数的输出写入CSV文件中。我该怎么办?

Python脚本:

import frida, sys

script = 'script.js'
bundle = 'application'
f = open(script, "r")
s = f.read()

device = frida.get_usb_device(1000)
pid = device.spawn([bundle])
session = device.attach(pid)
script = session.create_script(s)
script.load()
device.resume(pid)
sys.stdin.read()

script.js

Interceptor.attach(intercept.implementation, {
        onEnter: function (args) {
            var instance = ObjC.chooseSync(ObjC.classes.CLASS)[0];
            send(instance.toString());
            }
        },

当前,我的脚本仅在我拦截该函数后才能控制台注销这些值。有什么方法可以将值返回给python,以便可以将它们写入CSV文件?

2 个答案:

答案 0 :(得分:2)

在JavaScript端使用send

在python端

f = open('/tmp/log', 'w')    
# ...
def on_message(msg, _data):
    f.write(msg['payload'] + '\n')
# ...
script.on('message', on_message)
# don't forget f.close()

答案 1 :(得分:1)

是的,有办法。您可以更改用于处理javascript中send()函数的on_message()函数。

即python中的默认on_message:

def on_message(message, data):
    if message['type'] == 'send':
        print("[* ] + message)

.... 


device = frida.get_usb_device()
pid = device.spawn(["pgk"])
session = device.attach(pid)

script = open("filepath")

drop = session.create_script(script.read())
drop.on('message', on_message)
drop.load()
time.sleep(1)  # fails without this sleep
device.resume(pid)
sys.stdin.read()

您只需在JavaScript中调用

send(“方法已调用”)//与仅通过frida处理的控制台日志相同

您可以在此处找到此文档:

https://frida.re/docs/messages/

相关问题