Skip to content

Commit f1c96c9

Browse files
committed
feat(zygisk): add grapheneos support
1 parent 8534f93 commit f1c96c9

File tree

2 files changed

+67
-13
lines changed

2 files changed

+67
-13
lines changed

native/src/core/zygisk/gen_jni_hooks.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ def ind(i):
7777
jstring = JType('jstring', 'Ljava/lang/String;')
7878
jboolean = JType('jboolean', 'Z')
7979
jlong = JType('jlong', 'J')
80+
jlongArray = JArray(jlong)
8081
void = JType('void', 'V')
8182

8283
class ForkAndSpec(JNIHook):
@@ -187,6 +188,11 @@ def init_args(self):
187188
se_info, Anon(jint), Anon(jint), nice_name, fds_to_close, fds_to_ignore, is_child_zygote,
188189
instruction_set, app_data_dir])
189190

191+
fas_grapheneos_u = ForkAndSpec('grapheneos_u', [uid, gid, gids, runtime_flags, rlimits, mount_external,
192+
se_info, nice_name, fds_to_close, fds_to_ignore, is_child_zygote, instruction_set, app_data_dir,
193+
is_top_app, pkg_data_info_list, whitelisted_data_info_list, mount_data_dirs, mount_storage_dirs,
194+
mount_sysprop_overrides, Anon(jlongArray)])
195+
190196
spec_q = SpecApp('q', [uid, gid, gids, runtime_flags, rlimits, mount_external, se_info,
191197
nice_name, is_child_zygote, instruction_set, app_data_dir])
192198

@@ -204,6 +210,10 @@ def init_args(self):
204210
spec_samsung_q = SpecApp('samsung_q', [uid, gid, gids, runtime_flags, rlimits, mount_external,
205211
se_info, Anon(jint), Anon(jint), nice_name, is_child_zygote, instruction_set, app_data_dir])
206212

213+
spec_grapheneos_u = SpecApp('grapheneos_u', [uid, gid, gids, runtime_flags, rlimits, mount_external,
214+
se_info, nice_name, is_child_zygote, instruction_set, app_data_dir, is_top_app, pkg_data_info_list,
215+
whitelisted_data_info_list, mount_data_dirs, mount_storage_dirs, mount_sysprop_overrides, Anon(jlongArray)])
216+
207217
server_l = ForkServer('l', [uid, gid, gids, runtime_flags, rlimits,
208218
permitted_capabilities, effective_capabilities])
209219

@@ -233,6 +243,8 @@ def gen_jni_def(name, methods):
233243

234244
f.write(gen_jni_def('zygote', [
235245
fas_l, fas_o, fas_p, fas_q_alt, fas_r, fas_u, fas_samsung_m, fas_samsung_n, fas_samsung_o,
236-
fas_samsung_p, spec_q, spec_q_alt, spec_r, spec_u, spec_samsung_q, server_l, server_samsung_q]))
246+
fas_samsung_p, fas_grapheneos_u, spec_q, spec_q_alt, spec_r, spec_u, spec_samsung_q,
247+
spec_grapheneos_u, server_l, server_samsung_q
248+
]))
237249

238250
f.write('\n')

native/src/core/zygisk/jni_hooks.hpp

Lines changed: 54 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
// Generated by gen_jni_hooks.py
22

