Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
95 changes: 53 additions & 42 deletions Application/Dopamine/Jailbreak/DOEnvironmentManager.m
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,8 @@

#import "DOEnvironmentManager.h"

#import <sys/sysctl.h>
#import <sys/mount.h>
#import <sys/stat.h>
#import <sys/sysctl.h>
#import <mach-o/dyld.h>
#import <libgrabkernel2/libgrabkernel2.h>
#import <libjailbreak/info.h>
Expand Down Expand Up @@ -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
{
Expand All @@ -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;
Expand All @@ -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
Expand Down Expand Up @@ -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);
}
}];
}
Expand Down Expand Up @@ -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"];
Expand All @@ -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];
}
}
Expand Down