You've already forked ReZygisk
mirror of
https://github.com/PerformanC/ReZygisk.git
synced 2025-09-06 06:37:01 +00:00
add: GrapheneOS support (#53)
This commit adds support for devices that run GrapheneOS by hooking on JNI methods they renamed. Signed-off-by: Md Arif <111168803+sabamdarif@users.noreply.github.com>
This commit is contained in:
@@ -77,6 +77,7 @@ jintArray = JArray(jint)
|
|||||||
jstring = JType('jstring', 'Ljava/lang/String;')
|
jstring = JType('jstring', 'Ljava/lang/String;')
|
||||||
jboolean = JType('jboolean', 'Z')
|
jboolean = JType('jboolean', 'Z')
|
||||||
jlong = JType('jlong', 'J')
|
jlong = JType('jlong', 'J')
|
||||||
|
jlongArray = JArray(jlong)
|
||||||
void = JType('void', 'V')
|
void = JType('void', 'V')
|
||||||
|
|
||||||
class ForkAndSpec(JNIHook):
|
class ForkAndSpec(JNIHook):
|
||||||
@@ -210,6 +211,18 @@ server_l = ForkServer('l', [uid, gid, gids, runtime_flags, rlimits,
|
|||||||
server_samsung_q = ForkServer('samsung_q', [uid, gid, gids, runtime_flags, Anon(jint), Anon(jint), rlimits,
|
server_samsung_q = ForkServer('samsung_q', [uid, gid, gids, runtime_flags, Anon(jint), Anon(jint), rlimits,
|
||||||
permitted_capabilities, effective_capabilities])
|
permitted_capabilities, effective_capabilities])
|
||||||
|
|
||||||
|
# GrapheneOS Android 14 Support
|
||||||
|
server_grapheneos_u = ForkServer('grapheneos_u', [uid, gid, gids, runtime_flags, Anon(jint), Anon(jint), rlimits,
|
||||||
|
permitted_capabilities, effective_capabilities])
|
||||||
|
|
||||||
|
fas_grapheneos_u = ForkAndSpec('grapheneos_u', [uid, gid, gids, runtime_flags, rlimits, mount_external,
|
||||||
|
se_info, nice_name, fds_to_close, fds_to_ignore, is_child_zygote, instruction_set, app_data_dir,
|
||||||
|
is_top_app, pkg_data_info_list, whitelisted_data_info_list, mount_data_dirs, mount_storage_dirs, mount_sysprop_overrides, Anon(jlongArray)])
|
||||||
|
|
||||||
|
spec_grapheneos_u = SpecApp('grapheneos_u', [uid, gid, gids, runtime_flags, rlimits, mount_external,
|
||||||
|
se_info, nice_name, is_child_zygote, instruction_set, app_data_dir, is_top_app, pkg_data_info_list,
|
||||||
|
whitelisted_data_info_list, mount_data_dirs, mount_storage_dirs, mount_sysprop_overrides, Anon(jlongArray)])
|
||||||
|
|
||||||
hook_map = {}
|
hook_map = {}
|
||||||
|
|
||||||
def gen_jni_def(clz, methods):
|
def gen_jni_def(clz, methods):
|
||||||
@@ -245,13 +258,13 @@ with open('jni_hooks.hpp', 'w') as f:
|
|||||||
|
|
||||||
zygote = 'com/android/internal/os/Zygote'
|
zygote = 'com/android/internal/os/Zygote'
|
||||||
|
|
||||||
methods = [fas_l, fas_o, fas_p, fas_q_alt, fas_r, fas_u, fas_samsung_m, fas_samsung_n, fas_samsung_o, fas_samsung_p]
|
methods = [fas_l, fas_o, fas_p, fas_q_alt, fas_r, fas_u, fas_samsung_m, fas_samsung_n, fas_samsung_o, fas_samsung_p, fas_grapheneos_u]
|
||||||
f.write(gen_jni_def(zygote, methods))
|
f.write(gen_jni_def(zygote, methods))
|
||||||
|
|
||||||
methods = [spec_q, spec_q_alt, spec_r, spec_u, spec_samsung_q]
|
methods = [spec_q, spec_q_alt, spec_r, spec_u, spec_samsung_q, spec_grapheneos_u]
|
||||||
f.write(gen_jni_def(zygote, methods))
|
f.write(gen_jni_def(zygote, methods))
|
||||||
|
|
||||||
methods = [server_l, server_samsung_q]
|
methods = [server_l, server_samsung_q, server_grapheneos_u]
|
||||||
f.write(gen_jni_def(zygote, methods))
|
f.write(gen_jni_def(zygote, methods))
|
||||||
|
|
||||||
f.write('\n} // namespace\n')
|
f.write('\n} // namespace\n')
|
||||||
|
|||||||
@@ -127,6 +127,24 @@ void *nativeForkAndSpecialize_orig = nullptr;
|
|||||||
ctx.nativeForkAndSpecialize_post();
|
ctx.nativeForkAndSpecialize_post();
|
||||||
return ctx.pid;
|
return ctx.pid;
|
||||||
}
|
}
|
||||||
|
[[clang::no_stack_protector]] jint nativeForkAndSpecialize_grapheneos_u(JNIEnv *env, jclass clazz, jint uid, jint gid, jintArray gids, jint runtime_flags, jobjectArray rlimits, jint mount_external, jstring se_info, jstring nice_name, jintArray fds_to_close, jintArray fds_to_ignore, jboolean is_child_zygote, jstring instruction_set, jstring app_data_dir, jboolean is_top_app, jobjectArray pkg_data_info_list, jobjectArray whitelisted_data_info_list, jboolean mount_data_dirs, jboolean mount_storage_dirs, jboolean mount_sysprop_overrides, jlongArray _15) {
|
||||||
|
AppSpecializeArgs_v5 args(uid, gid, gids, runtime_flags, rlimits, mount_external, se_info, nice_name, instruction_set, app_data_dir);
|
||||||
|
args.fds_to_ignore = &fds_to_ignore;
|
||||||
|
args.is_child_zygote = &is_child_zygote;
|
||||||
|
args.is_top_app = &is_top_app;
|
||||||
|
args.pkg_data_info_list = &pkg_data_info_list;
|
||||||
|
args.whitelisted_data_info_list = &whitelisted_data_info_list;
|
||||||
|
args.mount_data_dirs = &mount_data_dirs;
|
||||||
|
args.mount_storage_dirs = &mount_storage_dirs;
|
||||||
|
args.mount_sysprop_overrides = &mount_sysprop_overrides;
|
||||||
|
ZygiskContext ctx(env, &args);
|
||||||
|
ctx.nativeForkAndSpecialize_pre();
|
||||||
|
reinterpret_cast<decltype(&nativeForkAndSpecialize_grapheneos_u)>(nativeForkAndSpecialize_orig)(
|
||||||
|
env, clazz, uid, gid, gids, runtime_flags, rlimits, mount_external, se_info, nice_name, fds_to_close, fds_to_ignore, is_child_zygote, instruction_set, app_data_dir, is_top_app, pkg_data_info_list, whitelisted_data_info_list, mount_data_dirs, mount_storage_dirs, mount_sysprop_overrides, _15
|
||||||
|
);
|
||||||
|
ctx.nativeForkAndSpecialize_post();
|
||||||
|
return ctx.pid;
|
||||||
|
}
|
||||||
std::array nativeForkAndSpecialize_methods = {
|
std::array nativeForkAndSpecialize_methods = {
|
||||||
JNINativeMethod {
|
JNINativeMethod {
|
||||||
"nativeForkAndSpecialize",
|
"nativeForkAndSpecialize",
|
||||||
@@ -178,6 +196,11 @@ std::array nativeForkAndSpecialize_methods = {
|
|||||||
"(II[II[[IILjava/lang/String;IILjava/lang/String;[I[IZLjava/lang/String;Ljava/lang/String;)I",
|
"(II[II[[IILjava/lang/String;IILjava/lang/String;[I[IZLjava/lang/String;Ljava/lang/String;)I",
|
||||||
(void *) &nativeForkAndSpecialize_samsung_p
|
(void *) &nativeForkAndSpecialize_samsung_p
|
||||||
},
|
},
|
||||||
|
JNINativeMethod {
|
||||||
|
"nativeForkAndSpecialize",
|
||||||
|
"(II[II[[IILjava/lang/String;Ljava/lang/String;[I[IZLjava/lang/String;Ljava/lang/String;Z[Ljava/lang/String;[Ljava/lang/String;ZZZ[J)I",
|
||||||
|
(void *) &nativeForkAndSpecialize_grapheneos_u
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
void *nativeSpecializeAppProcess_orig = nullptr;
|
void *nativeSpecializeAppProcess_orig = nullptr;
|
||||||
@@ -243,6 +266,22 @@ void *nativeSpecializeAppProcess_orig = nullptr;
|
|||||||
);
|
);
|
||||||
ctx.nativeSpecializeAppProcess_post();
|
ctx.nativeSpecializeAppProcess_post();
|
||||||
}
|
}
|
||||||
|
[[clang::no_stack_protector]] void nativeSpecializeAppProcess_grapheneos_u(JNIEnv *env, jclass clazz, jint uid, jint gid, jintArray gids, jint runtime_flags, jobjectArray rlimits, jint mount_external, jstring se_info, jstring nice_name, jboolean is_child_zygote, jstring instruction_set, jstring app_data_dir, jboolean is_top_app, jobjectArray pkg_data_info_list, jobjectArray whitelisted_data_info_list, jboolean mount_data_dirs, jboolean mount_storage_dirs, jboolean mount_sysprop_overrides, jlongArray _16) {
|
||||||
|
AppSpecializeArgs_v5 args(uid, gid, gids, runtime_flags, rlimits, mount_external, se_info, nice_name, instruction_set, app_data_dir);
|
||||||
|
args.is_child_zygote = &is_child_zygote;
|
||||||
|
args.is_top_app = &is_top_app;
|
||||||
|
args.pkg_data_info_list = &pkg_data_info_list;
|
||||||
|
args.whitelisted_data_info_list = &whitelisted_data_info_list;
|
||||||
|
args.mount_data_dirs = &mount_data_dirs;
|
||||||
|
args.mount_storage_dirs = &mount_storage_dirs;
|
||||||
|
args.mount_sysprop_overrides = &mount_sysprop_overrides;
|
||||||
|
ZygiskContext ctx(env, &args);
|
||||||
|
ctx.nativeSpecializeAppProcess_pre();
|
||||||
|
reinterpret_cast<decltype(&nativeSpecializeAppProcess_grapheneos_u)>(nativeSpecializeAppProcess_orig)(
|
||||||
|
env, clazz, uid, gid, gids, runtime_flags, rlimits, mount_external, se_info, nice_name, is_child_zygote, instruction_set, app_data_dir, is_top_app, pkg_data_info_list, whitelisted_data_info_list, mount_data_dirs, mount_storage_dirs, mount_sysprop_overrides, _16
|
||||||
|
);
|
||||||
|
ctx.nativeSpecializeAppProcess_post();
|
||||||
|
}
|
||||||
std::array nativeSpecializeAppProcess_methods = {
|
std::array nativeSpecializeAppProcess_methods = {
|
||||||
JNINativeMethod {
|
JNINativeMethod {
|
||||||
"nativeSpecializeAppProcess",
|
"nativeSpecializeAppProcess",
|
||||||
@@ -269,6 +308,11 @@ std::array nativeSpecializeAppProcess_methods = {
|
|||||||
"(II[II[[IILjava/lang/String;IILjava/lang/String;ZLjava/lang/String;Ljava/lang/String;)V",
|
"(II[II[[IILjava/lang/String;IILjava/lang/String;ZLjava/lang/String;Ljava/lang/String;)V",
|
||||||
(void *) &nativeSpecializeAppProcess_samsung_q
|
(void *) &nativeSpecializeAppProcess_samsung_q
|
||||||
},
|
},
|
||||||
|
JNINativeMethod {
|
||||||
|
"nativeSpecializeAppProcess",
|
||||||
|
"(II[II[[IILjava/lang/String;Ljava/lang/String;ZLjava/lang/String;Ljava/lang/String;Z[Ljava/lang/String;[Ljava/lang/String;ZZZ[J)V",
|
||||||
|
(void *) &nativeSpecializeAppProcess_grapheneos_u
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
void *nativeForkSystemServer_orig = nullptr;
|
void *nativeForkSystemServer_orig = nullptr;
|
||||||
@@ -292,6 +336,16 @@ void *nativeForkSystemServer_orig = nullptr;
|
|||||||
ctx.nativeForkSystemServer_post();
|
ctx.nativeForkSystemServer_post();
|
||||||
return ctx.pid;
|
return ctx.pid;
|
||||||
}
|
}
|
||||||
|
[[clang::no_stack_protector]] jint nativeForkSystemServer_grapheneos_u(JNIEnv *env, jclass clazz, jint uid, jint gid, jintArray gids, jint runtime_flags, jint _13, jint _14, jobjectArray rlimits, jlong permitted_capabilities, jlong effective_capabilities) {
|
||||||
|
ServerSpecializeArgs_v1 args(uid, gid, gids, runtime_flags, permitted_capabilities, effective_capabilities);
|
||||||
|
ZygiskContext ctx(env, &args);
|
||||||
|
ctx.nativeForkSystemServer_pre();
|
||||||
|
reinterpret_cast<decltype(&nativeForkSystemServer_grapheneos_u)>(nativeForkSystemServer_orig)(
|
||||||
|
env, clazz, uid, gid, gids, runtime_flags, _13, _14, rlimits, permitted_capabilities, effective_capabilities
|
||||||
|
);
|
||||||
|
ctx.nativeForkSystemServer_post();
|
||||||
|
return ctx.pid;
|
||||||
|
}
|
||||||
std::array nativeForkSystemServer_methods = {
|
std::array nativeForkSystemServer_methods = {
|
||||||
JNINativeMethod {
|
JNINativeMethod {
|
||||||
"nativeForkSystemServer",
|
"nativeForkSystemServer",
|
||||||
@@ -303,6 +357,11 @@ std::array nativeForkSystemServer_methods = {
|
|||||||
"(II[IIII[[IJJ)I",
|
"(II[IIII[[IJJ)I",
|
||||||
(void *) &nativeForkSystemServer_samsung_q
|
(void *) &nativeForkSystemServer_samsung_q
|
||||||
},
|
},
|
||||||
|
JNINativeMethod {
|
||||||
|
"nativeForkSystemServer",
|
||||||
|
"(II[IIII[[IJJ)I",
|
||||||
|
(void *) &nativeForkSystemServer_grapheneos_u
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|||||||
Reference in New Issue
Block a user