1

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

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

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_instances[]列表。完成这项工作有多难?有没有更好的方法来实现同样的目标?

4

1 回答 1

0

您可以执行以下操作

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 的结构中查看实例。我为此使用jadx。您可能还想尝试MobSF一个框架,该框架集成了 Frida 和其他有用的工具,可以进行动态和静态分析。

于 2020-05-10T00:00:24.107 回答