问题,
frida 如何hook 入参bytes ,返回结果也为byte数组。java代码如下
public native byte[] byteTestFn(byte[] bytes) ;
frida 代码实现如下
//工具函数
function bytesToString(arr) {
var str = '';
arr = new Uint8Array(arr);
for (var i in arr) {
str += String.fromCharCode(arr[i]);
}
return str;
}
function hookbyteTestFn(){
var String=Java.use("java.lang.String");
var JniManager = Java.use("com.example.jnitest4.jni.JniManager");
JniManager.byteTestFn.overload("[B" ).implementation=function(bytesArgs){
var instance = String.$new(bytesArgs);
console.log("byteTestFn===机密前:"+instance);
var result= this.byteTestFn(bytesArgs);
var resultString = bytesToString(result);
console.log("byteTestFn返回值是==="+resultString);
return result;
}
}
实际操作打印结果如下:
byteTestFn===机密前:1234567890abcdefghijklmn
byteTestFn返回值是===1234567890abcdefghijklmn
总结:
frida hook时byte数组的时候用"[B"代替byte数组。