From 5216085de2957a671b109696e7c8751268e0b73c Mon Sep 17 00:00:00 2001 From: haxi0 Date: Tue, 5 Dec 2023 21:17:29 +0300 Subject: [PATCH] 1.2.1, removed ts checks to imrpove stability --- TipsGotTrolled.xcodeproj/project.pbxproj | 8 +-- .../UserInterfaceState.xcuserstate | Bin 35570 -> 37649 bytes TipsGotTrolled/Classes/TS.swift | 30 +---------- TipsGotTrolled/ContentView.swift | 27 ++++------ TipsGotTrolled/SBFApplication.h | 47 ++++++++++++++++++ TipsGotTrolled/TipsGotTrolledApp.swift | 3 +- ent.txt | 36 ++++++++++++++ 7 files changed, 101 insertions(+), 50 deletions(-) create mode 100644 TipsGotTrolled/SBFApplication.h create mode 100644 ent.txt diff --git a/TipsGotTrolled.xcodeproj/project.pbxproj b/TipsGotTrolled.xcodeproj/project.pbxproj index 0007f3b..e71bb62 100644 --- a/TipsGotTrolled.xcodeproj/project.pbxproj +++ b/TipsGotTrolled.xcodeproj/project.pbxproj @@ -450,7 +450,7 @@ CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_ASSET_PATHS = "\"TipsGotTrolled/Preview Content\""; - DEVELOPMENT_TEAM = 7G89J82G2A; + DEVELOPMENT_TEAM = 6X2LMXRYXS; ENABLE_PREVIEWS = YES; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_KEY_NSAppleMusicUsageDescription = "Needed to find the path to Tips.app executable."; @@ -464,7 +464,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.2; + MARKETING_VERSION = 1.2.1; PRODUCT_BUNDLE_IDENTIFIER = com.haxi0.TipsGotTrolled; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_EMIT_LOC_STRINGS = YES; @@ -481,7 +481,7 @@ CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_ASSET_PATHS = "\"TipsGotTrolled/Preview Content\""; - DEVELOPMENT_TEAM = 7G89J82G2A; + DEVELOPMENT_TEAM = 6X2LMXRYXS; ENABLE_PREVIEWS = YES; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_KEY_NSAppleMusicUsageDescription = "Needed to find the path to Tips.app executable."; @@ -495,7 +495,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.2; + MARKETING_VERSION = 1.2.1; PRODUCT_BUNDLE_IDENTIFIER = com.haxi0.TipsGotTrolled; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_EMIT_LOC_STRINGS = YES; diff --git a/TipsGotTrolled.xcodeproj/project.xcworkspace/xcuserdata/haxi0.xcuserdatad/UserInterfaceState.xcuserstate b/TipsGotTrolled.xcodeproj/project.xcworkspace/xcuserdata/haxi0.xcuserdatad/UserInterfaceState.xcuserstate index c8456ad3bed9f4bcf9ddd2e7e320e0761059229e..c35c9533bdb5981488efef898cf05ae85186b7c9 100644 GIT binary patch delta 17277 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 No$UGSdmlIY{{a(1Frxqf delta 15696 zcmaib2S8I-`*+T{JB%dEfQ�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 diff --git a/TipsGotTrolled/Classes/TS.swift b/TipsGotTrolled/Classes/TS.swift index d02b94a..b8cc5a2 100644 --- a/TipsGotTrolled/Classes/TS.swift +++ b/TipsGotTrolled/Classes/TS.swift @@ -43,35 +43,7 @@ class TS { return nil } } - // documents path finder aio - func getTipsDoc(in directory: URL) -> URL? { - let fileManager = FileManager.default - - do { - let contents = try fileManager.contentsOfDirectory(at: directory, includingPropertiesForKeys: nil, options: []) - - for url in contents { - var isDirectory: ObjCBool = false - if fileManager.fileExists(atPath: url.path, isDirectory: &isDirectory) { - if isDirectory.boolValue { - if url.lastPathComponent == "Tips" { - print(url) - return url - } else { - if let subdirectoryResult = getTipsDoc(in: url) { - return subdirectoryResult - } - } - } - } - } - } catch { - print("Error reading directory: \(error)") - } - - return nil - } - // to check if user is running on supported + // to check if user is running on supported func isiOSVersionInRange() -> Bool { let systemVersion = UIDevice.current.systemVersion let versionComponents = systemVersion.split(separator: ".").compactMap { Int($0) } diff --git a/TipsGotTrolled/ContentView.swift b/TipsGotTrolled/ContentView.swift index c27215f..2ed7e54 100644 --- a/TipsGotTrolled/ContentView.swift +++ b/TipsGotTrolled/ContentView.swift @@ -14,7 +14,7 @@ struct ContentView: View { @State var LogItems: [String.SubSequence] = { if let version = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String { let isVersionInRange = TS.shared.isiOSVersionInRange() - + if isVersionInRange { return ["Welcome to TipsGotTrolled v\(version)!", "", "Your device is supported.", "", "Please press Exploit, allow, then Change Tips", "", "by haxi0 and C22"] } else { @@ -47,11 +47,7 @@ struct ContentView: View { Button("Change Tips") { do { let documentsDirectoryURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first - let flagFilePath = "\(ts.getTipsDoc(in: URL(fileURLWithPath:"/var/mobile/Containers/Data/Application/"))!)/_trolled" - if FileManager.default.fileExists(atPath: flagFilePath) { - UIApplication.shared.alert(title: "Please delete Tips app then reinstall it before proceeding", body: "⚠️ It looks like your Tips app have been tweaked. Please, delete it from Home Screen and reinstall it from the App Store. A reboot is recommended after reinstalling the Tips app.⚠️", withButton: false) - return - } + if FileManager.default.fileExists(atPath: documentsDirectoryURL!.appendingPathComponent("Tips").path) { do { try AbsoluteSolver.delete(at: documentsDirectoryURL!.appendingPathComponent("Tips")) @@ -59,18 +55,17 @@ struct ContentView: View { UIApplication.shared.alert(title: "Error", body: "Error: \(error)") } } - + try AbsoluteSolver.copy(at: URL(fileURLWithPath: ts.getTipsPath()!), to: documentsDirectoryURL!.appendingPathComponent("Tips")) // backup previous binary just in case try MacDirtyCow.overwriteFileWithDataImpl(originPath: ts.getTipsPath()!, replacementData: Data(contentsOf: Bundle.main.url(forResource: "PersistenceHelper_Embedded", withExtension: "")!)) - FileManager.default.createFile(atPath: flagFilePath, contents: nil, attributes: nil) - - UIApplication.shared.alert(title: "Done, READ!!!", body: "⚠️ PLEASE, DO NOT LAUNCH TIPS AFTER INSTALLATION. REBOOT RIGHT NOW, THEN LAUNCH IT! DO NOT RUN Change Tips AGAIN UNLESS YOU UNINSTALLED EVERYTHING! OTHERWISE YOU MIGHT GET A SEMI-BOOTLOOP (BASED ON HAXI0'S EXPERIENCE!). AFTER TROLLSTORE IS INSTALLED AND EVERYTHING IS WORKING, YOU MAY DELETE THIS APP. ⚠️", withButton: false) + UIApplication.shared.alert(title: "Done, READ!!!", body: "⚠️ PLEASE, DO NOT LAUNCH TIPS AFTER INSTALLATION. REBOOT RIGHT NOW, THEN LAUNCH IT! ⚠️", withButton: false) } catch { UIApplication.shared.alert(title: "Error", body: "Error: \(error)") } }.disabled(!ts.isiOSVersionInRange()) + .disabled(!exploited) } header: { Label("Hijack Tips", systemImage: "hammer") } @@ -97,12 +92,12 @@ struct ContentView: View { } .padding() } - header: { - Label("Console", systemImage: "bolt") - } - footer: { - Text("Made by C22 and haxi0 with sweat and tears. TrollStore by opa334, method by Alfie. M1 and M2 are also supported.") - } + header: { + Label("Console", systemImage: "bolt") + } + footer: { + Text("Made by C22 and haxi0 with sweat and tears. TrollStore by opa334, method by Alfie. M1 and M2 are also supported.") + } } .navigationBarTitle(Text("TipsGotTrolled"), displayMode: .inline) } diff --git a/TipsGotTrolled/SBFApplication.h b/TipsGotTrolled/SBFApplication.h new file mode 100644 index 0000000..720b35e --- /dev/null +++ b/TipsGotTrolled/SBFApplication.h @@ -0,0 +1,47 @@ +/* +* This header is generated by classdump-dyld 1.0 +* on Wednesday, November 15, 2023 at 5:37:33 PM Eastern European Standard Time +* Operating System: Version 17.1 (Build 21B74) +* Image Source: /System/Library/PrivateFrameworks/SpringBoardFoundation.framework/SpringBoardFoundation +* classdump-dyld is licensed under GPLv3, Copyright © 2013-2016 by Elias Limneos. +*/ + + +@class SBSApplicationShortcutService, SBSApplicationShortcutServiceFetchResult, NSString, NSURL, NSNumber, NSArray; + +@interface SBFApplication : NSObject { + + SBSApplicationShortcutService* _applicationShortcutService; + SBSApplicationShortcutServiceFetchResult* _applicationShortcutServiceFetchResult; + double _applicationShortcutServiceFetchResultExpirationReferenceTime; + BOOL _systemOrInternalApplication; + NSString* _applicationBundleIdentifier; + NSString* _displayName; + NSURL* _bundleURL; + NSNumber* _appStoreItemID; + NSString* _applicationShortcutWidgetBundleIdentifier; + +} + +@property (nonatomic,readonly) NSString * applicationBundleIdentifier; //@synthesize applicationBundleIdentifier=_applicationBundleIdentifier - In the implementation block +@property (nonatomic,readonly) NSString * displayName; //@synthesize displayName=_displayName - In the implementation block +@property (nonatomic,readonly) NSURL * bundleURL; //@synthesize bundleURL=_bundleURL - In the implementation block +@property (getter=isSystemOrInternalApplication,nonatomic,readonly) BOOL systemOrInternalApplication; //@synthesize systemOrInternalApplication=_systemOrInternalApplication - In the implementation block +@property (nonatomic,readonly) NSNumber * appStoreItemID; //@synthesize appStoreItemID=_appStoreItemID - In the implementation block +@property (nonatomic,readonly) NSString * applicationShortcutWidgetBundleIdentifier; //@synthesize applicationShortcutWidgetBundleIdentifier=_applicationShortcutWidgetBundleIdentifier - In the implementation block +@property (nonatomic,readonly) NSArray * staticApplicationShortcutItems; +@property (nonatomic,readonly) NSArray * dynamicApplicationShortcutItems; +-(NSString *)applicationBundleIdentifier; +-(NSURL *)bundleURL; +-(id)initWithApplicationBundleIdentifier:(id)arg1 ; +-(BOOL)isSystemOrInternalApplication; +-(NSArray *)staticApplicationShortcutItems; +-(void)dealloc; +-(NSString *)applicationShortcutWidgetBundleIdentifier; +-(id)init; +-(NSNumber *)appStoreItemID; +-(NSString *)displayName; +-(NSArray *)dynamicApplicationShortcutItems; +-(void)_updateApplicationShortcutServiceFetchResult; +@end + diff --git a/TipsGotTrolled/TipsGotTrolledApp.swift b/TipsGotTrolled/TipsGotTrolledApp.swift index bd94150..db340a6 100644 --- a/TipsGotTrolled/TipsGotTrolledApp.swift +++ b/TipsGotTrolled/TipsGotTrolledApp.swift @@ -10,13 +10,14 @@ import SwiftUI @main struct TipsGotTrolledApp: App { @AppStorage("isFirstLaunch") var isFirstLaunch: Bool = true + var body: some Scene { WindowGroup { ContentView() // when content view is loaded let's say user to delete Tips .onAppear { if isFirstLaunch == true { - UIApplication.shared.alert(title: "Please delete Tips app then (re)install it before proceeding", body: "Hi ! It looks like it's the first time you come here. To avoid any corruption, please delete Tips app from Home Screen then reinstall it. Thanks for using this tool!", withButton: true) + UIApplication.shared.alert(title: "Please delete Tips app then (re)install it before proceeding!", body: "Hello! It looks like it's the first time you come here. To avoid any corruption, please delete Tips app from Home Screen then reinstall it. Thanks for using this tool!", withButton: true) isFirstLaunch = false } // is persistance in bundle ? diff --git a/ent.txt b/ent.txt new file mode 100644 index 0000000..647429d --- /dev/null +++ b/ent.txt @@ -0,0 +1,36 @@ + + + + + platform-application + + application-identifier + kr.h4ck.trolldecryptor + com.apple.security.exception.files.absolute-path.read-write + + / + + com.apple.private.security.no-sandbox + + com.apple.private.persona-mgmt + + com.apple.private.MobileContainerManager.allowed + + com.apple.private.security.container-manager + + com.apple.private.security.storage.AppBundles + + com.apple.private.security.storage.AppDataContainers + + task_for_pid-allow + + get-task-allow + + com.apple.security.get-task-allow + + proc_info-allow + + com.apple.system-task-ports + + +