Java TypeError:无法读取属性';超载';未定义的定义(frida)
我试图在gha类中钩住m6517方法:Java TypeError:无法读取属性';超载';未定义的定义(frida),java,android,hook,frida,Java,Android,Hook,Frida,我试图在gha类中钩住m6517方法: package o; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; public class gha { private static byte[] f4427 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".g
package o;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
public class gha {
private static byte[] f4427 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".getBytes();
static {
Package packageR = gha.class.getPackage();
if (packageR != null) {
packageR.getName();
}
}
/* renamed from: ı reason: contains not printable characters */
public static String m6517(byte[] bArr) {
int i;
int length = bArr.length;
byte[] bArr2 = new byte[(((length + 2) / 3) << 2)];
int i2 = 0;
while (i2 < length) {
int i3 = i2;
int i4 = 0;
while (true) {
i = i2 + 3;
if (i3 >= i) {
break;
}
i4 <<= 8;
if (i3 < length) {
i4 |= bArr[i3] & 255;
}
i3++;
}
int i5 = (i2 / 3) << 2;
byte[] bArr3 = f4427;
bArr2[i5] = bArr3[(i4 >> 18) & 63];
bArr2[i5 + 1] = bArr3[(i4 >> 12) & 63];
byte b = 61;
bArr2[i5 + 2] = i2 + 1 < length ? bArr3[(i4 >> 6) & 63] : 61;
int i6 = i5 + 3;
if (i2 + 2 < length) {
b = f4427[i4 & 63];
}
bArr2[i6] = b;
i2 = i;
}
return new String(bArr2);
}
}
Java.perform(function () {
var hash = Java.use("o.gha");
hash.m6517.overload().implementation = function(str){
console.log('original: ' + str);
console.log('hashed: ' + hash.m6517(str));
return hash.m6517(str);
}
});
我应该如何解决这个问题?
stackoverflow通知我应该添加更多细节)嗯,它看起来有点像base64,但这不是你想要的 您需要传递方法的签名
m6517
接收字节数组[
表示smali中的数组,B
表示字节数组
hash.m6517.重载('[B')。实现=函数(str){
...
顺便说一句,如果您想调用它(它是静态的,所以不需要实例)来传递字节数组使用
m6517(Java.array('byte',[41,41,42,43]);
更新:
package o;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
public class gha {
private static byte[] f4427 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".getBytes();
static {
Package packageR = gha.class.getPackage();
if (packageR != null) {
packageR.getName();
}
}
/* renamed from: ı reason: contains not printable characters */
public static String m6517(byte[] bArr) {
int i;
int length = bArr.length;
byte[] bArr2 = new byte[(((length + 2) / 3) << 2)];
int i2 = 0;
while (i2 < length) {
int i3 = i2;
int i4 = 0;
while (true) {
i = i2 + 3;
if (i3 >= i) {
break;
}
i4 <<= 8;
if (i3 < length) {
i4 |= bArr[i3] & 255;
}
i3++;
}
int i5 = (i2 / 3) << 2;
byte[] bArr3 = f4427;
bArr2[i5] = bArr3[(i4 >> 18) & 63];
bArr2[i5 + 1] = bArr3[(i4 >> 12) & 63];
byte b = 61;
bArr2[i5 + 2] = i2 + 1 < length ? bArr3[(i4 >> 6) & 63] : 61;
int i6 = i5 + 3;
if (i2 + 2 < length) {
b = f4427[i4 & 63];
}
bArr2[i6] = b;
i2 = i;
}
return new String(bArr2);
}
}
Java.perform(function () {
var hash = Java.use("o.gha");
hash.m6517.overload().implementation = function(str){
console.log('original: ' + str);
console.log('hashed: ' + hash.m6517(str));
return hash.m6517(str);
}
});
我明白了,现在由于不可打印的字符,它被重命名了
尝试跟踪整个类或使用以下脚本输出更新
Java.use('gha').class.getDeclaredMethods().forEach(函数(方法){
var methodName=method.toString();
console.log(“方法名=“+methodName”);
试一试{
//…钩在这里
}第(e)款{
console.error(methodName,e);
}
});
它对我不起作用:(我想重载它以获得参数和结果