能力值:
( LV5,RANK:60 )
|
-
-
2 楼
最后于 2020-3-17 01:13
被endlif编辑
,原因:
|
能力值:
( LV8,RANK:130 )
|
-
-
3 楼
不知道
|
能力值:
( LV11,RANK:190 )
|
-
-
4 楼
return写在Java.perform的回调里了 所以函数sign没有返回值, 要改的话是这样:
sign: function(path,key1,value1,key2,value2) {
var result = undefined;
Java.perform(function() {
var Makeurl = Java.use("com.xxx.lib.http.MakeUrlClient");
var context = Java.use('android.app.ActivityThread').currentApplication().getApplicationContext();
console.log(context);
console.log(Makeurl);
result = Makeurl.b(context,path,key1,value1,key2,value2,0,1);
});
while(result === undefined);
return result;
}
不过推荐使用Promise:
sign: function(path,key1,value1,key2,value2) {
return new Promise(resolve => {
Java.perform(() => {
var Makeurl = Java.use("com.xxx.lib.http.MakeUrlClient");
var context = Java.use('android.app.ActivityThread').currentApplication().getApplicationContext();
console.log(context);
console.log(Makeurl);
result = Makeurl.b(context,path,key1,value1,key2,value2,0,1);
resolve(result);
});
})
}
外部使用await sign(...) 或 sign(...).then(...) 要使用await, 箭头函数等语法的话需要使用frida-compile, 或者配置frida使用v8引擎.
|
能力值:
( LV3,RANK:20 )
|
-
-
5 楼
fatykrch
return写在Java.perform的回调里了 所以函数sign没有返回值, 要改的话是这样:
sign: function(path,key1,value1,key2,value2 ...
谢谢大佬 我用的python调用,试了你的第一种方法,但是result一直是undefined,是因为Makeurl.b这个方法没有调用成功吗,我一直纠结是不是调用方式错了,没遇见过这种相同名字的方法调用
|
能力值:
( LV11,RANK:190 )
|
-
-
6 楼
frida本身应该可以自动判断, 转换参数并调用对应函数的, 实在想指定哪个同名函数可以试试函数.overload(参数类型)(参数) , 在这里应该是Makeurl.b.overload('android.content.Context','java.lang.String','java.lang.String[]','java.lang.String[]','java.lang.String[]','java.lang.String[]','int','int')(context,path,key1,value1,key2,value2,0,1)
如果像下面这样写 不会输出undefined或者什么错误信息的话可能还是我的方法写错了, 你再试试用别的方式把result传出去, 比如send之类的
try {
result = Makeurl.b(context,path,key1,value1,key2,value2,0,1);
console.log(result);
}
catch(e) {
console.log(e.stack);
}
最后于 2020-3-17 16:36
被fatykrch编辑
,原因:
|
能力值:
( LV11,RANK:190 )
|
-
-
7 楼
也有可能因为key1,value1,key2,value2都是`java.lang.String[]`类型的, 传给Makeurl.b之前需要用Java.array转换一下.
|
能力值:
( LV3,RANK:20 )
|
-
-
8 楼
很感谢大佬,我打印了下错误,最开始报错Error: b: cannot call instance method without an instance 后来我指定了一下Makeurl.b.overload('android.content.Context', 'java.lang.String', '[Ljava.lang.String;', '[Ljava.lang.String;', '[Ljava.lang.String;', '[Ljava.lang.String;', 'int', 'int')(context,path,key1,value1,key2,value2,0,1) 结果报这个错误TypeError: cannot read property '$handle' of undefined 用楼下大佬说的Java.choose 解决了
最后于 2020-3-17 20:55
被nws0507编辑
,原因:
|
能力值:
( LV1,RANK:0 )
|
-
-
9 楼
Makeurl.b不是静态方法,需要有对象才能调用,先用Java.choose找个对象吧( 或者看看构造函数$new一个 或者从其它用到Makeurl的地方下hook偷一个(
|
能力值:
( LV3,RANK:20 )
|
-
-
10 楼
okeNer
Makeurl.b不是静态方法,需要有对象才能调用,先用Java.choose找个对象吧(
或者看看构造函数$new一个
或者从其它用到Makeurl的地方下hook偷一个(
谢谢老哥指点了,用Java.choose解决了
|
能力值:
( LV1,RANK:0 )
|
-
-
11 楼
nws0507
谢谢老哥指点了,用Java.choose解决了
博主,java choose怎么使用啊
|
能力值:
( LV3,RANK:20 )
|
-
-
12 楼
你可以看看文档 我也是一知半解
|
能力值:
( LV1,RANK:0 )
|
-
-
13 楼
您好,我也遇到你的这个问题。需要远程调用的函数有多个重载,但是我不知道怎么弄这个重载。不管重载直接远程调用这个函数成功了,但是函数的返回值不正确。想请教一下你的这个具体是怎么弄,能不能把成功的代码发出来参考一下。 我的是这样的 var val = null
rpc.exports = {
myfunc: function(x){
Java.perform(function () {
console.log("脚本加载");
console.log("original arg:" + x );
var p = Java.use("c.c.l"); //找到一个类的对象
console.log("找到一个p实例"+ p);
val = p.a(x).toString();
//这个函数a 有多个重载。我想调用的是这个: public static String a(String arg5) { };
//由于是静态函数,在这里直接用类来调用这个函数,但是获取的返回值是错误的。
//我想问一下如果要写重载,这个重载应该怎么写
console.log("return val:" + val);
});
return val;
}
}
|
能力值:
( LV2,RANK:10 )
|
-
-
14 楼
八月新风
您好,我也遇到你的这个问题。需要远程调用的函数有多个重载,但是我不知道怎么弄这个重载。不管重载直接远程调用这个函数成功了,但是函数的返回值不正确。想请教一下你的这个具体是怎么弄,能不能把成功的代码发出 ...
看看你的参数类型正确不,重载就是看参数类型,string 参数,你传进去一个int就会出错。
|
能力值:
( LV1,RANK:0 )
|
-
-
15 楼
Kris777
看看你的参数类型正确不,重载就是看参数类型,string 参数,你传进去一个int就会出错。
您好,我传入的参数是string类型的,我并没有处理重载,好像frida会自动根据参数类型匹配函数,然后调用。 我在js脚本中查看我传入的参数是一个string类型的,说明我的参数并没有错。 但是我hook了需要调用的函数,发现在函数里面这个参数不是我传入的字符串。 可以看到,在正常调用a 函数的时候,函数的参数是一个字符串 “S_P@[”,正常的返回值为 “alarm” 但是通过rpc调用的时候,却不是字符串了 而是一个string的类,导致函数输出失败,函数的输出和输入一致,还是 “S_P@[”。 大致就是这么个问题
|
|
|