【问题标题】:Read value from frida hooked native method basic_string parameter从 frida 挂钩的本机方法 basic_string 参数中读取值
【发布时间】:2021-09-15 11:07:09
【问题描述】:

最近我开始使用 Frida 并使用一些本地方法。但是我对basic_string的读取值有疑问

这是我正在挂钩的方法:

这是我用来挂钩方法的 JavaScript 代码:

Interceptor.attach(Module.getExportByName('libsigning.so', '_ZN8Security4signEP7_JNIEnvP6rsa_stRKNSt6__ndk112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEE'), {
    onEnter: function (args) {
        console.log("RSA.sign()")
        console.log(Memory.readCString(args[2]))
    },
    onLeave: function (retval) {
        // simply replace the value to be returned with 0
        return retval
    }
});

在输出中我得到了!字符而不是实际值

这样做的正确方法是什么?

【问题讨论】:

标签: javascript c++ frida


【解决方案1】:

问题已使用此 frida 代码解决:

function readStdString (str) {
  const isTiny = (str.readU8() & 1) === 0;
  if (isTiny) {
    return str.add(1).readUtf8String();
  }

  return str.add(2 * Process.pointerSize).readPointer().readUtf8String();
}

来源:https://codeshare.frida.re/@oleavr/read-std-string/

最终工作代码:

Interceptor.attach(Module.getExportByName('libsigning.so', '_ZN8Security4signEP7_JNIEnvP6rsa_stRKNSt6__ndk112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEE'), {
    onEnter: function (args) {
        console.log("RSA.sign()")
        console.log(readStdString(args[2]))
    },
    onLeave: function (retval) {
        // simply replace the value to be returned with 0
        return retval
    }
});

【讨论】:

    猜你喜欢
    • 2020-07-02
    • 1970-01-01
    • 2021-09-15
    • 2020-12-11
    • 2019-10-08
    • 2020-12-17
    • 2020-09-19
    • 2017-12-05
    • 1970-01-01
    相关资源
    最近更新 更多