微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从 frida 挂钩的本地方法 basic_string 参数中读取值

如何解决从 frida 挂钩的本地方法 basic_string 参数中读取值

最近我开始使用 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
    }
});

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

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

解决方法

问题已使用此 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
    }
});

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。