如何在Frida JavaScript API中序列化Java.select()?

问题描述 投票:1回答:1

我对JavaScript不是很精通,因此在Frida JS API中遇到了一些麻烦。我所看到的Java.choose()是async的,也就是说,它枚举了这个类的所有实时实例。className. 然而,需要注意的是,它可以在枚举完成之前就提前返回。在我的应用程序中,我要求函数(F)调用的是 Java.choose() 只在枚举结束时返回。因为在 onMatch()我正在填充一个列表,这个列表需要在 F 返回到其调用者。谷歌说我可以使用 Promiseawait 来序列化它。以我有限的JS功底,我没能让任何一个解决方案成功。能否有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[] 列表。要做到这一点有多难?有没有更好的方法来实现?

javascript serialization frida
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和其他有用工具的框架,使动态和静态分析成为可能。

© www.soinside.com 2019 - 2024. All rights reserved.