javascript - Läs värde från frida-hookad native-metod basic_string-parameter
Nyligen började jag använda Frida och leka med några native-metoder. Men jag har ett problem med att läsa värdet av basic_string
Här är metoden som jag hookar:
Här är JavaScript-kod som jag använder för att hooka metod:
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
}
});
I utdata får jag ! tecknet istället för verkligt värde
Vad är ett lämpligt sätt att göra detta på?
Svar #1
Problemet löstes med hjälp av denna frida-kod:
function readStdString (str) {
const isTiny = (str.readU8() & 1) === 0;
if (isTiny) {
return str.add(1).readUtf8String();
}
return str.add(2 * Process.pointerSize).readPointer().readUtf8String();
}
källa: https://codeshare.frida.re/@oleavr/read-std-string/
slutgiltig fungerande kod:
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
}
});