3-
std::array<JNINativeMethod, 17> zygote_methods = {{
3+
std::array<JNINativeMethod, 19> zygote_methods = {{
44
{
55
"nativeForkAndSpecialize",
66
"(II[II[[IILjava/lang/String;Ljava/lang/String;[ILjava/lang/String;Ljava/lang/String;)I",
@@ -165,6 +165,28 @@ std::array<JNINativeMethod, 17> zygote_methods = {{
165165
return ctx.pid;
166166
}
167167
},
168+
{
169+
"nativeForkAndSpecialize",
170+
"(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",
171+
(void *) +[] [[clang::no_stack_protector]] (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 _9) static -> jint {
172+
AppSpecializeArgs_v5 args(uid, gid, gids, runtime_flags, rlimits, mount_external, se_info, nice_name, instruction_set, app_data_dir);
173+
args.fds_to_ignore = &fds_to_ignore;
174+
args.is_child_zygote = &is_child_zygote;
175+
args.is_top_app = &is_top_app;
176+
args.pkg_data_info_list = &pkg_data_info_list;
177+
args.whitelisted_data_info_list = &whitelisted_data_info_list;
178+
args.mount_data_dirs = &mount_data_dirs;
179+
args.mount_storage_dirs = &mount_storage_dirs;
180+
args.mount_sysprop_overrides = &mount_sysprop_overrides;
181+
ZygiskContext ctx(env, &args);
182+
ctx.nativeForkAndSpecialize_pre();
183+
reinterpret_cast<jint(*)(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 _9)>(g_hook->zygote_methods[10].fnPtr)(
184+
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, _9
185+
);
186+
ctx.nativeForkAndSpecialize_post();
187+
return ctx.pid;
188+
}
189+
},
168190
{
169191
"nativeSpecializeAppProcess",
170192
"(II[II[[IILjava/lang/String;Ljava/lang/String;ZLjava/lang/String;Ljava/lang/String;)V",
@@ -173,7 +195,7 @@ std::array<JNINativeMethod, 17> zygote_methods = {{
173195
args.is_child_zygote = &is_child_zygote;
174196
ZygiskContext ctx(env, &args);
175197
ctx.nativeSpecializeAppProcess_pre();
176-
reinterpret_cast<void(*)(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)>(g_hook->zygote_methods[10].fnPtr)(
198+
reinterpret_cast<void(*)(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)>(g_hook->zygote_methods[11].fnPtr)(
177199
env, clazz, uid, gid, gids, runtime_flags, rlimits, mount_external, se_info, nice_name, is_child_zygote, instruction_set, app_data_dir
178200
);
179201
ctx.nativeSpecializeAppProcess_post();
@@ -188,7 +210,7 @@ std::array<JNINativeMethod, 17> zygote_methods = {{
188210
args.is_top_app = &is_top_app;
189211
ZygiskContext ctx(env, &args);
190212
ctx.nativeSpecializeAppProcess_pre();
191-
reinterpret_cast<void(*)(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)>(g_hook->zygote_methods[11].fnPtr)(
213+
reinterpret_cast<void(*)(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)>(g_hook->zygote_methods[12].fnPtr)(
192214
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
193215
);
194216
ctx.nativeSpecializeAppProcess_post();
@@ -207,7 +229,7 @@ std::array<JNINativeMethod, 17> zygote_methods = {{
207229
args.mount_storage_dirs = &mount_storage_dirs;
208230
ZygiskContext ctx(env, &args);
209231
ctx.nativeSpecializeAppProcess_pre();
210-
reinterpret_cast<void(*)(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)>(g_hook->zygote_methods[12].fnPtr)(
232+
reinterpret_cast<void(*)(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)>(g_hook->zygote_methods[13].fnPtr)(
211233
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
212234
);
213235
ctx.nativeSpecializeAppProcess_post();
@@ -227,7 +249,7 @@ std::array<JNINativeMethod, 17> zygote_methods = {{
227249
args.mount_sysprop_overrides = &mount_sysprop_overrides;
228250
ZygiskContext ctx(env, &args);
229251
ctx.nativeSpecializeAppProcess_pre();
230-
reinterpret_cast<void(*)(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)>(g_hook->zygote_methods[13].fnPtr)(
252+
reinterpret_cast<void(*)(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)>(g_hook->zygote_methods[14].fnPtr)(
231253
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
232254
);
233255
ctx.nativeSpecializeAppProcess_post();
@@ -236,13 +258,33 @@ std::array<JNINativeMethod, 17> zygote_methods = {{
236258
{
237259
"nativeSpecializeAppProcess",
238260
"(II[II[[IILjava/lang/String;IILjava/lang/String;ZLjava/lang/String;Ljava/lang/String;)V",
239-
(void *) +[] [[clang::no_stack_protector]] (JNIEnv *env, jclass clazz, jint uid, jint gid, jintArray gids, jint runtime_flags, jobjectArray rlimits, jint mount_external, jstring se_info, jint _9, jint _10, jstring nice_name, jboolean is_child_zygote, jstring instruction_set, jstring app_data_dir) static -> void {
261+
(void *) +[] [[clang::no_stack_protector]] (JNIEnv *env, jclass clazz, jint uid, jint gid, jintArray gids, jint runtime_flags, jobjectArray rlimits, jint mount_external, jstring se_info, jint _10, jint _11, jstring nice_name, jboolean is_child_zygote, jstring instruction_set, jstring app_data_dir) static -> void {
240262
AppSpecializeArgs_v5 args(uid, gid, gids, runtime_flags, rlimits, mount_external, se_info, nice_name, instruction_set, app_data_dir);
241263
args.is_child_zygote = &is_child_zygote;
242264
ZygiskContext ctx(env, &args);
243265
ctx.nativeSpecializeAppProcess_pre();
244-
reinterpret_cast<void(*)(JNIEnv *env, jclass clazz, jint uid, jint gid, jintArray gids, jint runtime_flags, jobjectArray rlimits, jint mount_external, jstring se_info, jint _9, jint _10, jstring nice_name, jboolean is_child_zygote, jstring instruction_set, jstring app_data_dir)>(g_hook->zygote_methods[14].fnPtr)(
245-
env, clazz, uid, gid, gids, runtime_flags, rlimits, mount_external, se_info, _9, _10, nice_name, is_child_zygote, instruction_set, app_data_dir
266+
reinterpret_cast<void(*)(JNIEnv *env, jclass clazz, jint uid, jint gid, jintArray gids, jint runtime_flags, jobjectArray rlimits, jint mount_external, jstring se_info, jint _10, jint _11, jstring nice_name, jboolean is_child_zygote, jstring instruction_set, jstring app_data_dir)>(g_hook->zygote_methods[15].fnPtr)(
267+
env, clazz, uid, gid, gids, runtime_flags, rlimits, mount_external, se_info, _10, _11, nice_name, is_child_zygote, instruction_set, app_data_dir
268+
);
269+
ctx.nativeSpecializeAppProcess_post();
270+
}
271+
},
272+
{
273+
"nativeSpecializeAppProcess",
274+
"(II[II[[IILjava/lang/String;Ljava/lang/String;ZLjava/lang/String;Ljava/lang/String;Z[Ljava/lang/String;[Ljava/lang/String;ZZZ[J)V",
275+
(void *) +[] [[clang::no_stack_protector]] (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 _12) static -> void {
276+
AppSpecializeArgs_v5 args(uid, gid, gids, runtime_flags, rlimits, mount_external, se_info, nice_name, instruction_set, app_data_dir);
277+
args.is_child_zygote = &is_child_zygote;
278+
args.is_top_app = &is_top_app;
279+
args.pkg_data_info_list = &pkg_data_info_list;
280+
args.whitelisted_data_info_list = &whitelisted_data_info_list;
281+
args.mount_data_dirs = &mount_data_dirs;
282+
args.mount_storage_dirs = &mount_storage_dirs;
283+
args.mount_sysprop_overrides = &mount_sysprop_overrides;
284+
ZygiskContext ctx(env, &args);
285+
ctx.nativeSpecializeAppProcess_pre();
286+
reinterpret_cast<void(*)(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 _12)>(g_hook->zygote_methods[16].fnPtr)(
287+
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, _12
246288
);
247289
ctx.nativeSpecializeAppProcess_post();
248290
}
@@ -254,7 +296,7 @@ std::array<JNINativeMethod, 17> zygote_methods = {{
254296
ServerSpecializeArgs_v1 args(uid, gid, gids, runtime_flags, permitted_capabilities, effective_capabilities);
255297
ZygiskContext ctx(env, &args);
256298
ctx.nativeForkSystemServer_pre();
257-
reinterpret_cast<jint(*)(JNIEnv *env, jclass clazz, jint uid, jint gid, jintArray gids, jint runtime_flags, jobjectArray rlimits, jlong permitted_capabilities, jlong effective_capabilities)>(g_hook->zygote_methods[15].fnPtr)(
299+
reinterpret_cast<jint(*)(JNIEnv *env, jclass clazz, jint uid, jint gid, jintArray gids, jint runtime_flags, jobjectArray rlimits, jlong permitted_capabilities, jlong effective_capabilities)>(g_hook->zygote_methods[17].fnPtr)(
258300
env, clazz, uid, gid, gids, runtime_flags, rlimits, permitted_capabilities, effective_capabilities
259301
);
260302
ctx.nativeForkSystemServer_post();
@@ -264,12 +306,12 @@ std::array<JNINativeMethod, 17> zygote_methods = {{
264306
{
265307
"nativeForkSystemServer",
266308
"(II[IIII[[IJJ)I",
267-
(void *) +[] [[clang::no_stack_protector]] (JNIEnv *env, jclass clazz, jint uid, jint gid, jintArray gids, jint runtime_flags, jint _11, jint _12, jobjectArray rlimits, jlong permitted_capabilities, jlong effective_capabilities) static -> jint {
309+
(void *) +[] [[clang::no_stack_protector]] (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) static -> jint {
268310
ServerSpecializeArgs_v1 args(uid, gid, gids, runtime_flags, permitted_capabilities, effective_capabilities);
269311
ZygiskContext ctx(env, &args);
270312
ctx.nativeForkSystemServer_pre();
271-
reinterpret_cast<jint(*)(JNIEnv *env, jclass clazz, jint uid, jint gid, jintArray gids, jint runtime_flags, jint _11, jint _12, jobjectArray rlimits, jlong permitted_capabilities, jlong effective_capabilities)>(g_hook->zygote_methods[16].fnPtr)(
272-
env, clazz, uid, gid, gids, runtime_flags, _11, _12, rlimits, permitted_capabilities, effective_capabilities
313+
reinterpret_cast<jint(*)(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)>(g_hook->zygote_methods[18].fnPtr)(
314+
env, clazz, uid, gid, gids, runtime_flags, _13, _14, rlimits, permitted_capabilities, effective_capabilities
273315
);
274316
ctx.nativeForkSystemServer_post();
275317
return ctx.pid;

0 commit comments

Comments
 (0)