Skip to content

Commit

Permalink
Change to hook csops with system wide (arm64 only)
Browse files Browse the repository at this point in the history
  • Loading branch information
kok3shidoll committed Feb 23, 2024
1 parent 0ed1e6b commit 4152e96
Showing 1 changed file with 7 additions and 21 deletions.
28 changes: 7 additions & 21 deletions BaseBin/systemhook/src/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -324,11 +324,10 @@ int daemon_hook(int __nochdir, int __noclose)
return daemon(__nochdir, __noclose);
}

static void (*MSHookFunction)(void *symbol, void *replace, void **result) = NULL;
int (*csops_orig)(pid_t pid, unsigned int ops, void * useraddr, size_t usersize);
// Always set CS_VALID in csflag to avoid causing a crash when hooking a c function on arm64
int csops_hook(pid_t pid, unsigned int ops, void * useraddr, size_t usersize)
{
int rv = csops_orig(pid, ops, useraddr, usersize);
int rv = csops(pid, ops, useraddr, usersize);
if (rv) return rv;
if (ops == CS_OPS_STATUS) {
if (useraddr) {
Expand All @@ -339,10 +338,9 @@ int csops_hook(pid_t pid, unsigned int ops, void * useraddr, size_t usersize)
return rv;
}

int (*csops_audittoken_orig)(pid_t pid, unsigned int ops, void * useraddr, size_t usersize, audit_token_t * token);
int csops_audittoken_hook(pid_t pid, unsigned int ops, void * useraddr, size_t usersize, audit_token_t * token)
{
int rv = csops_audittoken_orig(pid, ops, useraddr, usersize, token);
int rv = csops_audittoken(pid, ops, useraddr, usersize, token);
if (rv) return rv;
if (ops == CS_OPS_STATUS) {
if (useraddr) {
Expand All @@ -353,18 +351,6 @@ int csops_audittoken_hook(pid_t pid, unsigned int ops, void * useraddr, size_t u
return rv;
}

void enable_csops_fix(void)
{
void *handle = dlopen(JBRootPath("/usr/lib/libellekit.dylib"), RTLD_NOLOAD);
if (handle) {
MSHookFunction = dlsym(handle, "MSHookFunction");
if (MSHookFunction) {
MSHookFunction((void *)csops, (void *)csops_hook, (void **)&csops_orig);
MSHookFunction((void *)csops_audittoken, (void *)csops_audittoken_hook, (void **)&csops_audittoken_orig);
}
}
}

bool shouldEnableTweaks(void)
{
if (access(JBRootPath("/basebin/.safe_mode"), F_OK) == 0) {
Expand Down Expand Up @@ -423,10 +409,6 @@ __attribute__((constructor)) static void initializer(void)
void *tweakLoaderHandle = dlopen_hook(tweakLoaderPath, RTLD_NOW);
if (tweakLoaderHandle != NULL) {
dlclose(tweakLoaderHandle);
#ifndef __arm64e__
// Always set CS_VALID in csflag to avoid causing a crash when hooking a c function on arm64
enable_csops_fix();
#endif
dopamine_fix_NSTask();
}
}
Expand Down Expand Up @@ -456,4 +438,8 @@ DYLD_INTERPOSE(fork_hook, fork)
DYLD_INTERPOSE(vfork_hook, vfork)
DYLD_INTERPOSE(forkpty_hook, forkpty)
DYLD_INTERPOSE(daemon_hook, daemon)
#else
/* !__arm64e__ */
DYLD_INTERPOSE(csops_hook, csops)
DYLD_INTERPOSE(csops_audittoken_hook, csops_audittoken)
#endif

0 comments on commit 4152e96

Please sign in to comment.