diff --git a/Makefile b/Makefile index bfe44e0..6c3bdfb 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ TOPTARGETS := all clean -$(TOPTARGETS): pre_build make_fastPathSign make_roothelper make_trollstore make_trollhelper make_trollhelper_package assemble_trollstore make_trollhelper_embedded build_installer15 build_installer64e +$(TOPTARGETS): pre_build make_fastPathSign make_roothelper make_trollstore make_trollhelper_embedded make_trollhelper_package assemble_trollstore build_installer15 build_installer64e pre_build: @rm -rf ./_build 2>/dev/null || true @@ -17,9 +17,6 @@ make_roothelper: make_trollstore: @$(MAKE) -C ./TrollStore FINALPACKAGE=1 $(MAKECMDGOALS) -make_trollhelper: - @$(MAKE) -C ./TrollStore FINALPACKAGE=1 $(MAKECMDGOALS) - ifneq ($(MAKECMDGOALS),clean) make_trollhelper_package: @@ -31,6 +28,11 @@ make_trollhelper_package: make_trollhelper_embedded: @$(MAKE) clean -C ./TrollHelper @$(MAKE) -C ./TrollHelper FINALPACKAGE=1 EMBEDDED_ROOT_HELPER=1 $(MAKECMDGOALS) + @cp ./TrollHelper/.theos/obj/TrollStorePersistenceHelper.app/TrollStorePersistenceHelper ./_build/PersistenceHelper_Embedded + @$(MAKE) clean -C ./TrollHelper + @$(MAKE) -C ./TrollHelper FINALPACKAGE=1 EMBEDDED_ROOT_HELPER=1 LEGACY_CT_BUG=1 $(MAKECMDGOALS) + @cp ./TrollHelper/.theos/obj/TrollStorePersistenceHelper.app/TrollStorePersistenceHelper ./_build/PersistenceHelper_Embedded_Legacy + @$(MAKE) clean -C ./TrollHelper assemble_trollstore: @cp ./RootHelper/.theos/obj/trollstorehelper ./TrollStore/.theos/obj/TrollStore.app/trollstorehelper @@ -41,7 +43,7 @@ assemble_trollstore: build_installer15: @mkdir -p ./_build/tmp15 @unzip ./Victim/InstallerVictim.ipa -d ./_build/tmp15 - @cp ./TrollHelper/.theos/obj/TrollStorePersistenceHelper.app/TrollStorePersistenceHelper ./_build/TrollStorePersistenceHelperToInject + @cp ./_build/PersistenceHelper_Embedded_Legacy ./_build/TrollStorePersistenceHelperToInject @pwnify set-cpusubtype ./_build/TrollStorePersistenceHelperToInject 1 @ldid -s -K./Victim/victim.p12 ./_build/TrollStorePersistenceHelperToInject APP_PATH=$$(find ./_build/tmp15/Payload -name "*" -depth 1) ; \ @@ -62,7 +64,7 @@ build_installer64e: APP_NAME=$$(basename $$APP_PATH) ; \ BINARY_NAME=$$(echo "$$APP_NAME" | cut -f 1 -d '.') ; \ echo $$BINARY_NAME ; \ - pwnify pwn64e ./_build/tmp64e/Payload/$$APP_NAME/$$BINARY_NAME ./TrollHelper/.theos/obj/TrollStorePersistenceHelper.app/TrollStorePersistenceHelper + pwnify pwn64e ./_build/tmp64e/Payload/$$APP_NAME/$$BINARY_NAME ./_build/PersistenceHelper_Embedded_Legacy @pushd ./_build/tmp64e ; \ zip -vrD ../../_build/TrollHelper_arm64e.ipa * ; \ popd diff --git a/RootHelper/.gitignore b/RootHelper/.gitignore new file mode 100644 index 0000000..e69de29 diff --git a/Shared/TSListControllerShared.h b/Shared/TSListControllerShared.h index f87220f..3c0abe1 100644 --- a/Shared/TSListControllerShared.h +++ b/Shared/TSListControllerShared.h @@ -5,7 +5,7 @@ @interface TSListControllerShared : PSListController - (BOOL)isTrollStore; - (NSString*)getTrollStoreVersion; -- (void)downloadTrollStoreAndDo:(void (^)(NSString* localTrollStoreTarPath))doHandler; +- (void)downloadTrollStoreAndRun:(void (^)(NSString* localTrollStoreTarPath))doHandler; - (void)installTrollStorePressed; - (void)updateTrollStorePressed; - (void)rebuildIconCachePressed; diff --git a/Shared/TSListControllerShared.m b/Shared/TSListControllerShared.m index 646db9a..de5a754 100644 --- a/Shared/TSListControllerShared.m +++ b/Shared/TSListControllerShared.m @@ -25,7 +25,7 @@ } } -- (void)downloadTrollStoreAndDo:(void (^)(NSString* localTrollStoreTarPath))doHandler +- (void)downloadTrollStoreAndRun:(void (^)(NSString* localTrollStoreTarPath))doHandler { NSURL* trollStoreURL = [NSURL URLWithString:@"https://github.com/opa334/TrollStore/releases/latest/download/TrollStore.tar"]; NSURLRequest* trollStoreRequest = [NSURLRequest requestWithURL:trollStoreURL]; @@ -59,7 +59,7 @@ [downloadTask resume]; } -- (void)_updateOrInstallTrollStore:(BOOL)update +- (void)_installTrollStoreComingFromUpdateFlow:(BOOL)update { if(update) { @@ -70,7 +70,7 @@ [TSPresentationDelegate startActivity:@"Installing TrollStore"]; } - [self downloadTrollStoreAndDo:^(NSString* tmpTarPath) + [self downloadTrollStoreAndRun:^(NSString* tmpTarPath) { int ret = spawnRoot(rootHelperPath(), @[@"install-trollstore", tmpTarPath], nil, nil); [[NSFileManager defaultManager] removeItemAtPath:tmpTarPath error:nil]; @@ -112,12 +112,12 @@ - (void)installTrollStorePressed { - [self _updateOrInstallTrollStore:NO]; + [self _installTrollStoreComingFromUpdateFlow:NO]; } - (void)updateTrollStorePressed { - [self _updateOrInstallTrollStore:YES]; + [self _installTrollStoreComingFromUpdateFlow:YES]; } - (void)rebuildIconCachePressed diff --git a/Shared/TSUtil.h b/Shared/TSUtil.h index 6bc0888..0ead96c 100644 --- a/Shared/TSUtil.h +++ b/Shared/TSUtil.h @@ -4,7 +4,7 @@ #define TrollStoreErrorDomain @"TrollStoreErrorDomain" extern void chineseWifiFixup(void); -extern NSString* safe_getExecutablePath(); +extern NSString *getExecutablePath(void); extern NSString* rootHelperPath(void); extern NSString* getNSStringFromFile(int fd); extern void printMultilineNSString(NSString* stringToPrint); diff --git a/Shared/TSUtil.m b/Shared/TSUtil.m index ebce503..9058b9c 100644 --- a/Shared/TSUtil.m +++ b/Shared/TSUtil.m @@ -3,6 +3,7 @@ #import #import #import +#import @interface PSAppDataUsagePolicyCache : NSObject + (instancetype)sharedInstance; @@ -26,17 +27,18 @@ void chineseWifiFixup(void) } } -extern char*** _NSGetArgv(); -NSString* safe_getExecutablePath() +NSString *getExecutablePath(void) { - char* executablePathC = **_NSGetArgv(); - return [NSString stringWithUTF8String:executablePathC]; + uint32_t len = PATH_MAX; + char selfPath[len]; + _NSGetExecutablePath(selfPath, &len); + return [NSString stringWithUTF8String:selfPath]; } #ifdef EMBEDDED_ROOT_HELPER NSString* rootHelperPath(void) { - return safe_getExecutablePath(); + return getExecutablePath(); } #else NSString* rootHelperPath(void) diff --git a/TrollHelper/Makefile b/TrollHelper/Makefile index deeb2ed..778e257 100644 --- a/TrollHelper/Makefile +++ b/TrollHelper/Makefile @@ -1,10 +1,13 @@ export EMBEDDED_ROOT_HELPER ?= 0 +export LEGACY_CT_BUG ?= 0 TARGET := iphone:clang:16.4:14.0 INSTALL_TARGET_PROCESSES = TrollStorePersistenceHelper ARCHS = arm64 +ifneq ($(LEGACY_CT_BUG),1) TARGET_CODESIGN = ../Exploits/fastPathSign/fastPathSign +endif include $(THEOS)/makefiles/common.mk @@ -14,7 +17,12 @@ TrollStorePersistenceHelper_FILES = $(wildcard *.m) $(wildcard ../Shared/*.m) TrollStorePersistenceHelper_FRAMEWORKS = UIKit CoreGraphics CoreServices TrollStorePersistenceHelper_PRIVATE_FRAMEWORKS = Preferences MobileContainerManager TrollStorePersistenceHelper_CFLAGS = -fobjc-arc -I../Shared + +ifeq ($(LEGACY_CT_BUG),1) +TrollStorePersistenceHelper_CODESIGN_FLAGS = -Sentitlements.plist -K../legacy.p12 +else TrollStorePersistenceHelper_CODESIGN_FLAGS = --entitlements entitlements.plist +endif ifeq ($(EMBEDDED_ROOT_HELPER),1) TrollStorePersistenceHelper_CFLAGS += -DEMBEDDED_ROOT_HELPER=1 diff --git a/TrollHelper/TSHRootViewController.m b/TrollHelper/TSHRootViewController.m index a46bdb5..666f555 100644 --- a/TrollHelper/TSHRootViewController.m +++ b/TrollHelper/TSHRootViewController.m @@ -128,7 +128,7 @@ [_specifiers addObject:installTrollStoreSpecifier]; } - NSString* backupPath = [safe_getExecutablePath() stringByAppendingString:@"_TROLLSTORE_BACKUP"]; + NSString* backupPath = [getExecutablePath() stringByAppendingString:@"_TROLLSTORE_BACKUP"]; if([[NSFileManager defaultManager] fileExistsAtPath:backupPath]) { PSSpecifier* uninstallHelperGroupSpecifier = [PSSpecifier emptyGroupSpecifier]; diff --git a/cert.p12 b/legacy.p12 similarity index 100% rename from cert.p12 rename to legacy.p12