Skip to content

Commit

Permalink
1.0.7
Browse files Browse the repository at this point in the history
  • Loading branch information
opa334 committed Sep 5, 2022
1 parent 8f86446 commit 4d2bfbf
Show file tree
Hide file tree
Showing 7 changed files with 32 additions and 28 deletions.
47 changes: 24 additions & 23 deletions Helper/main.m
Original file line number Diff line number Diff line change
Expand Up @@ -202,7 +202,6 @@ int runLdid(NSArray* args, NSString** output, NSString** errorOutput)

SecStaticCodeRef getStaticCodeRef(NSString *binaryPath)
{

if(binaryPath == nil)
{
return NULL;
Expand Down Expand Up @@ -233,7 +232,6 @@ SecStaticCodeRef getStaticCodeRef(NSString *binaryPath)

NSDictionary* dumpEntitlements(SecStaticCodeRef codeRef)
{

if(codeRef == NULL)
{
NSLog(@"[dumpEntitlements] attempting to dump entitlements without a StaticCodeRef");
Expand Down Expand Up @@ -295,7 +293,6 @@ SecStaticCodeRef getStaticCodeRef(NSString *binaryPath)

BOOL certificateHasDataForExtensionOID(SecCertificateRef certificate, CFStringRef oidString)
{

if(certificate == NULL || oidString == NULL)
{
NSLog(@"[certificateHasDataForExtensionOID] attempted to check null certificate or OID");
Expand All @@ -314,7 +311,6 @@ BOOL certificateHasDataForExtensionOID(SecCertificateRef certificate, CFStringRe

BOOL codeCertChainContainsFakeAppStoreExtensions(SecStaticCodeRef codeRef)
{

if(codeRef == NULL)
{
NSLog(@"[codeCertChainContainsFakeAppStoreExtensions] attempted to check cert chain of null static code object");
Expand All @@ -325,22 +321,26 @@ BOOL codeCertChainContainsFakeAppStoreExtensions(SecStaticCodeRef codeRef)
OSStatus result;

result = SecCodeCopySigningInformation(codeRef, kSecCSSigningInformation, &signingInfo);

if(result != errSecSuccess)
{
NSLog(@"[codeCertChainContainsFakeAppStoreExtensions] failed to copy signing info from static code");
return NO;
}

CFArrayRef certificates = CFDictionaryGetValue(signingInfo, kSecCodeInfoCertificates);
if(certificates == NULL || CFArrayGetCount(certificates) == 0)
{
return NO;
}

// If we match the standard Apple policy, we are signed properly, but we haven't been deliberately signed with a custom root

SecPolicyRef appleAppStorePolicy = SecPolicyCreateWithProperties(kSecPolicyAppleiPhoneApplicationSigning, NULL);

SecTrustRef trust = NULL;
SecTrustCreateWithCertificates(certificates, appleAppStorePolicy, &trust);

if(SecTrustEvaluateWithError(trust, nil))
{
CFRelease(trust);
Expand All @@ -350,7 +350,7 @@ BOOL codeCertChainContainsFakeAppStoreExtensions(SecStaticCodeRef codeRef)
NSLog(@"[codeCertChainContainsFakeAppStoreExtensions] found certificate extension, but was issued by Apple (App Store)");
return NO;
}

// We haven't matched Apple, so keep going. Is the app profile signed?

CFRelease(appleAppStorePolicy);
Expand Down Expand Up @@ -397,7 +397,7 @@ BOOL codeCertChainContainsFakeAppStoreExtensions(SecStaticCodeRef codeRef)
CFRelease(signingInfo);
return NO;
}

// Need to add our certificate chain to the anchor as it is expected to be a self-signed root
SecTrustSetAnchorCertificates(trust, certificates);

Expand All @@ -413,8 +413,6 @@ BOOL codeCertChainContainsFakeAppStoreExtensions(SecStaticCodeRef codeRef)

BOOL signApp(NSString* appPath, NSError** error)
{
if(!isLdidInstalled()) return NO;

NSDictionary* appInfoDict = [NSDictionary dictionaryWithContentsOfFile:[appPath stringByAppendingPathComponent:@"Info.plist"]];
if(!appInfoDict) return NO;

Expand All @@ -437,18 +435,21 @@ BOOL signApp(NSString* appPath, NSError** error)
}

SecStaticCodeRef codeRef = getStaticCodeRef(executablePath);
if(codeRef == NULL)
{
NSLog(@"[signApp] failed to get static code, can't derive entitlements from %@", executablePath);
return NO;
}

if(codeCertChainContainsFakeAppStoreExtensions(codeRef))
if(codeRef != NULL)
{
NSLog(@"[signApp] taking fast path for app signed using a custom root certificate (%@)", executablePath);
CFRelease(codeRef);
return YES;
if(codeCertChainContainsFakeAppStoreExtensions(codeRef))
{
NSLog(@"[signApp] taking fast path for app signed using a custom root certificate (%@)", executablePath);
CFRelease(codeRef);
return YES;
}
}
else
{
NSLog(@"[signApp] failed to get static code, can't derive entitlements from %@, continuing anways...", executablePath);
}

if(!isLdidInstalled()) return NO;

NSString* certPath = [trollStoreAppPath() stringByAppendingPathComponent:@"cert.p12"];
NSString* certArg = [@"-K" stringByAppendingPathComponent:certPath];
Expand Down Expand Up @@ -499,6 +500,7 @@ void applyPatchesToInfoDictionary(NSString* appPath)
// 170: failed to create container for app bundle
// 171: a non trollstore app with the same identifier is already installled
// 172: no info.plist found in app
// 173: app is not signed and cannot be signed because ldid not installed or didn't work
int installApp(NSString* appPath, BOOL sign, BOOL force, NSError** error)
{
NSLog(@"[installApp force = %d]", force);
Expand All @@ -510,8 +512,7 @@ int installApp(NSString* appPath, BOOL sign, BOOL force, NSError** error)

if(sign)
{
// if it fails to sign, we don't care
signApp(appPath, error);
if(!signApp(appPath, error)) return 173;
}

BOOL existed;
Expand Down
2 changes: 1 addition & 1 deletion PersistenceHelper/Resources/Info.plist
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@
<string>iPhoneOS</string>
</array>
<key>CFBundleVersion</key>
<string>1.0.6</string>
<string>1.0.7</string>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>UIDeviceFamily</key>
Expand Down
2 changes: 1 addition & 1 deletion PersistenceHelper/control
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
Package: com.opa334.trollstorehelper
Name: TrollStore Helper
Version: 1.0.6
Version: 1.0.7
Architecture: iphoneos-arm
Description: Helper app to install and manage TrollStore!
Maintainer: opa334
Expand Down
2 changes: 1 addition & 1 deletion Store/Resources/Info.plist
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@
<string>iPhoneOS</string>
</array>
<key>CFBundleVersion</key>
<string>1.0.6</string>
<string>1.0.7</string>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>UIDeviceFamily</key>
Expand Down
3 changes: 3 additions & 0 deletions Store/TSApplicationsManager.m
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,9 @@ - (NSError*)errorForCode:(int)code
case 172:
errorDescription = @"The app does not seem to contain an Info.plist";
break;
case 173:
errorDescription = @"The app is not signed with a fake CoreTrust certificate and ldid does not seem to be installed. Make sure ldid is installed in the settings tab and try again.";
break;
}

NSError* error = [NSError errorWithDomain:TrollStoreErrorDomain code:code userInfo:@{NSLocalizedDescriptionKey : errorDescription}];
Expand Down
2 changes: 1 addition & 1 deletion Store/TSSettingsListController.m
Original file line number Diff line number Diff line change
Expand Up @@ -192,7 +192,7 @@ - (NSMutableArray*)specifiers
}

PSSpecifier* otherGroupSpecifier = [PSSpecifier emptyGroupSpecifier];
[otherGroupSpecifier setProperty:[NSString stringWithFormat:@"TrollStore %@\n\n© 2022 Lars Fröder (opa334)\n\nCredits:\n@LinusHenze: CoreTrust bug\n@zhuowei: CoreTrust bug writeup and cert\n@ProcursusTeam: uicache and ldid build\n@cstar_ow: uicache\n@saurik: ldid", getTrollStoreVersion()] forKey:@"footerText"];
[otherGroupSpecifier setProperty:[NSString stringWithFormat:@"TrollStore %@\n\n© 2022 Lars Fröder (opa334)\n\nCredits:\n@LinusHenze: CoreTrust bug\n@zhuowei: CoreTrust bug writeup and cert\n@lunotech11: Some contributions\n@ProcursusTeam: uicache and ldid build\n@cstar_ow: uicache\n@saurik: ldid", getTrollStoreVersion()] forKey:@"footerText"];
[_specifiers addObject:otherGroupSpecifier];

// Uninstall TrollStore
Expand Down
2 changes: 1 addition & 1 deletion Store/control
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
Package: com.opa334.trollstore
Name: TrollStore
Version: 1.0.6
Version: 1.0.7
Architecture: iphoneos-arm
Description: An awesome application!
Maintainer: opa334
Expand Down

0 comments on commit 4d2bfbf

Please sign in to comment.