FRIDA-JSAPI:Java使用
Frida
- Frida.version
包含当前Frida版本信息的属性,以字符串形式表示。setImmediate(function (){ console.log(Frida.version) })
Java
-
Java.perform(fn)
确保当前线程已附加到虚拟机,并调用fn
。setImmediate(function (){ Java.perform(function (){ console.log("This is Java.perform.") }) })
-
Java.available
一个布尔值,指定当前进程是否加载了Java虚拟机,即Dalvik或ART。setImmediate(function (){ Java.perform(function (){ console.log(Java.available) }) })
-
Java.androidVersion
一个字符串,指定我们正在使用的Android版本。setImmediate(function (){ Java.perform(function (){ console.log(Java.androidVersion) }) })
-
Java.isMainThread()
确定调用者是否在主线程上运行。setImmediate(function (){ Java.perform(function (){ console.log(Java.isMainThread()) }) })
-
Java.use(className)
动态获取一个JavaScript包装器,用于className,你可以通过调用它的$new()
来实例化对象,以调用构造函数。在实例上调用$dispose()
可以显式清理它(或者等待JavaScript对象被垃圾回收,或者脚本被卸载)。静态和非静态方法都是可用的,你甚至可以替换一个方法的实现,并从中抛出异常。setImmediate(function (){ Java.perform(function (){ var Class = Java.use("className"); }) })
-
Java.cast(handle,klass)
类型转换器,给定从 Java.use() 返回的现有实例 handle 和类 klass,创建一个 JavaScript 包装器。这样的包装器还具有一个 class 属性,用于获取其类的包装器,以及一个 $className 属性,用于获取其类名的字符串表示。 -
Java.array(type, elements)
根据指定的类型创建一个包含 JavaScript 数组 elements 中元素的 Java 数组。生成的 Java 数组的行为类似于 JS 数组,但可以通过引用传递给 Java API,以便它们可以修改其内容。const values = Java.array('int', [ 1003, 1005, 1007 ]); const JString = Java.use('java.lang.String'); const str = JString.$new(Java.array('byte', [ 0x48, 0x65, 0x69 ]));
-
Java.vm
该对象有如下方法- perform(fn)
确保当前线程附加到虚拟机并调用 fn。 - getEnv()
获取当前线程的 JNIEnv 的包装器。如果当前线程未附加到虚拟机,则抛出异常。 - tryGetEnv()
尝试获取当前线程的 JNIEnv 的包装器。如果当前线程未附加到虚拟机,则返回 null。
setImmediate(function (){ Java.perform(function (){ console.log(JSON.stringify(Java.vm.tryGetEnv())) console.log(JSON.stringify(Java.vm.getEnv())) }) })
- perform(fn)
补充
setImmediate(fn)
setImmediate(fn) 的作用是立即将指定的函数 fn 放入事件队列的前面,并尽快执行,通常在当前的 JavaScript 事件循环完成后立即执行。
setImmediate(function (){
console.log("This is setImmediate.")
})
JSON.stringify()
JSON.stringify() 是 JavaScript 中的一个方法,用于将 JavaScript 对象或值转换为 JSON 字符串。