英文:
TypeError: cannot read property 'overload' of undefined(frida)
问题
我正在尝试在gha类中挂钩m6517方法:
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();
}
}
/* 从不可打印字符中包含的原因 */
public static String m6517(byte[] bArr) {
// 方法实现
}
}
然后它会打印出:
我的挂钩:
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提醒我应该添加更多细节。
英文:
I'm trying to hook m6517 method in the gha class:
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);
}
}
stackoverflow notify me that I should add some more details))
And then it is printing me that:
MyHook:
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);
}
});
What should I do to resolve this problem?
stackoverflow notify me that I should add some more details))
答案1
得分: 1
以下是翻译好的部分:
"Well it's kinda look like base64 but that's not what ur asking for.."
这似乎有点像Base64,但这不是你要的内容。
You need to pass method's signature
你需要传递方法的签名
m6517
receives byte array [
means array in smali, and B
is byte
m6517
接收字节数组 [
表示在smali中的数组,B
表示字节
btw, if you want to invoke it (it's static so no need for an instance) to pass byte array use
顺便说一下,如果你想调用它(它是静态的,所以不需要实例)来传递字节数组,可以使用以下代码:
m6517( Java.array('byte', [ 41, 41, 42, 43 ]) );
Update:
更新:
I see now it's renamed due to non printable characters
我现在看到它由于不可打印字符而被重命名
Either try to trace entire class or updated with the following script output
要么尝试跟踪整个类,要么使用以下脚本输出进行更新:
Java.use('gha').class.getDeclaredMethods().forEach(function (method) {
var methodName = method.toString();
console.log("method name = " + methodName);
try {
// .. hook here
} catch (e) {
console.error(methodName, e);
}
});
英文:
Well it's kinda look like base64 but that's not what ur asking for..
You need to pass method's signature
m6517
receives byte array [
means array in smali, and B
is byte
hash.m6517.overload('[B').implementation = function(str){
...
btw, if you want to invoke it (it's static so no need for an instance) to pass byte array use
m6517( Java.array('byte', [ 41, 41, 42, 43 ]) );
Update:
I see now it's renamed due to non printable characters
Either try to trace entire class or updated with the following script output
Java.use('gha').class.getDeclaredMethods().forEach(function (method) {
var methodName = method.toString();
console.log("method name = " + methodName);
try {
// .. hook here
} catch (e) {
console.error(methodName, e);
}
});
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论