我对JavaScript不是很精通,因此在Frida JS API中遇到了一些麻烦。我所看到的Java.choose()是async的,也就是说,它枚举了这个类的所有实时实例。className
. 然而,需要注意的是,它可以在枚举完成之前就提前返回。在我的应用程序中,我要求函数(F)调用的是 Java.choose()
只在枚举结束时返回。因为在 onMatch()
我正在填充一个列表,这个列表需要在 F
返回到其调用者。谷歌说我可以使用 Promise
或 await
来序列化它。以我有限的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[]
列表。要做到这一点有多难?有没有更好的方法来实现?
你可以做如下操作
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和其他有用工具的框架,使动态和静态分析成为可能。