版权归作者所有,如有转发,请注明文章出处:https://cyrus-studio.github.io/blog/
1. 通过 ArtMethod 结构体找到 jni 方法在内存中的地址,并把寻址方法通过 rpc.exports 暴露给 Python 脚本调用
jni_addr.js
let entry_point_from_jni_offset = -1;
/**
* 找到 entry_point_from_jni_ 在 ArtMethod 结构体中的偏移量(根据 Android 版本不同可能会变化)
*
* @returns {number} 返回 entry_point_from_jni_ 的偏移量,若未找到返回 -1
*/
function get_jni_offset() {
// 如果偏移量已经计算过(不为 -1),直接返回已保存的偏移量
if (entry_point_from_jni_offset !== -1) {
return entry_point_from_jni_offset;
}
// 获取 getUidForName JNI 方法的内存地址,该方法位于 "libandroid_runtime.so" 中
let native_addr = Module.findExportByName("libandroid_runtime.so", "_Z32android_os_Process_getUidForNameP7_JNIEnvP8_jobjectP8_jstring");
// console.log("native_addr:",native_addr);
// 目标类名 "android.os.Process"
let className = "android.os.Process";
// 使用 Java.use 获取该类的 Java 类对象,并访问其 Class 对象

最低0.47元/天 解锁文章
461

被折叠的 条评论
为什么被折叠?



