From e9b04a4203078f1f179ee8885365627bd90681ce Mon Sep 17 00:00:00 2001 From: thiraphit7 Date: Sat, 27 Sep 2025 21:35:15 +0700 Subject: [PATCH] Refactor jailbreak detection and cleanup methods --- .../Dopamine/Jailbreak/DOEnvironmentManager.m | 95 +++++++++++-------- 1 file changed, 53 insertions(+), 42 deletions(-) diff --git a/Application/Dopamine/Jailbreak/DOEnvironmentManager.m b/Application/Dopamine/Jailbreak/DOEnvironmentManager.m index 7ab6850ff..32555ade1 100644 --- a/Application/Dopamine/Jailbreak/DOEnvironmentManager.m +++ b/Application/Dopamine/Jailbreak/DOEnvironmentManager.m @@ -7,9 +7,8 @@ #import "DOEnvironmentManager.h" -#import #import -#import +#import #import #import #import @@ -193,6 +192,20 @@ - (NSError *)ensureJailbreakRootExists return error; } */ +- (void)locateJailbreakRoot +{ + if(gSystemInfo.jailbreakInfo.rootPath) free(gSystemInfo.jailbreakInfo.rootPath); + + NSString* jbroot_path = find_jbroot(YES); + if(jbroot_path) { + gSystemInfo.jailbreakInfo.rootPath = strdup(jbroot_path.fileSystemRepresentation); + gSystemInfo.jailbreakInfo.jbrand = jbrand(); + } +} +- (NSError *)ensureJailbreakRootExists +{ + return nil; +} - (BOOL)isArm64e { @@ -219,17 +232,45 @@ - (BOOL)isInstalledThroughTrollStore dispatch_once(&onceToken, ^{ NSString* trollStoreMarkerPath = [[[NSBundle mainBundle].bundlePath stringByDeletingLastPathComponent] stringByAppendingPathComponent:@"_TrollStore"]; trollstoreInstallation = [[NSFileManager defaultManager] fileExistsAtPath:trollStoreMarkerPath]; + if(!trollstoreInstallation) { + trollStoreMarkerPath = [[[NSBundle mainBundle].bundlePath stringByDeletingLastPathComponent] stringByAppendingPathComponent:@"_TrollStoreLite"]; + trollstoreInstallation = [[NSFileManager defaultManager] fileExistsAtPath:trollStoreMarkerPath]; + } }); return trollstoreInstallation; } +- (BOOL)isOtherJailbreakActived +{ + if(access("/dev/md0", F_OK)==0) { + return YES; + } + + if(access("/dev/rmd0", F_OK)==0) { + return YES; + } + + struct statfs fs; + int sfsret = statfs("/usr/lib", &fs); + if (sfsret == 0) { + if(strcmp(fs.f_mntonname, "/usr/lib")==0) { + return YES; + } + } + + return NO; +} + - (BOOL)isJailbroken { -/************** roothide specific ***********/ - if(!jbclient_roothide_jailbroken()) + if([self isOtherJailbreakActived]) + return NO; + + if(!jbclient_get_jbroot()) + return NO; + + if(!jbclient_get_jbroot()) return NO; -/************** roothide specific ********/ - static BOOL jailbroken = NO; static dispatch_once_t onceToken; @@ -251,7 +292,7 @@ - (NSString *)jailbrokenVersion version = [NSString stringWithContentsOfFile:JBROOT_PATH(@"/basebin/.version") encoding:NSUTF8StringEncoding error:nil]; }]; }]; - return [[version componentsSeparatedByString:@"."] lastObject]; + return version; } - (BOOL)isBootstrapped @@ -318,12 +359,7 @@ - (void)respring } }]; if (r == 0) { - if (cmd_wait_for_exit(pid) != 0) { - // Fallback - [self runUnsandboxed:^{ - killall("/usr/libexec/backboardd", SIGTERM); - }]; - } + cmd_wait_for_exit(pid); } }]; } @@ -509,29 +545,6 @@ - (void)setIDownloadLoaded:(BOOL)loaded needsUnsandbox:(BOOL)needsUnsandbox } /* -- (BOOL)isFakelibMounted -{ - struct statfs fsb; - if (statfs("/usr/lib", &fsb) != 0) return NO; - return strcmp(fsb.f_mntonname, "/usr/lib") == 0; -} - -- (int)setFakelibMounted:(BOOL)mounted -{ - int r = 0; - if (mounted != [self isFakelibMounted]) { - const char *arg = mounted ? "mount" : "unmount"; - r = exec_cmd(JBROOT_PATH("/basebin/jbctl"), "internal", "fakelib", arg, NULL); - } - return r; -} - -- (int)setPrivatePrebootProtected:(BOOL)protected -{ - const char *arg = protected ? "activate" : "deactivate"; - return exec_cmd(JBROOT_PATH("/basebin/jbctl"), "internal", "protection", arg, NULL); -} - - (BOOL)isJailbreakHidden { return ![[NSFileManager defaultManager] fileExistsAtPath:@"/var/jb"]; @@ -550,18 +563,16 @@ - (void)setJailbreakHidden:(BOOL)hidden if (hidden) { if ([self isJailbroken]) { [self unregisterJailbreakApps]; - [self setPrivatePrebootProtected:NO]; - [self setFakelibMounted:NO]; - jbclient_platform_set_systemwide_domain_enabled(false); + [[NSFileManager defaultManager] removeItemAtPath:JBROOT_PATH(@"/basebin/.fakelib/systemhook.dylib") error:nil]; + carbonCopy(JBROOT_PATH(@"/basebin/.dyld.orig"), JBROOT_PATH(@"/basebin/.fakelib/dyld")); } [[NSFileManager defaultManager] removeItemAtPath:@"/var/jb" error:nil]; } else { [[NSFileManager defaultManager] createSymbolicLinkAtPath:@"/var/jb" withDestinationPath:JBROOT_PATH(@"/") error:nil]; if ([self isJailbroken]) { - jbclient_platform_set_systemwide_domain_enabled(true); - [self setFakelibMounted:YES]; - [self setPrivatePrebootProtected:YES]; + carbonCopy(JBROOT_PATH(@"/basebin/.dyld.patched"), JBROOT_PATH(@"/basebin/.fakelib/dyld")); + carbonCopy(JBROOT_PATH(@"/basebin/systemhook.dylib"), JBROOT_PATH(@"/basebin/.fakelib/systemhook.dylib")); [self refreshJailbreakApps]; } }