美文网首页
Frida Javascript api #Console 与

Frida Javascript api #Console 与

作者: 邓超_码农加点中 | 来源:发表于2020-02-11 21:45 被阅读0次

原文链接: https://frida.re/docs/javascript-api/#console
欢迎加入 Frida 交流群: 1049977261

console

  • console.log(line), console.warn(line), console.error(line):
    line 写入到你的 Frida 应用的控制台. 具体的行为取决于 frida-core 在哪里被集成.
    例如, 使用 frida-python 时, 它输出到 stdout 或者 stderr, 使用 frida-qml 时则是 qDebug, 等等.
    参数中包含的 ArrayBuffer 对象将被 hexdump 以默认选项输出的结果替代.

rpc

  • rpc.exports: 一个可以替换或者插入的空对象以便给你的应用暴露 RPC 风格的 API. 键指定方法的名称, 值则是你导出的方法.
    被导出的方法可以立即返回一个值给调用方, 也可以返回一个 Promise 对象以便异步执行.

例如:

rpc.exports = {
  add: function (a, b) {
    return a + b;
  },
  sub: function (a, b) {
    return new Promise(function (resolve) {
      setTimeout(function () {
        resolve(a - b);
      }, 100);
    });
  }
};

对于使用 Node.js 绑定物的应用, 这个 api 可以被这样使用:

const frida = require('frida');
const fs = require('fs');
const path = require('path');
const util = require('util');

const readFile = util.promisify(fs.readFile);

let session, script;
async function run() {
  const source = await readFile(path.join(__dirname, '_agent.js'), 'utf8');
  session = await frida.attach('iTunes');
  script = await session.createScript(source);
  script.message.connect(onMessage);
  await script.load();
  console.log(await script.exports.add(2, 3));
  console.log(await script.exports.sub(5, 3));
}

run().catch(onError);

function onError(error) {
  console.error(error.stack);
}

function onMessage(message, data) {
  if (message.type === 'send') {
    console.log(message.payload);
  } else if (message.type === 'error') {
    console.error(message.stack);
  }
}

Python 版本也很相似:

import codecs
import frida

def on_message(message, data):
    if message['type'] == 'send':
        print(message['payload'])
    elif message['type'] == 'error':
        print(message['stack'])

session = frida.attach('iTunes')
with codecs.open('./agent.js', 'r', 'utf-8') as f:
    source = f.read()
script = session.create_script(source)
script.on('message', on_message)
script.load()
print(script.exports.add(2, 3))
print(script.exports.sub(5, 3))
session.detach()

上面的例子中我们使用了 script.on('message', on_message) 来监听被注入进程中发来的消息.
另外还有很多其他的通知可以让你观察 scriptsession 对象.
如果你想在进程退出时被通知, 可以使用 session.on('detached', your_function).

相关文章

网友评论

      本文标题:Frida Javascript api #Console 与

      本文链接:https://www.haomeiwen.com/subject/kueffhtx.html