`.method public final fn()[B`
它返回一个字节数组。这是我的代码:
Java.perform(function () {
var test = Java.use("com...");
test.fn.overload().implementation = function () {
var ret = this.fn();
console.log("how to write here?");
return ret;
};
});
如何打印函数返回的
ret
变量?这是一个字节[]。我尝试了console.log
,但是它只打印一个[object],而hexdump
抱怨“期望指针”。如何打印数组?#1 楼
var ret = this.fn();
var buffer = Java.array('byte', ret);
console.log(buffer.length);
var result = "";
for(var i = 0; i < buffer.length; ++i){
result+= (String.fromCharCode(buffer[i]));
}
console.log(result);
评论
但这仅适用于具有表示可打印字符的字节值的数组。仅使用result + =(buffer [i]&0xff).toString(16);之类的十六进制表示形式打印数组会更好吗?
–罗伯特
20年5月8日,9:33
#2 楼
Frida的Java字节数组元素表示形式当前为带符号数字。因此,您的字节数组可能包含负数。我们应该编辑已接受的答案以反映这一点:var buffer = Java.array('byte', ret);
var result = "";
for(var i = 0; i < buffer.length; ++i){
result += (String.fromCharCode(buffer[i] & 0xff)); // here!!
}
console.log(result);
相关的https://stackoverflow.com/a/9609447/9304999和https://github.com/frida / frida / issues / 289
#3 楼
将字节数组转储为十六进制(仅适用于Android)如果您在Android上使用Frida,则可以使用Android内置的Apache commons编解码器Hex编码器。据我所知,所有Android版本都应包含
org.apache.commons.codec.binary.Hex
类。不幸的是,Android中可用的版本无法直接输出String,因此您还必须使用java.lang.String
类:function encodeHex(byteArray) {
const HexClass = Java.use('org.apache.commons.codec.binary.Hex');
const StringClass = Java.use('java.lang.String');
const hexChars = HexClass.encodeHex(byteArray);
return StringClass.$new(hexChars).toString();
}
评论
stackoverflow.com/a/957652/2967945应该为您工作。它可能有一个长度字段。