Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/467.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何序列化Frida JavaScript API中的Java.choose()?_Javascript_Serialization_Frida - Fatal编程技术网

如何序列化Frida JavaScript API中的Java.choose()?

如何序列化Frida JavaScript API中的Java.choose()?,javascript,serialization,frida,Javascript,Serialization,Frida,我不是很精通JavaScript,因此在FridaJSAPI中遇到了一些麻烦。我所能看到的Java.choose()是异步的;这意味着它枚举类的所有活动实例className。但是,需要注意的是,它甚至可以在枚举完成之前提前返回。在我的应用程序中,我需要函数(F)调用Java.choose()仅在枚举结束时返回。因为在onMatch()中,我正在填充一个列表,该列表需要在F返回到调用方之前完全填充。谷歌说我可以使用Promise或wait对其进行序列化。由于我有限的JS fu,我无法使任何解决方

我不是很精通JavaScript,因此在FridaJSAPI中遇到了一些麻烦。我所能看到的Java.choose()是异步的;这意味着它枚举类的所有活动实例
className
。但是,需要注意的是,它甚至可以在枚举完成之前提前返回。在我的应用程序中,我需要函数(F)调用
Java.choose()
仅在枚举结束时返回。因为在
onMatch()
中,我正在填充一个列表,该列表需要在
F
返回到调用方之前完全填充。谷歌说我可以使用
Promise
wait
对其进行序列化。由于我有限的JS fu,我无法使任何解决方案起作用。一个JS大师能进来,抛出一些片段来拯救这个可怜的灵魂吗

另外,另一个问题是,我不是功能(事件驱动?)编程背景。序列化异步函数是JS world中的最后手段吗

const getObjectInstances = function(argument){ 

    searchHeap(argument)
        .then(function(class_instances){
            console.log(class_instances);
           //return class_instances;
        })
        .catch(function(error){
            console.log("error");
        }) 
}

const searchHeap = function(cls_name){
    var class_instances = [];
    Java.choose(cls_name, {
        onMatch:function(instance){
            console.log("Found instance" + instance);
            class_instances.push(instance);
        },
        onComplete:function() {
            console.log("search done");
        }
    });
}

我想要的是
searchHeap()
仅在枚举完成时返回。否则,调用方将收到一个不完整的
class\u实例[]
列表。要做到这一点有多难?有没有更好的方法来达到同样的效果?

您只需执行以下操作即可

var class_instances;
    Java.choose(cls_name, {
        onMatch:function(instance){
            console.log("Found instance" + instance);
            class_instances = instance;
        },
        onComplete:function() {
            console.log("search done");
        }
    });

然后可以调用该类名的任何方法。例如,如果它有一个名为
status
的函数,则可以调用它
instance.status()


可以在apk的结构中查看这些实例。我用这个。您可能还想尝试一个集成了Frida和其他有用工具的框架,使动态和静态分析成为可能。

您可以执行以下操作

var class_instances;
    Java.choose(cls_name, {
        onMatch:function(instance){
            console.log("Found instance" + instance);
            class_instances = instance;
        },
        onComplete:function() {
            console.log("search done");
        }
    });

然后可以调用该类名的任何方法。例如,如果它有一个名为
status
的函数,则可以调用它
instance.status()

可以在apk的结构中查看这些实例。我用这个。您可能还想尝试一个集成了Frida和其他有用工具的框架,使动态和静态分析成为可能