From aab29cd6422e9a842a71d1f9c2e7a71f9bf533de Mon Sep 17 00:00:00 2001 From: s0uthwest <42713499+s0uthwest@users.noreply.github.com> Date: Fri, 2 Nov 2018 05:23:36 -0700 Subject: [PATCH 01/15] updated submodules New submodules (idevicerestore, img4tool, tsschecker) can work with iOS 12 and latest devices. Thanks tihmstar for img4tool & tsschecker update. --- .gitmodules | 6 +++--- README.md | 13 +++---------- external/idevicerestore | 2 +- external/img4tool | 2 +- external/tsschecker | 2 +- 5 files changed, 9 insertions(+), 16 deletions(-) diff --git a/.gitmodules b/.gitmodules index cc305fc38..fe901c9ee 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,9 +1,9 @@ [submodule "external/img4tool"] path = external/img4tool - url = https://github.com/encounter/img4tool.git + url = https://github.com/tihmstar/img4tool.git [submodule "external/tsschecker"] path = external/tsschecker - url = https://github.com/encounter/tsschecker.git + url = https://github.com/s0uthwest/tsschecker.git [submodule "external/idevicerestore"] path = external/idevicerestore - url = https://github.com/encounter/idevicerestore.git + url = https://github.com/s0uthwest/idevicerestore.git diff --git a/README.md b/README.md index 65713c4c6..f0751ba16 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,9 @@ # futurerestore _futurerestore is a hacked up idevicerestore wrapper, which allows manually specifying SEP and Baseband for restoring_ -Latest compiled version can be found here: -(macOS & Windows) -https://github.com/encounter/futurerestore/releases - --- -# Features +## Features * Supports the following downgrade methods * Prometheus 64bit devices (generator and nonce collision mode) * Odysseus for 32bit devices @@ -55,12 +51,9 @@ To manually specify baseband/SEP: * [libplist](https://github.com/libimobiledevice/libplist) * ## Submodules Make sure these projects compile on your system (install their dependencies) - * [tsschecker](https://github.com/encounter/tsschecker) + * [tsschecker](https://github.com/s0uthwest/tsschecker) * [img4tool](https://github.com/tihmstar/img4tool) - * [idevicerestore](https://github.com/encounter/idevicerestore) - -# Building from source -See [COMPILING.md](COMPILING.md) + * [idevicerestore](https://github.com/s0uthwest/idevicerestore) --- diff --git a/external/idevicerestore b/external/idevicerestore index 396777645..b0806b2c2 160000 --- a/external/idevicerestore +++ b/external/idevicerestore @@ -1 +1 @@ -Subproject commit 39677764510f5da14a4d5357204e0cd8575dae25 +Subproject commit b0806b2c298b177f41ba9632d9fdb4db835211c1 diff --git a/external/img4tool b/external/img4tool index b3bb5040e..d908b9246 160000 --- a/external/img4tool +++ b/external/img4tool @@ -1 +1 @@ -Subproject commit b3bb5040e0defdc50ba66ace029910e48597efd8 +Subproject commit d908b92467ce783549dfbf8bb25dbe22afe074d2 diff --git a/external/tsschecker b/external/tsschecker index e2243e8d5..2d8d4074b 160000 --- a/external/tsschecker +++ b/external/tsschecker @@ -1 +1 @@ -Subproject commit e2243e8d5256f9d1ba402069f10d0e0a0cd83d57 +Subproject commit 2d8d4074bdf2cd2f2047c94f1f951f68fa54012b From 132708234c5f2600aee63acf660dbabf86676757 Mon Sep 17 00:00:00 2001 From: s0uthwest <42713499+s0uthwest@users.noreply.github.com> Date: Sat, 10 Nov 2018 08:21:30 -0800 Subject: [PATCH 02/15] updated submodules (again) --- external/idevicerestore | 2 +- external/tsschecker | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/external/idevicerestore b/external/idevicerestore index b0806b2c2..98d08b051 160000 --- a/external/idevicerestore +++ b/external/idevicerestore @@ -1 +1 @@ -Subproject commit b0806b2c298b177f41ba9632d9fdb4db835211c1 +Subproject commit 98d08b051bc5ec2221c888b363de266b6c817e5e diff --git a/external/tsschecker b/external/tsschecker index 2d8d4074b..4f069f658 160000 --- a/external/tsschecker +++ b/external/tsschecker @@ -1 +1 @@ -Subproject commit 2d8d4074bdf2cd2f2047c94f1f951f68fa54012b +Subproject commit 4f069f6587ff4771c9c3c17236d710c2f25601e8 From 940836f8cfbb2efdbd04682324e2cc8ec6d1551f Mon Sep 17 00:00:00 2001 From: s0uthwest <42713499+s0uthwest@users.noreply.github.com> Date: Sat, 10 Nov 2018 08:26:14 -0800 Subject: [PATCH 03/15] Latest changes on Xcode project --- futurerestore.xcodeproj/project.pbxproj | 79 ++++++++++++++---- .../xcshareddata/IDEWorkspaceChecks.plist | 8 ++ .../UserInterfaceState.xcuserstate | Bin 0 -> 11763 bytes .../xcschemes/xcschememanagement.plist | 14 ++++ 4 files changed, 87 insertions(+), 14 deletions(-) create mode 100644 futurerestore.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 futurerestore.xcodeproj/project.xcworkspace/xcuserdata/s0uthwest.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 futurerestore.xcodeproj/xcuserdata/s0uthwest.xcuserdatad/xcschemes/xcschememanagement.plist diff --git a/futurerestore.xcodeproj/project.pbxproj b/futurerestore.xcodeproj/project.pbxproj index c79de8748..af241accd 100644 --- a/futurerestore.xcodeproj/project.pbxproj +++ b/futurerestore.xcodeproj/project.pbxproj @@ -7,6 +7,7 @@ objects = { /* Begin PBXBuildFile section */ + 561C73F421973D740030617C /* jssy.c in Sources */ = {isa = PBXBuildFile; fileRef = 561C73F321973D740030617C /* jssy.c */; }; 878587471D89CFDC008689F0 /* main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 878587461D89CFDC008689F0 /* main.cpp */; }; 878587A71D89D56E008689F0 /* libplist.3.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 878587A61D89D56E008689F0 /* libplist.3.dylib */; }; 878587AB1D89D590008689F0 /* libimobiledevice.6.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 878587AA1D89D590008689F0 /* libimobiledevice.6.dylib */; }; @@ -14,7 +15,6 @@ 878587AF1D89D5A5008689F0 /* libcurl.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 878587AE1D89D5A5008689F0 /* libcurl.tbd */; }; 878587B71D89D637008689F0 /* libirecovery.2.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 878587B61D89D637008689F0 /* libirecovery.2.dylib */; }; 8788A6811EE8426A00138E07 /* libipatcher.0.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 8788A6801EE8426A00138E07 /* libipatcher.0.dylib */; }; - 8788A6831EE8544000138E07 /* jssy.c in Sources */ = {isa = PBXBuildFile; fileRef = 8788A6821EE8544000138E07 /* jssy.c */; }; 878E1AC51F73EB3F00B1565B /* libzip.5.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 878E1AC41F73EB3F00B1565B /* libzip.5.dylib */; }; 8799B0B21D89D99D002F4D5F /* futurerestore.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8799B0B01D89D99D002F4D5F /* futurerestore.cpp */; }; 8799B0B31D89DAE7002F4D5F /* idevicerestore.c in Sources */ = {isa = PBXBuildFile; fileRef = 8785875C1D89D1C1008689F0 /* idevicerestore.c */; settings = {COMPILER_FLAGS = "-D HAVE_CONFIG_H=1 "; }; }; @@ -57,6 +57,8 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 561C73F321973D740030617C /* jssy.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jssy.c; path = external/tsschecker/external/jssy/jssy/jssy.c; sourceTree = SOURCE_ROOT; }; + 561C73F521973D7C0030617C /* jssy.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jssy.h; path = external/tsschecker/external/jssy/jssy/jssy.h; sourceTree = SOURCE_ROOT; }; 878587431D89CFDC008689F0 /* futurerestore */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = futurerestore; sourceTree = BUILT_PRODUCTS_DIR; }; 878587461D89CFDC008689F0 /* main.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = main.cpp; sourceTree = ""; }; 8785874F1D89D1C1008689F0 /* asr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = asr.c; sourceTree = ""; }; @@ -113,15 +115,12 @@ 8785879F1D89D2BA008689F0 /* tsschecker.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tsschecker.c; sourceTree = ""; }; 878587A01D89D2BA008689F0 /* tsschecker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tsschecker.h; sourceTree = ""; }; 878587A61D89D56E008689F0 /* libplist.3.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libplist.3.dylib; path = ../../../../usr/local/lib/libplist.3.dylib; sourceTree = ""; }; - 878587A81D89D578008689F0 /* libirecovery.1.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libirecovery.1.dylib; path = ../../../../usr/local/lib/libirecovery.1.dylib; sourceTree = ""; }; 878587AA1D89D590008689F0 /* libimobiledevice.6.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libimobiledevice.6.dylib; path = ../../../../usr/local/lib/libimobiledevice.6.dylib; sourceTree = ""; }; 878587AC1D89D59E008689F0 /* libz.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; }; 878587AE1D89D5A5008689F0 /* libcurl.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libcurl.tbd; path = usr/lib/libcurl.tbd; sourceTree = SDKROOT; }; - 878587B21D89D5D5008689F0 /* libzip.4.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libzip.4.dylib; path = ../../../../usr/local/lib/libzip.4.dylib; sourceTree = ""; }; 878587B41D89D5E6008689F0 /* libpartialzip-1.0.0.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = "libpartialzip-1.0.0.dylib"; path = "../../../../usr/local/lib/libpartialzip-1.0.0.dylib"; sourceTree = ""; }; 878587B61D89D637008689F0 /* libirecovery.2.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libirecovery.2.dylib; path = ../../../../usr/local/lib/libirecovery.2.dylib; sourceTree = ""; }; 8788A6801EE8426A00138E07 /* libipatcher.0.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libipatcher.0.dylib; path = ../../../../usr/local/lib/libipatcher.0.dylib; sourceTree = ""; }; - 8788A6821EE8544000138E07 /* jssy.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jssy.c; path = external/tsschecker/external/jssy/jssy/jssy.c; sourceTree = ""; }; 878E1AC41F73EB3F00B1565B /* libzip.5.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libzip.5.dylib; path = ../../../../usr/local/Cellar/libzip/1.3.0/lib/libzip.5.dylib; sourceTree = ""; }; 8799B0B01D89D99D002F4D5F /* futurerestore.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = futurerestore.cpp; sourceTree = ""; }; 8799B0B11D89D99D002F4D5F /* futurerestore.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = futurerestore.hpp; sourceTree = ""; }; @@ -152,17 +151,23 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 561C73F221973D620030617C /* jssy */ = { + isa = PBXGroup; + children = ( + 561C73F321973D740030617C /* jssy.c */, + 561C73F521973D7C0030617C /* jssy.h */, + ); + name = jssy; + sourceTree = ""; + }; 8785873A1D89CFDC008689F0 = { isa = PBXGroup; children = ( - 8788A6821EE8544000138E07 /* jssy.c */, 878587B61D89D637008689F0 /* libirecovery.2.dylib */, 878587B41D89D5E6008689F0 /* libpartialzip-1.0.0.dylib */, - 878587B21D89D5D5008689F0 /* libzip.4.dylib */, 878587AE1D89D5A5008689F0 /* libcurl.tbd */, 878587AC1D89D59E008689F0 /* libz.tbd */, 878587AA1D89D590008689F0 /* libimobiledevice.6.dylib */, - 878587A81D89D578008689F0 /* libirecovery.1.dylib */, 878587A61D89D56E008689F0 /* libplist.3.dylib */, 878587451D89CFDC008689F0 /* futurerestore */, 878587441D89CFDC008689F0 /* Products */, @@ -193,6 +198,7 @@ 8785874D1D89D1A4008689F0 /* external */ = { isa = PBXGroup; children = ( + 561C73F221973D620030617C /* jssy */, 878587961D89D2BA008689F0 /* tsschecker */, 8785878B1D89D1ED008689F0 /* img4tool */, 8785874E1D89D1C1008689F0 /* idevicerestore */, @@ -300,6 +306,7 @@ 8785873F1D89CFDC008689F0 /* Sources */, 878587401D89CFDC008689F0 /* Frameworks */, 878587411D89CFDC008689F0 /* CopyFiles */, + 561C73F621973DC80030617C /* Version bump */, ); buildRules = ( ); @@ -316,7 +323,7 @@ 8785873B1D89CFDC008689F0 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0730; + LastUpgradeCheck = 1010; ORGANIZATIONNAME = tihmstar; TargetAttributes = { 878587421D89CFDC008689F0 = { @@ -329,7 +336,6 @@ developmentRegion = English; hasScannedForEncodings = 0; knownRegions = ( - en, ); mainGroup = 8785873A1D89CFDC008689F0; productRefGroup = 878587441D89CFDC008689F0 /* Products */; @@ -341,12 +347,33 @@ }; /* End PBXProject section */ +/* Begin PBXShellScriptBuildPhase section */ + 561C73F621973DC80030617C /* Version bump */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Version bump"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "sed -i '.bak' \"s/.*define VERSION_COMMIT_COUNT_FUTURERESTORE.*/#define VERSION_COMMIT_COUNT_FUTURERESTORE \\\"$(git rev-list --count HEAD)\\\"/\" ./futurerestore/config.h 2>/dev/null || sed -i \"s/.*VERSION_COMMIT_COUNT_FUTURERESTORE.*/#define VERSION_COMMIT_COUNT_FUTURERESTORE \\\"$(git rev-list --count HEAD)\\\"/\" ./futurerestore/config.h 2>/dev/null\nsed -i '.bak' \"s/.*define VERSION_COMMIT_SHA_FUTURERESTORE.*/#define VERSION_COMMIT_SHA_FUTURERESTORE \\\"$(git rev-parse HEAD)\\\"/\" ./futurerestore/config.h 2>/dev/null || sed -i \"s/.*VERSION_COMMIT_SHA_FUTURERESTORE.*/#define VERSION_COMMIT_SHA_FUTURERESTORE \\\"$(git rev-parse HEAD)\\\"/\" ./futurerestore/config.h 2>/dev/null\n"; + }; +/* End PBXShellScriptBuildPhase section */ + /* Begin PBXSourcesBuildPhase section */ 8785873F1D89CFDC008689F0 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 8788A6831EE8544000138E07 /* jssy.c in Sources */, + 561C73F421973D740030617C /* jssy.c in Sources */, 8799B0C11D89DB38002F4D5F /* fls.c in Sources */, 8799B0B41D89DAF6002F4D5F /* tss.c in Sources */, 8799B0C01D89DB38002F4D5F /* fdr.c in Sources */, @@ -387,13 +414,23 @@ CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_IDENTITY = "-"; @@ -431,13 +468,23 @@ CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_IDENTITY = "-"; @@ -463,13 +510,15 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = YES; - HEADER_SEARCH_PATHS = ""; + HEADER_SEARCH_PATHS = ( + /usr/local/include, + /opt/local/include, + ); LIBRARY_SEARCH_PATHS = ( /usr/local/lib, /usr/lib, /usr/local/opt/openssl/lib, "$(SDKROOT)/usr/lib/system", - /usr/local/Cellar/libzip/1.3.0/lib, ); OTHER_CFLAGS = "-DHAVE_LIBIPATCHER"; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -481,13 +530,15 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = YES; - HEADER_SEARCH_PATHS = ""; + HEADER_SEARCH_PATHS = ( + /usr/local/include, + /opt/local/include, + ); LIBRARY_SEARCH_PATHS = ( /usr/local/lib, /usr/lib, /usr/local/opt/openssl/lib, "$(SDKROOT)/usr/lib/system", - /usr/local/Cellar/libzip/1.3.0/lib, ); OTHER_CFLAGS = "-DHAVE_LIBIPATCHER"; PRODUCT_NAME = "$(TARGET_NAME)"; diff --git a/futurerestore.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/futurerestore.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 000000000..18d981003 --- /dev/null +++ b/futurerestore.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/futurerestore.xcodeproj/project.xcworkspace/xcuserdata/s0uthwest.xcuserdatad/UserInterfaceState.xcuserstate b/futurerestore.xcodeproj/project.xcworkspace/xcuserdata/s0uthwest.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..00f7d9d92816975232087813b215a7f5e307bf09 GIT binary patch literal 11763 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 literal 0 HcmV?d00001 diff --git a/futurerestore.xcodeproj/xcuserdata/s0uthwest.xcuserdatad/xcschemes/xcschememanagement.plist b/futurerestore.xcodeproj/xcuserdata/s0uthwest.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 000000000..19de8b07a --- /dev/null +++ b/futurerestore.xcodeproj/xcuserdata/s0uthwest.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,14 @@ + + + + + SchemeUserState + + futurerestore.xcscheme_^#shared#^_ + + orderHint + 0 + + + + From f49d3b9b225c77ef7ededde3b696c56e88ca63ec Mon Sep 17 00:00:00 2001 From: s0uthwest <42713499+s0uthwest@users.noreply.github.com> Date: Sat, 10 Nov 2018 08:45:32 -0800 Subject: [PATCH 04/15] Update tsschecker submodule --- external/tsschecker | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/external/tsschecker b/external/tsschecker index 4f069f658..eca8c5e5a 160000 --- a/external/tsschecker +++ b/external/tsschecker @@ -1 +1 @@ -Subproject commit 4f069f6587ff4771c9c3c17236d710c2f25601e8 +Subproject commit eca8c5e5a094439eddff99f21cf09100eaa90836 From 603a1836de827aecf78536c5e28a16e5f48bc3d8 Mon Sep 17 00:00:00 2001 From: s0uthwest <42713499+s0uthwest@users.noreply.github.com> Date: Tue, 13 Nov 2018 08:52:29 -0800 Subject: [PATCH 05/15] Actualize tsschecker submodule & Xcode depends --- LICENSE => LICENSE.txt | 0 autogen.sh | 1 - configure.ac | 4 +- external/tsschecker | 2 +- futurerestore.xcodeproj/project.pbxproj | 62 ++++++++++-------- .../UserInterfaceState.xcuserstate | Bin 11763 -> 16009 bytes 6 files changed, 38 insertions(+), 31 deletions(-) rename LICENSE => LICENSE.txt (100%) diff --git a/LICENSE b/LICENSE.txt similarity index 100% rename from LICENSE rename to LICENSE.txt diff --git a/autogen.sh b/autogen.sh index 24134441f..8c450d825 100755 --- a/autogen.sh +++ b/autogen.sh @@ -25,4 +25,3 @@ if [ -z "$NOCONFIGURE" ]; then ./configure "$@" fi ./setBuildVersion.sh - diff --git a/configure.ac b/configure.ac index 48d765825..5f582dd95 100644 --- a/configure.ac +++ b/configure.ac @@ -1,5 +1,5 @@ AC_PREREQ(2.64) -AC_INIT([futurerestore], [1.0], [https://github.com/encounter/futurerestore/issues],, [https://github.com/encounter/futurerestore]) +AC_INIT([futurerestore], [1.0], [https://github.com/s0uthwest/futurerestore/issues],, [https://github.com/s0uthwest/futurerestore]) AC_CANONICAL_SYSTEM @@ -37,7 +37,6 @@ PKG_CHECK_MODULES(libirecovery, libirecovery >= 0.2.0) AC_PROG_CC AC_PROG_CXX - # Optional module libipatcher AC_ARG_WITH([libipatcher], [AS_HELP_STRING([--without-libipatcher], @@ -81,7 +80,6 @@ Makefile futurerestore/Makefile ]) - echo " Configuration for $PACKAGE $VERSION: ------------------------------------------- diff --git a/external/tsschecker b/external/tsschecker index eca8c5e5a..63e81b7d9 160000 --- a/external/tsschecker +++ b/external/tsschecker @@ -1 +1 @@ -Subproject commit eca8c5e5a094439eddff99f21cf09100eaa90836 +Subproject commit 63e81b7d9db1d3ead8c444300a3f9fe9b1c60e8e diff --git a/futurerestore.xcodeproj/project.pbxproj b/futurerestore.xcodeproj/project.pbxproj index af241accd..444260b41 100644 --- a/futurerestore.xcodeproj/project.pbxproj +++ b/futurerestore.xcodeproj/project.pbxproj @@ -7,15 +7,18 @@ objects = { /* Begin PBXBuildFile section */ + 5604B7B9219B35EE004C22EE /* libpartialzip-1.0.0.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 5604B7B8219B35EE004C22EE /* libpartialzip-1.0.0.dylib */; }; + 5604B7BB219B35F8004C22EE /* libirecovery.2.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 5604B7BA219B35F8004C22EE /* libirecovery.2.dylib */; }; + 5604B7BD219B3602004C22EE /* liblzfse.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 5604B7BC219B3602004C22EE /* liblzfse.dylib */; }; + 5604B7BF219B3611004C22EE /* libzip.5.0.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 5604B7BE219B3610004C22EE /* libzip.5.0.dylib */; }; + 5604B7C1219B3619004C22EE /* libz.1.2.11.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 5604B7C0219B3619004C22EE /* libz.1.2.11.dylib */; }; + 5604B7C3219B3626004C22EE /* libplist.3.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 5604B7C2219B3626004C22EE /* libplist.3.dylib */; }; + 5604B7C5219B362E004C22EE /* libimobiledevice.6.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 5604B7C4219B362E004C22EE /* libimobiledevice.6.dylib */; }; + 5604B7C7219B3630004C22EE /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 5604B7C6219B3630004C22EE /* libz.tbd */; }; + 5604B7C9219B3632004C22EE /* libcurl.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 5604B7C8219B3632004C22EE /* libcurl.tbd */; }; 561C73F421973D740030617C /* jssy.c in Sources */ = {isa = PBXBuildFile; fileRef = 561C73F321973D740030617C /* jssy.c */; }; 878587471D89CFDC008689F0 /* main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 878587461D89CFDC008689F0 /* main.cpp */; }; - 878587A71D89D56E008689F0 /* libplist.3.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 878587A61D89D56E008689F0 /* libplist.3.dylib */; }; - 878587AB1D89D590008689F0 /* libimobiledevice.6.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 878587AA1D89D590008689F0 /* libimobiledevice.6.dylib */; }; - 878587AD1D89D59E008689F0 /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 878587AC1D89D59E008689F0 /* libz.tbd */; }; - 878587AF1D89D5A5008689F0 /* libcurl.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 878587AE1D89D5A5008689F0 /* libcurl.tbd */; }; - 878587B71D89D637008689F0 /* libirecovery.2.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 878587B61D89D637008689F0 /* libirecovery.2.dylib */; }; 8788A6811EE8426A00138E07 /* libipatcher.0.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 8788A6801EE8426A00138E07 /* libipatcher.0.dylib */; }; - 878E1AC51F73EB3F00B1565B /* libzip.5.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 878E1AC41F73EB3F00B1565B /* libzip.5.dylib */; }; 8799B0B21D89D99D002F4D5F /* futurerestore.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8799B0B01D89D99D002F4D5F /* futurerestore.cpp */; }; 8799B0B31D89DAE7002F4D5F /* idevicerestore.c in Sources */ = {isa = PBXBuildFile; fileRef = 8785875C1D89D1C1008689F0 /* idevicerestore.c */; settings = {COMPILER_FLAGS = "-D HAVE_CONFIG_H=1 "; }; }; 8799B0B41D89DAF6002F4D5F /* tss.c in Sources */ = {isa = PBXBuildFile; fileRef = 878587761D89D1C1008689F0 /* tss.c */; }; @@ -57,6 +60,15 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 5604B7B8219B35EE004C22EE /* libpartialzip-1.0.0.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = "libpartialzip-1.0.0.dylib"; path = "../../../../../usr/local/lib/libpartialzip-1.0.0.dylib"; sourceTree = ""; }; + 5604B7BA219B35F8004C22EE /* libirecovery.2.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libirecovery.2.dylib; path = ../../../../../usr/local/lib/libirecovery.2.dylib; sourceTree = ""; }; + 5604B7BC219B3602004C22EE /* liblzfse.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = liblzfse.dylib; path = ../../../../../usr/local/lib/liblzfse.dylib; sourceTree = ""; }; + 5604B7BE219B3610004C22EE /* libzip.5.0.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libzip.5.0.dylib; path = ../../../../../usr/local/lib/libzip.5.0.dylib; sourceTree = ""; }; + 5604B7C0219B3619004C22EE /* libz.1.2.11.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.1.2.11.dylib; path = ../../../../../usr/local/lib/libz.1.2.11.dylib; sourceTree = ""; }; + 5604B7C2219B3626004C22EE /* libplist.3.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libplist.3.dylib; path = ../../../../../usr/local/lib/libplist.3.dylib; sourceTree = ""; }; + 5604B7C4219B362E004C22EE /* libimobiledevice.6.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libimobiledevice.6.dylib; path = ../../../../../usr/local/lib/libimobiledevice.6.dylib; sourceTree = ""; }; + 5604B7C6219B3630004C22EE /* libz.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; }; + 5604B7C8219B3632004C22EE /* libcurl.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libcurl.tbd; path = usr/lib/libcurl.tbd; sourceTree = SDKROOT; }; 561C73F321973D740030617C /* jssy.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jssy.c; path = external/tsschecker/external/jssy/jssy/jssy.c; sourceTree = SOURCE_ROOT; }; 561C73F521973D7C0030617C /* jssy.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jssy.h; path = external/tsschecker/external/jssy/jssy/jssy.h; sourceTree = SOURCE_ROOT; }; 878587431D89CFDC008689F0 /* futurerestore */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = futurerestore; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -114,14 +126,7 @@ 8785879B1D89D2BA008689F0 /* jsmn.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jsmn.h; sourceTree = ""; }; 8785879F1D89D2BA008689F0 /* tsschecker.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tsschecker.c; sourceTree = ""; }; 878587A01D89D2BA008689F0 /* tsschecker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tsschecker.h; sourceTree = ""; }; - 878587A61D89D56E008689F0 /* libplist.3.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libplist.3.dylib; path = ../../../../usr/local/lib/libplist.3.dylib; sourceTree = ""; }; - 878587AA1D89D590008689F0 /* libimobiledevice.6.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libimobiledevice.6.dylib; path = ../../../../usr/local/lib/libimobiledevice.6.dylib; sourceTree = ""; }; - 878587AC1D89D59E008689F0 /* libz.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; }; - 878587AE1D89D5A5008689F0 /* libcurl.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libcurl.tbd; path = usr/lib/libcurl.tbd; sourceTree = SDKROOT; }; - 878587B41D89D5E6008689F0 /* libpartialzip-1.0.0.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = "libpartialzip-1.0.0.dylib"; path = "../../../../usr/local/lib/libpartialzip-1.0.0.dylib"; sourceTree = ""; }; - 878587B61D89D637008689F0 /* libirecovery.2.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libirecovery.2.dylib; path = ../../../../usr/local/lib/libirecovery.2.dylib; sourceTree = ""; }; 8788A6801EE8426A00138E07 /* libipatcher.0.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libipatcher.0.dylib; path = ../../../../usr/local/lib/libipatcher.0.dylib; sourceTree = ""; }; - 878E1AC41F73EB3F00B1565B /* libzip.5.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libzip.5.dylib; path = ../../../../usr/local/Cellar/libzip/1.3.0/lib/libzip.5.dylib; sourceTree = ""; }; 8799B0B01D89D99D002F4D5F /* futurerestore.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = futurerestore.cpp; sourceTree = ""; }; 8799B0B11D89D99D002F4D5F /* futurerestore.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = futurerestore.hpp; sourceTree = ""; }; 87F574C51E151D42008D5C4D /* libcrypto.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libcrypto.dylib; path = ../../../../usr/lib/libcrypto.dylib; sourceTree = ""; }; @@ -136,15 +141,18 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 878E1AC51F73EB3F00B1565B /* libzip.5.dylib in Frameworks */, - 878587AD1D89D59E008689F0 /* libz.tbd in Frameworks */, + 5604B7B9219B35EE004C22EE /* libpartialzip-1.0.0.dylib in Frameworks */, + 5604B7C3219B3626004C22EE /* libplist.3.dylib in Frameworks */, 8788A6811EE8426A00138E07 /* libipatcher.0.dylib in Frameworks */, + 5604B7C7219B3630004C22EE /* libz.tbd in Frameworks */, 87F574D01E151F44008D5C4D /* libcrypto.dylib in Frameworks */, + 5604B7BB219B35F8004C22EE /* libirecovery.2.dylib in Frameworks */, + 5604B7C1219B3619004C22EE /* libz.1.2.11.dylib in Frameworks */, + 5604B7BF219B3611004C22EE /* libzip.5.0.dylib in Frameworks */, 87F574CB1E151E97008D5C4D /* libfragmentzip.0.dylib in Frameworks */, - 878587B71D89D637008689F0 /* libirecovery.2.dylib in Frameworks */, - 878587AF1D89D5A5008689F0 /* libcurl.tbd in Frameworks */, - 878587AB1D89D590008689F0 /* libimobiledevice.6.dylib in Frameworks */, - 878587A71D89D56E008689F0 /* libplist.3.dylib in Frameworks */, + 5604B7C9219B3632004C22EE /* libcurl.tbd in Frameworks */, + 5604B7C5219B362E004C22EE /* libimobiledevice.6.dylib in Frameworks */, + 5604B7BD219B3602004C22EE /* liblzfse.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -163,12 +171,6 @@ 8785873A1D89CFDC008689F0 = { isa = PBXGroup; children = ( - 878587B61D89D637008689F0 /* libirecovery.2.dylib */, - 878587B41D89D5E6008689F0 /* libpartialzip-1.0.0.dylib */, - 878587AE1D89D5A5008689F0 /* libcurl.tbd */, - 878587AC1D89D59E008689F0 /* libz.tbd */, - 878587AA1D89D590008689F0 /* libimobiledevice.6.dylib */, - 878587A61D89D56E008689F0 /* libplist.3.dylib */, 878587451D89CFDC008689F0 /* futurerestore */, 878587441D89CFDC008689F0 /* Products */, 87F574C21E151CDE008D5C4D /* Frameworks */, @@ -285,7 +287,15 @@ 87F574C21E151CDE008D5C4D /* Frameworks */ = { isa = PBXGroup; children = ( - 878E1AC41F73EB3F00B1565B /* libzip.5.dylib */, + 5604B7C8219B3632004C22EE /* libcurl.tbd */, + 5604B7C6219B3630004C22EE /* libz.tbd */, + 5604B7BA219B35F8004C22EE /* libirecovery.2.dylib */, + 5604B7C0219B3619004C22EE /* libz.1.2.11.dylib */, + 5604B7B8219B35EE004C22EE /* libpartialzip-1.0.0.dylib */, + 5604B7C4219B362E004C22EE /* libimobiledevice.6.dylib */, + 5604B7BC219B3602004C22EE /* liblzfse.dylib */, + 5604B7C2219B3626004C22EE /* libplist.3.dylib */, + 5604B7BE219B3610004C22EE /* libzip.5.0.dylib */, 8788A6801EE8426A00138E07 /* libipatcher.0.dylib */, 87F574CE1E151F11008D5C4D /* libSystem.tbd */, 87F574CC1E151EF8008D5C4D /* libcorecrypto.tbd */, diff --git a/futurerestore.xcodeproj/project.xcworkspace/xcuserdata/s0uthwest.xcuserdatad/UserInterfaceState.xcuserstate b/futurerestore.xcodeproj/project.xcworkspace/xcuserdata/s0uthwest.xcuserdatad/UserInterfaceState.xcuserstate index 00f7d9d92816975232087813b215a7f5e307bf09..c2800f2ebb808cb054cf2ddc47980a51d94b5c96 100644 GIT binary patch literal 16009 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 delta 7048 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 VZ>BRsi!qMe$-DJ5x&G!I`aer#GRXh{ From 9d3e3ce150312ce42b3a06649a4862441b2993a4 Mon Sep 17 00:00:00 2001 From: s0uthwest <42713499+s0uthwest@users.noreply.github.com> Date: Mon, 26 Nov 2018 11:39:53 +0300 Subject: [PATCH 06/15] Actualizing ReadMe --- README.md | 41 +++++++++++++++++++++-------------------- 1 file changed, 21 insertions(+), 20 deletions(-) diff --git a/README.md b/README.md index f0751ba16..deb6333b4 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,13 @@ # futurerestore _futurerestore is a hacked up idevicerestore wrapper, which allows manually specifying SEP and Baseband for restoring_ - +Only use if you are sure what you're doing. --- ## Features * Supports the following downgrade methods - * Prometheus 64bit devices (generator and nonce collision mode) - * Odysseus for 32bit devices - * Re-restoring 32bit devices to iOS 9 with @alitek123's no-nonce method + * Prometheus 64-bit devices (generator and APNonce collision mode); + * Odysseus for 32-bit devices; + * Re-restoring 32-bit devices to iOS 9 with @alitek123's no-nonce method (alternative — [idevicererestore](https://github.com/s0uthwest/idevicererestore). * Allows restoring any nonmatching signed iOS/Sep/Baseband # Help @@ -45,10 +45,11 @@ To manually specify baseband/SEP: * On Linux, [usbmuxd](https://github.com/libimobiledevice/usbmuxd) is required at runtime. * ## External Libs Make sure these are installed - * libzip - * libcurl - * openssl (or CommonCrypto on OSX) - * [libplist](https://github.com/libimobiledevice/libplist) + * libzip; + * libcurl; + * openssl (or CommonCrypto on macOS/OS X); + * [libplist](https://github.com/libimobiledevice/libplist); + * [libirecovery](https://github.com/s0uthwest/libirecovery). * ## Submodules Make sure these projects compile on your system (install their dependencies) * [tsschecker](https://github.com/s0uthwest/tsschecker) @@ -63,7 +64,7 @@ Whenever you read "downgrade" nowadays it means you can also upgrade and re-rest --- -## 1) Prometheus (64bit device) - generator method +## 1) Prometheus (64-bit device) - generator method ### Requirements - Jailbreak @@ -105,13 +106,13 @@ You can downgrade if the destination iOS is compatible with the latest signed SE --- -## 2) Prometheus (64bit device) - nonce collision method +## 2) Prometheus (64-bit device) - nonce collision method ### Requirements -- iPhone5s or iPad Air on iOS 9.1 - 10.2 +- iPhone 5s, iPad Air, iPad mini 2 on iOS 9.1 - 10.2 - No Jailbreak required - SHSH files with customly chosen APNonce -- The shsh file needs to have one of the nonces, which the device generates a lot +- The shsh file needs to have one of the APNnces, which the device generates a lot ### Info You can downgrade if the destination iOS is compatible with the latest signed SEP. You also need to have special shsh files. If you don't know what this is, you probably can **NOT** use this method! @@ -124,24 +125,24 @@ one to speed up the process: `futurerestore -w -t t1.shsh -t t2.shsh -t t3.shsh --- -## 3) Odysseus (32bit devices) +## 3) Odysseus (32-bit devices) ### Requirements -- futurerestore compiled with libipatcher (odysseus support) +- futurerestore compiled with libipatcher (Odysseus support) - Jailbreak or bootrom exploit (limera1n) - Firmware keys for the device/destination iOS must be public (check ipsw.me) - SHSH files for the destination iOS (OTA blobs work too!) ### Info -If you have a jailbroken 32bit device you can downgrade to any iOS you have blobs for. You can still get OTA blobs for iOS 6.1.3 and 8.4.1 for some devices and use those. +If you have a jailbroken 32-bit device you can downgrade to any iOS you have blobs for. You can still get OTA blobs for iOS 6.1.3 and 8.4.1 for some devices and use those. ### How to use 1. Get device into kDFU/pwnDFU - * Pre-iPhone4s (limera1n devices): + * Pre-iPhone 4s (limera1n devices): * Enter pwndfu mode with redsn0w or any other tool - * iPhone4s and later: + * iPhone 4s and later: * Jailbreak required! - * Enter kDFU mode with kDFU app (cydia: repo.tihmstar.net) or by loading a pwniBSS from any existing odysseus bundle. + * Enter kDFU mode with kDFU app by loading a pwned iBSS from any existing odysseus bundle. 2. Connect your device to computer in kDFU mode (or pwnDFU mode) 3. On the computer run `futurerestore --use-pwndfu -t ticket.shsh --latest-baseband ios.ipsw` @@ -157,10 +158,10 @@ If you have a jailbroken 32bit device you can downgrade to any iOS you have blob *You can use **any** odysseus bundle for this* -## 4) iOS 9 Re-restore bug (found by @alitek123) (32bit devices): +## 4) iOS 9 Re-restore bug (found by @alitek123) (32-bit devices): ### Requirements - No Jailbreak required -- SHSH files without a nonce (noNonce APTickets) +- SHSH files without a APNonce (noNonce APTickets) ### Info If you have shsh files for iOS9 which do not contain a nonce, you can restore to that firmware. From ef23ebd1afb8d9db9487e810dfe17dae552e0e50 Mon Sep 17 00:00:00 2001 From: s0uthwest <42713499+s0uthwest@users.noreply.github.com> Date: Mon, 26 Nov 2018 11:40:37 +0300 Subject: [PATCH 07/15] Updating ReadMe --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index deb6333b4..57f8bc8e0 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,6 @@ # futurerestore _futurerestore is a hacked up idevicerestore wrapper, which allows manually specifying SEP and Baseband for restoring_ + Only use if you are sure what you're doing. --- From 5a6cec795ec6ab62787b65d471851f98c3977d2e Mon Sep 17 00:00:00 2001 From: s0uthwest <42713499+s0uthwest@users.noreply.github.com> Date: Thu, 29 Nov 2018 08:50:12 -0800 Subject: [PATCH 08/15] Update tsschecker submodule with latest jssy --- external/tsschecker | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/external/tsschecker b/external/tsschecker index 63e81b7d9..0b75635a2 160000 --- a/external/tsschecker +++ b/external/tsschecker @@ -1 +1 @@ -Subproject commit 63e81b7d9db1d3ead8c444300a3f9fe9b1c60e8e +Subproject commit 0b75635a2db4ad0e7b75ccfe05b285fa3c68c7ed From 2f7bd41664367c47de3ee5ca3d75bbfee94ac130 Mon Sep 17 00:00:00 2001 From: s0uthwest Date: Fri, 4 Jan 2019 10:20:54 -0800 Subject: [PATCH 09/15] Update submodules with latest changes --- external/idevicerestore | 2 +- external/img4tool | 2 +- external/tsschecker | 2 +- futurerestore/main.cpp | 1 - 4 files changed, 3 insertions(+), 4 deletions(-) diff --git a/external/idevicerestore b/external/idevicerestore index 98d08b051..c052febe9 160000 --- a/external/idevicerestore +++ b/external/idevicerestore @@ -1 +1 @@ -Subproject commit 98d08b051bc5ec2221c888b363de266b6c817e5e +Subproject commit c052febe964c517f5b36ffcc1194711efe6879a2 diff --git a/external/img4tool b/external/img4tool index d908b9246..2511b5c38 160000 --- a/external/img4tool +++ b/external/img4tool @@ -1 +1 @@ -Subproject commit d908b92467ce783549dfbf8bb25dbe22afe074d2 +Subproject commit 2511b5c380b4f62eff38c5e2ad1ef3c7dfc3c4b0 diff --git a/external/tsschecker b/external/tsschecker index 0b75635a2..aac4a1733 160000 --- a/external/tsschecker +++ b/external/tsschecker @@ -1 +1 @@ -Subproject commit 0b75635a2db4ad0e7b75ccfe05b285fa3c68c7ed +Subproject commit aac4a17334c4e7f7ddf2ab453441b42eae92de51 diff --git a/futurerestore/main.cpp b/futurerestore/main.cpp index 244ee2a58..b20eb70bd 100644 --- a/futurerestore/main.cpp +++ b/futurerestore/main.cpp @@ -16,7 +16,6 @@ #include #include #include "futurerestore.hpp" -#include "all_tsschecker.h" #include "tsschecker.h" #ifdef HAVE_LIBIPATCHER #include From cd570f279c02a3dfcce2196acc93fdc0708fd47f Mon Sep 17 00:00:00 2001 From: s0uthwest Date: Fri, 4 Jan 2019 10:21:39 -0800 Subject: [PATCH 10/15] Actualizing Xcode project --- .gitignore | 9 +- futurerestore.xcodeproj/project.pbxproj | 116 ++++++++++++++++++------ 2 files changed, 90 insertions(+), 35 deletions(-) diff --git a/.gitignore b/.gitignore index 9a51a1dcd..4f9a2caae 100644 --- a/.gitignore +++ b/.gitignore @@ -19,16 +19,15 @@ libtool ltmain.sh m4 missing +futurerestore/.DS_Store futurerestore/*.o futurerestore/*.la futurerestore/*.lo +futurerestore/config.h.bak futurerestore/futurerestore futurerestore/futurerestore.exe futurerestore/.libs futurerestore/.deps stamp-h1 - -# Clion -.idea/ -cmake-*/ -CMakeLists.txt +.DS_Store +external/.DS_Store \ No newline at end of file diff --git a/futurerestore.xcodeproj/project.pbxproj b/futurerestore.xcodeproj/project.pbxproj index 444260b41..21417fc36 100644 --- a/futurerestore.xcodeproj/project.pbxproj +++ b/futurerestore.xcodeproj/project.pbxproj @@ -16,9 +16,17 @@ 5604B7C5219B362E004C22EE /* libimobiledevice.6.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 5604B7C4219B362E004C22EE /* libimobiledevice.6.dylib */; }; 5604B7C7219B3630004C22EE /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 5604B7C6219B3630004C22EE /* libz.tbd */; }; 5604B7C9219B3632004C22EE /* libcurl.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 5604B7C8219B3632004C22EE /* libcurl.tbd */; }; - 561C73F421973D740030617C /* jssy.c in Sources */ = {isa = PBXBuildFile; fileRef = 561C73F321973D740030617C /* jssy.c */; }; + 563DA64521BBE44900844624 /* libcrypto.3.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 563DA64421BBE44900844624 /* libcrypto.3.dylib */; }; + 56520BEB21B1BA91005BD3F7 /* lzssdec.c in Sources */ = {isa = PBXBuildFile; fileRef = 56520BE921B1BA90005BD3F7 /* lzssdec.c */; }; + 56520BEF21B1BADE005BD3F7 /* endianness.h in Sources */ = {isa = PBXBuildFile; fileRef = 878587571D89D1C1008689F0 /* endianness.h */; }; + 56520BF021B1BAE6005BD3F7 /* limera1n_payload.h in Sources */ = {isa = PBXBuildFile; fileRef = 878587661D89D1C1008689F0 /* limera1n_payload.h */; }; + 56520BFA21B1BB14005BD3F7 /* jssy.c in Sources */ = {isa = PBXBuildFile; fileRef = 56520BF221B1BB13005BD3F7 /* jssy.c */; }; + 56520BFB21B1BB14005BD3F7 /* cmain.c in Sources */ = {isa = PBXBuildFile; fileRef = 56520BF321B1BB13005BD3F7 /* cmain.c */; }; + 56520BFC21B1BB14005BD3F7 /* jssy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 56520BF621B1BB13005BD3F7 /* jssy.cpp */; }; + 56EF4C0921B1A8570056D405 /* libipatcher.0.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 56EF4C0821B1A8570056D405 /* libipatcher.0.dylib */; }; + 56EF4C0D21B1A8750056D405 /* libusbmuxd.4.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 56EF4C0C21B1A8750056D405 /* libusbmuxd.4.dylib */; }; + 56EF4C0F21B1A8850056D405 /* libfragmentzip.0.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 56EF4C0E21B1A8850056D405 /* libfragmentzip.0.dylib */; }; 878587471D89CFDC008689F0 /* main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 878587461D89CFDC008689F0 /* main.cpp */; }; - 8788A6811EE8426A00138E07 /* libipatcher.0.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 8788A6801EE8426A00138E07 /* libipatcher.0.dylib */; }; 8799B0B21D89D99D002F4D5F /* futurerestore.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8799B0B01D89D99D002F4D5F /* futurerestore.cpp */; }; 8799B0B31D89DAE7002F4D5F /* idevicerestore.c in Sources */ = {isa = PBXBuildFile; fileRef = 8785875C1D89D1C1008689F0 /* idevicerestore.c */; settings = {COMPILER_FLAGS = "-D HAVE_CONFIG_H=1 "; }; }; 8799B0B41D89DAF6002F4D5F /* tss.c in Sources */ = {isa = PBXBuildFile; fileRef = 878587761D89D1C1008689F0 /* tss.c */; }; @@ -43,8 +51,6 @@ 8799B0CA1D89E371002F4D5F /* img4.c in Sources */ = {isa = PBXBuildFile; fileRef = 878587601D89D1C1008689F0 /* img4.c */; }; 8799B0CB1D89F796002F4D5F /* tsschecker.c in Sources */ = {isa = PBXBuildFile; fileRef = 8785879F1D89D2BA008689F0 /* tsschecker.c */; }; 8799B0CC1D89F7B9002F4D5F /* download.c in Sources */ = {isa = PBXBuildFile; fileRef = 878587981D89D2BA008689F0 /* download.c */; }; - 87F574CB1E151E97008D5C4D /* libfragmentzip.0.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 87F574CA1E151E97008D5C4D /* libfragmentzip.0.dylib */; }; - 87F574D01E151F44008D5C4D /* libcrypto.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 87F574C51E151D42008D5C4D /* libcrypto.dylib */; }; /* End PBXBuildFile section */ /* Begin PBXCopyFilesBuildPhase section */ @@ -69,8 +75,21 @@ 5604B7C4219B362E004C22EE /* libimobiledevice.6.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libimobiledevice.6.dylib; path = ../../../../../usr/local/lib/libimobiledevice.6.dylib; sourceTree = ""; }; 5604B7C6219B3630004C22EE /* libz.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; }; 5604B7C8219B3632004C22EE /* libcurl.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libcurl.tbd; path = usr/lib/libcurl.tbd; sourceTree = SDKROOT; }; - 561C73F321973D740030617C /* jssy.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jssy.c; path = external/tsschecker/external/jssy/jssy/jssy.c; sourceTree = SOURCE_ROOT; }; - 561C73F521973D7C0030617C /* jssy.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jssy.h; path = external/tsschecker/external/jssy/jssy/jssy.h; sourceTree = SOURCE_ROOT; }; + 563DA64221BBE40700844624 /* all.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = all.h; sourceTree = ""; }; + 563DA64321BBE41C00844624 /* all.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = all.h; path = external/tsschecker/tsschecker/all.h; sourceTree = SOURCE_ROOT; }; + 563DA64421BBE44900844624 /* libcrypto.3.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libcrypto.3.dylib; path = ../../../../../usr/local/lib/libcrypto.3.dylib; sourceTree = ""; }; + 56520BE921B1BA90005BD3F7 /* lzssdec.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = lzssdec.c; sourceTree = ""; }; + 56520BEA21B1BA90005BD3F7 /* lzssdec.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lzssdec.h; sourceTree = ""; }; + 56520BF221B1BB13005BD3F7 /* jssy.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jssy.c; path = external/tsschecker/external/jssy/jssy/jssy.c; sourceTree = SOURCE_ROOT; }; + 56520BF321B1BB13005BD3F7 /* cmain.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = cmain.c; path = external/tsschecker/external/jssy/jssy/cmain.c; sourceTree = SOURCE_ROOT; }; + 56520BF421B1BB13005BD3F7 /* jssy.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = jssy.hpp; path = external/tsschecker/external/jssy/jssy/jssy.hpp; sourceTree = SOURCE_ROOT; }; + 56520BF521B1BB13005BD3F7 /* helper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = helper.h; path = external/tsschecker/external/jssy/jssy/helper.h; sourceTree = SOURCE_ROOT; }; + 56520BF621B1BB13005BD3F7 /* jssy.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = jssy.cpp; path = external/tsschecker/external/jssy/jssy/jssy.cpp; sourceTree = SOURCE_ROOT; }; + 56520BF721B1BB13005BD3F7 /* ptr_smart.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = ptr_smart.hpp; path = external/tsschecker/external/jssy/jssy/ptr_smart.hpp; sourceTree = SOURCE_ROOT; }; + 56520BF821B1BB13005BD3F7 /* jssy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = jssy.h; path = external/tsschecker/external/jssy/jssy/jssy.h; sourceTree = SOURCE_ROOT; }; + 56EF4C0821B1A8570056D405 /* libipatcher.0.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libipatcher.0.dylib; path = ../../../../../usr/local/lib/libipatcher.0.dylib; sourceTree = ""; }; + 56EF4C0C21B1A8750056D405 /* libusbmuxd.4.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libusbmuxd.4.dylib; path = ../../../../../usr/local/lib/libusbmuxd.4.dylib; sourceTree = ""; }; + 56EF4C0E21B1A8850056D405 /* libfragmentzip.0.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libfragmentzip.0.dylib; path = ../../../../../usr/local/lib/libfragmentzip.0.dylib; sourceTree = ""; }; 878587431D89CFDC008689F0 /* futurerestore */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = futurerestore; sourceTree = BUILT_PRODUCTS_DIR; }; 878587461D89CFDC008689F0 /* main.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = main.cpp; sourceTree = ""; }; 8785874F1D89D1C1008689F0 /* asr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = asr.c; sourceTree = ""; }; @@ -113,25 +132,18 @@ 878587751D89D1C1008689F0 /* thread.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = thread.h; sourceTree = ""; }; 878587761D89D1C1008689F0 /* tss.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tss.c; sourceTree = ""; }; 878587771D89D1C1008689F0 /* tss.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tss.h; sourceTree = ""; }; - 8785878C1D89D1ED008689F0 /* all_img4tool.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = all_img4tool.h; sourceTree = ""; }; 8785878E1D89D1ED008689F0 /* img4.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = img4.c; sourceTree = ""; }; 8785878F1D89D1ED008689F0 /* img4.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = img4.h; sourceTree = ""; }; 878587901D89D1ED008689F0 /* img4tool.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = img4tool.c; sourceTree = ""; }; 878587941D89D243008689F0 /* img4tool.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = img4tool.h; sourceTree = ""; }; 878587951D89D290008689F0 /* config.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = config.h; sourceTree = ""; }; - 878587971D89D2BA008689F0 /* all_tsschecker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = all_tsschecker.h; sourceTree = ""; }; 878587981D89D2BA008689F0 /* download.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = download.c; sourceTree = ""; }; 878587991D89D2BA008689F0 /* download.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = download.h; sourceTree = ""; }; - 8785879A1D89D2BA008689F0 /* jsmn.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = jsmn.c; sourceTree = ""; }; - 8785879B1D89D2BA008689F0 /* jsmn.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jsmn.h; sourceTree = ""; }; 8785879F1D89D2BA008689F0 /* tsschecker.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tsschecker.c; sourceTree = ""; }; 878587A01D89D2BA008689F0 /* tsschecker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tsschecker.h; sourceTree = ""; }; - 8788A6801EE8426A00138E07 /* libipatcher.0.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libipatcher.0.dylib; path = ../../../../usr/local/lib/libipatcher.0.dylib; sourceTree = ""; }; 8799B0B01D89D99D002F4D5F /* futurerestore.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = futurerestore.cpp; sourceTree = ""; }; 8799B0B11D89D99D002F4D5F /* futurerestore.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = futurerestore.hpp; sourceTree = ""; }; - 87F574C51E151D42008D5C4D /* libcrypto.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libcrypto.dylib; path = ../../../../usr/lib/libcrypto.dylib; sourceTree = ""; }; 87F574C71E151DA6008D5C4D /* libcommonCrypto.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libcommonCrypto.tbd; path = usr/lib/system/libcommonCrypto.tbd; sourceTree = SDKROOT; }; - 87F574CA1E151E97008D5C4D /* libfragmentzip.0.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libfragmentzip.0.dylib; path = ../../../../usr/local/lib/libfragmentzip.0.dylib; sourceTree = ""; }; 87F574CC1E151EF8008D5C4D /* libcorecrypto.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libcorecrypto.tbd; path = usr/lib/system/libcorecrypto.tbd; sourceTree = SDKROOT; }; 87F574CE1E151F11008D5C4D /* libSystem.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libSystem.tbd; path = usr/lib/libSystem.tbd; sourceTree = SDKROOT; }; /* End PBXFileReference section */ @@ -141,18 +153,19 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 56EF4C0F21B1A8850056D405 /* libfragmentzip.0.dylib in Frameworks */, 5604B7B9219B35EE004C22EE /* libpartialzip-1.0.0.dylib in Frameworks */, + 56EF4C0D21B1A8750056D405 /* libusbmuxd.4.dylib in Frameworks */, 5604B7C3219B3626004C22EE /* libplist.3.dylib in Frameworks */, - 8788A6811EE8426A00138E07 /* libipatcher.0.dylib in Frameworks */, 5604B7C7219B3630004C22EE /* libz.tbd in Frameworks */, - 87F574D01E151F44008D5C4D /* libcrypto.dylib in Frameworks */, 5604B7BB219B35F8004C22EE /* libirecovery.2.dylib in Frameworks */, 5604B7C1219B3619004C22EE /* libz.1.2.11.dylib in Frameworks */, + 563DA64521BBE44900844624 /* libcrypto.3.dylib in Frameworks */, 5604B7BF219B3611004C22EE /* libzip.5.0.dylib in Frameworks */, - 87F574CB1E151E97008D5C4D /* libfragmentzip.0.dylib in Frameworks */, 5604B7C9219B3632004C22EE /* libcurl.tbd in Frameworks */, 5604B7C5219B362E004C22EE /* libimobiledevice.6.dylib in Frameworks */, 5604B7BD219B3602004C22EE /* liblzfse.dylib in Frameworks */, + 56EF4C0921B1A8570056D405 /* libipatcher.0.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -162,8 +175,13 @@ 561C73F221973D620030617C /* jssy */ = { isa = PBXGroup; children = ( - 561C73F321973D740030617C /* jssy.c */, - 561C73F521973D7C0030617C /* jssy.h */, + 56520BF321B1BB13005BD3F7 /* cmain.c */, + 56520BF521B1BB13005BD3F7 /* helper.h */, + 56520BF221B1BB13005BD3F7 /* jssy.c */, + 56520BF621B1BB13005BD3F7 /* jssy.cpp */, + 56520BF821B1BB13005BD3F7 /* jssy.h */, + 56520BF421B1BB13005BD3F7 /* jssy.hpp */, + 56520BF721B1BB13005BD3F7 /* ptr_smart.hpp */, ); name = jssy; sourceTree = ""; @@ -259,11 +277,13 @@ 8785878B1D89D1ED008689F0 /* img4tool */ = { isa = PBXGroup; children = ( - 8785878C1D89D1ED008689F0 /* all_img4tool.h */, + 563DA64321BBE41C00844624 /* all.h */, 8785878F1D89D1ED008689F0 /* img4.h */, 8785878E1D89D1ED008689F0 /* img4.c */, 878587941D89D243008689F0 /* img4tool.h */, 878587901D89D1ED008689F0 /* img4tool.c */, + 56520BE921B1BA90005BD3F7 /* lzssdec.c */, + 56520BEA21B1BA90005BD3F7 /* lzssdec.h */, ); name = img4tool; path = external/img4tool/img4tool; @@ -272,11 +292,9 @@ 878587961D89D2BA008689F0 /* tsschecker */ = { isa = PBXGroup; children = ( - 878587971D89D2BA008689F0 /* all_tsschecker.h */, + 563DA64221BBE40700844624 /* all.h */, 878587991D89D2BA008689F0 /* download.h */, 878587981D89D2BA008689F0 /* download.c */, - 8785879B1D89D2BA008689F0 /* jsmn.h */, - 8785879A1D89D2BA008689F0 /* jsmn.c */, 878587A01D89D2BA008689F0 /* tsschecker.h */, 8785879F1D89D2BA008689F0 /* tsschecker.c */, ); @@ -296,12 +314,13 @@ 5604B7BC219B3602004C22EE /* liblzfse.dylib */, 5604B7C2219B3626004C22EE /* libplist.3.dylib */, 5604B7BE219B3610004C22EE /* libzip.5.0.dylib */, - 8788A6801EE8426A00138E07 /* libipatcher.0.dylib */, + 56EF4C0821B1A8570056D405 /* libipatcher.0.dylib */, + 563DA64421BBE44900844624 /* libcrypto.3.dylib */, 87F574CE1E151F11008D5C4D /* libSystem.tbd */, 87F574CC1E151EF8008D5C4D /* libcorecrypto.tbd */, - 87F574CA1E151E97008D5C4D /* libfragmentzip.0.dylib */, 87F574C71E151DA6008D5C4D /* libcommonCrypto.tbd */, - 87F574C51E151D42008D5C4D /* libcrypto.dylib */, + 56EF4C0C21B1A8750056D405 /* libusbmuxd.4.dylib */, + 56EF4C0E21B1A8850056D405 /* libfragmentzip.0.dylib */, ); name = Frameworks; sourceTree = ""; @@ -383,7 +402,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 561C73F421973D740030617C /* jssy.c in Sources */, + 56520BFB21B1BB14005BD3F7 /* cmain.c in Sources */, 8799B0C11D89DB38002F4D5F /* fls.c in Sources */, 8799B0B41D89DAF6002F4D5F /* tss.c in Sources */, 8799B0C01D89DB38002F4D5F /* fdr.c in Sources */, @@ -395,20 +414,25 @@ 8799B0B81D89DAFF002F4D5F /* recovery.c in Sources */, 8799B0B31D89DAE7002F4D5F /* idevicerestore.c in Sources */, 8799B0C81D89E2BD002F4D5F /* img4tool.c in Sources */, + 56520BEF21B1BADE005BD3F7 /* endianness.h in Sources */, 8799B0BB1D89DB12002F4D5F /* download.c in Sources */, + 56520BEB21B1BA91005BD3F7 /* lzssdec.c in Sources */, 8799B0B71D89DAFF002F4D5F /* normal.c in Sources */, 8799B0C31D89DB4B002F4D5F /* socket.c in Sources */, 8799B0C21D89DB46002F4D5F /* thread.c in Sources */, 8799B0B61D89DAFF002F4D5F /* dfu.c in Sources */, 8799B0BD1D89DB27002F4D5F /* limera1n.c in Sources */, + 56520BF021B1BAE6005BD3F7 /* limera1n_payload.h in Sources */, 8799B0C51D89DB67002F4D5F /* locking.c in Sources */, 878587471D89CFDC008689F0 /* main.cpp in Sources */, 8799B0BF1D89DB38002F4D5F /* asr.c in Sources */, + 56520BFA21B1BB14005BD3F7 /* jssy.c in Sources */, 8799B0BE1D89DB27002F4D5F /* restore.c in Sources */, 8799B0CB1D89F796002F4D5F /* tsschecker.c in Sources */, 8799B0C91D89E2C3002F4D5F /* img4.c in Sources */, 8799B0CA1D89E371002F4D5F /* img4.c in Sources */, 8799B0B21D89D99D002F4D5F /* futurerestore.cpp in Sources */, + 56520BFC21B1BB14005BD3F7 /* jssy.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -462,10 +486,25 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; + HEADER_SEARCH_PATHS = ( + /opt/local/include, + /usr/local/include, + /usr/local/opt/openssl/include, + ); + INSTALL_PATH = /usr/local/bin; + LIBRARY_SEARCH_PATHS = ( + /usr/lib, + /usr/local/lib, + /usr/local/opt/openssl/lib, + "$(SDKROOT)/usr/lib/system", + ); MACOSX_DEPLOYMENT_TARGET = 10.11; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; + PRODUCT_BUNDLE_IDENTIFIER = net.tihmstar.futurerestore; + PRODUCT_NAME = futurerestore; SDKROOT = macosx; + USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/external/tsschecker/external/jssy/jssy"; }; name = Debug; }; @@ -510,9 +549,24 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; + HEADER_SEARCH_PATHS = ( + /opt/local/include, + /usr/local/include, + /usr/local/opt/openssl/include, + ); + INSTALL_PATH = /usr/local/bin; + LIBRARY_SEARCH_PATHS = ( + /usr/lib, + /usr/local/lib, + /usr/local/opt/openssl/lib, + "$(SDKROOT)/usr/lib/system", + ); MACOSX_DEPLOYMENT_TARGET = 10.11; MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_BUNDLE_IDENTIFIER = net.tihmstar.futurerestore; + PRODUCT_NAME = futurerestore; SDKROOT = macosx; + USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/external/tsschecker/external/jssy/jssy"; }; name = Release; }; @@ -523,16 +577,17 @@ HEADER_SEARCH_PATHS = ( /usr/local/include, /opt/local/include, + /usr/local/opt/openssl/include, ); LIBRARY_SEARCH_PATHS = ( /usr/local/lib, /usr/lib, - /usr/local/opt/openssl/lib, "$(SDKROOT)/usr/lib/system", ); OTHER_CFLAGS = "-DHAVE_LIBIPATCHER"; + PRODUCT_BUNDLE_IDENTIFIER = net.tihmstar.futurerestore; PRODUCT_NAME = "$(TARGET_NAME)"; - USER_HEADER_SEARCH_PATHS = "/usr/local/opt/openssl/include /usr/local/include $(SRCROOT)/external/tsschecker/external/jssy/jssy"; + USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/external/tsschecker/external/jssy/jssy $(SRCROOT)/external"; }; name = Debug; }; @@ -543,16 +598,17 @@ HEADER_SEARCH_PATHS = ( /usr/local/include, /opt/local/include, + /usr/local/opt/openssl/include, ); LIBRARY_SEARCH_PATHS = ( /usr/local/lib, /usr/lib, - /usr/local/opt/openssl/lib, "$(SDKROOT)/usr/lib/system", ); OTHER_CFLAGS = "-DHAVE_LIBIPATCHER"; + PRODUCT_BUNDLE_IDENTIFIER = net.tihmstar.futurerestore; PRODUCT_NAME = "$(TARGET_NAME)"; - USER_HEADER_SEARCH_PATHS = "/usr/local/opt/openssl/include /usr/local/include $(SRCROOT)/external/tsschecker/external/jssy/jssy"; + USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/external/tsschecker/external/jssy/jssy $(SRCROOT)/external"; }; name = Release; }; From 89923abaff2322b9f02c613ce89a90a5fc92de97 Mon Sep 17 00:00:00 2001 From: s0uthwest Date: Fri, 4 Jan 2019 10:22:44 -0800 Subject: [PATCH 11/15] SEP alert as a baseband --- futurerestore/main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/futurerestore/main.cpp b/futurerestore/main.cpp index b20eb70bd..fc95cc36c 100644 --- a/futurerestore/main.cpp +++ b/futurerestore/main.cpp @@ -247,7 +247,7 @@ int main(int argc, const char * argv[]) { devVals.deviceBoard = const_cast(device->hardware_model); if (flags & FLAG_LATEST_SEP) { - info("user specified to use latest signed sep\n"); + info("user specified to use latest signed sep (WARNING, THIS CAN CAUSE A NON-WORKING RESTORE)\n"); client.loadLatestSep(); } else if (!client.is32bit()) { if (sourceIpswPath != nullptr) { From e971103e221cc4bcb303d23deb87d51659848f94 Mon Sep 17 00:00:00 2001 From: s0uthwest Date: Fri, 4 Jan 2019 10:23:11 -0800 Subject: [PATCH 12/15] 10 seconds for non-bb restoring --- futurerestore/main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/futurerestore/main.cpp b/futurerestore/main.cpp index fc95cc36c..39e6cfb41 100644 --- a/futurerestore/main.cpp +++ b/futurerestore/main.cpp @@ -265,7 +265,7 @@ int main(int argc, const char * argv[]) { if (flags & FLAG_NO_BASEBAND){ printf("\nWARNING: user specified not to flash a baseband. This can make the restore fail if the device needs a baseband!\n"); printf("if you added this flag by mistake you can press CTRL-C now to cancel\n"); - int c = 5; + int c = 10; printf("continuing restore in "); while (c) { printf("%d ",c--); From 4f63a8b0a0f490a45709f37a4f25114f3d2cd214 Mon Sep 17 00:00:00 2001 From: s0uthwest Date: Fri, 4 Jan 2019 10:24:36 -0800 Subject: [PATCH 13/15] ReadMe: actualizing - Update older instructions - Added DFU collision instruction - cuRL for ubuntu 18 guide --- README.md | 143 ++++++++++++++++++++++++++++++------------------------ 1 file changed, 80 insertions(+), 63 deletions(-) diff --git a/README.md b/README.md index 57f8bc8e0..c563b9ac5 100644 --- a/README.md +++ b/README.md @@ -4,41 +4,12 @@ _futurerestore is a hacked up idevicerestore wrapper, which allows manually spec Only use if you are sure what you're doing. --- -## Features +## Features * Supports the following downgrade methods * Prometheus 64-bit devices (generator and APNonce collision mode); * Odysseus for 32-bit devices; - * Re-restoring 32-bit devices to iOS 9 with @alitek123's no-nonce method (alternative — [idevicererestore](https://github.com/s0uthwest/idevicererestore). -* Allows restoring any nonmatching signed iOS/Sep/Baseband - -# Help -_(might become outdated):_ - -``` -Usage: futurerestore [OPTIONS] /path/to/ipsw - -Options: - - -t, --apticket PATH APTicket used for restoring - -u, --update Update instead of erase install (requires appropriate APTicket) - -w, --wait Keep rebooting until nonce matches APTicket (nonce collision, unreliable) - -d, --debug Verbose debug output (useful for error logs) - --latest-sep Use latest signed sep instead of manually specifying one (may cause bad restore) - --latest-baseband Use latest signed baseband instead of manually specifying one (may cause bad restore) - --no-baseband Skip checks and don't flash baseband - WARNING: only use this for device without a baseband (eg. iPod or some wifi only iPads) - -To extract baseband/SEP automatically from IPSW: - - -i, --source-ipsw PATH Source IPSW to extract baseband/SEP from - -To manually specify baseband/SEP: - - -b, --baseband PATH Baseband to be flashed - -p, --baseband-manifest PATH BuildManifest for requesting baseband ticket - -s, --sep PATH SEP to be flashed - -m, --sep-manifest PATH BuildManifest for requesting sep ticket -``` + * Re-restoring 32-bit devices to iOS 9 with @alitek123's no-nonce method (alternative — [idevicererestore](https://github.com/s0uthwest/idevicererestore)). +* Allows restoring any nonmatching signed iOS/SEP/Baseband. # Dependencies * ## Runtime @@ -46,16 +17,21 @@ To manually specify baseband/SEP: * On Linux, [usbmuxd](https://github.com/libimobiledevice/usbmuxd) is required at runtime. * ## External Libs Make sure these are installed - * libzip; - * libcurl; - * openssl (or CommonCrypto on macOS/OS X); + * [libzip](https://github.com/nih-at/libzip); + * [libcurl](https://github.com/curl/curl); + * [openssl](https://github.com/openssl/openssl) (or CommonCrypto on macOS/OS X); * [libplist](https://github.com/libimobiledevice/libplist); - * [libirecovery](https://github.com/s0uthwest/libirecovery). + * [libirecovery](https://github.com/s0uthwest/libirecovery); + * [libimobiledevice](https://github.com/libimobiledevice/libimobiledevice) * ## Submodules Make sure these projects compile on your system (install their dependencies) - * [tsschecker](https://github.com/s0uthwest/tsschecker) - * [img4tool](https://github.com/tihmstar/img4tool) + * [jssy](https://github.com/tihmstar/jssy); + * [tsschecker](https://github.com/s0uthwest/tsschecker); + * [img4tool](https://github.com/s0uthwest/img4tool); * [idevicerestore](https://github.com/s0uthwest/idevicerestore) + +## Some about curl for ubuntu +Follow [this guide](https://dev.to/jake/using-libcurl3-and-libcurl4-on-ubuntu-1804-bionic-184g) to use tsschecker on Ubuntu 18.04 (Bionic) as it requires libcurl3 which cannot coexist with libcurl4 on this OS. --- @@ -68,7 +44,7 @@ Whenever you read "downgrade" nowadays it means you can also upgrade and re-rest ## 1) Prometheus (64-bit device) - generator method ### Requirements -- Jailbreak +- __Jailbreak__ - SHSH2 files with a generator - nonceEnabler patch enabled @@ -79,7 +55,7 @@ You can downgrade if the destination iOS is compatible with the latest signed SE 1. Device must be jailbroken and nonceEnabler patch must be active 2. Open shsh file and look up the generator * Looks like this: `generator0xde3318d224cf14a1` -3. Write the generator to device's NVRAM +3. Write the generator to device's nvram * SSH into the device and run `nvram com.apple.System.boot-nonce=0xde3318d224cf14a1` to set the generator *0xde3318d224cf14a1* * verify with `nvram -p` 4. Connect your device in normal mode to computer @@ -89,31 +65,42 @@ You can downgrade if the destination iOS is compatible with the latest signed SE Prometheus *Prometheus* -Prometheus -*NonceEnabler* - ### Recommended method to active nonceEnabler patch -1. Get nvpatch https://github.com/Siguza/ios-kern-utils/releases/ +#### Method 1: ios-kern-utils (iOS 7.x-10.x) +1. Install DEB-file of [ios-kern-utils](https://github.com/Siguza/ios-kern-utils/releases/) on device 2. Run on the device `nvpatch com.apple.System.boot-nonce` +#### Method 2: Using special applications +Use utilities for setting boot-nonce — [PhœnixNonce](https://github.com/Siguza/PhoenixNonce) for iOS 9.x, [v0rtexnonce](https://github.com/arx8x/v0rtexnonce) for iOS 10.x, [nonceset1112](https://github.com/julioverne/NonceSet112) for iOS 11.0-11.1.2 and [noncereboot1131UI](https://github.com/s0uthwest/noncereboot1131UI) for iOS 11.0-11.4b3. + +#### Method 3: [noncereboot11](https://github.com/pwn20wndstuff/noncereboot11) for iOS 11.x. +This CLI tool available at [pwn20wnd](https://github.com/pwn20wndstuff)'s [Cydia repo](http://xnu.science/repo). Install it and set boot-nonce with help on the binary. + ### Activate tfp0 if jailbreak doesn't allow it #### Method 1 (if jailbroken on 9.3.x) * reboot - * reactivate jailbreak with https://jbme.qwertyoruiop.com/ + * reactivate jailbreak with [Luca Todesco](https://github.com/kpwn)'s [JailbreakMe](https://jbme.qwertyoruiop.com/) * done + +#### Method 2 (if jailbroken on iOS 8.0-8.1 with [Pangu](https://en.8.pangu.io)) + * install this [untether DEB-file](http://apt.saurik.com/beta/pangu8-tfp0/io.pangu.xuanyuansword8_0.5_iphoneos-arm.deb) with included tfp0 patch + +#### Method 3 (if jailbroken on iOS 7.x with [Pangu](https://en.7.pangu.io)) + * install this [untether DEB-file](http://apt.saurik.com/debs/io.pangu.axe7_0.3_iphoneos-arm.deb) with included tfp0 patch -#### Method 2 - * Use cl0ver (https://github.com/Siguza/cl0ver) +#### Method 4 + * Use [cl0ver](https://github.com/Siguza/cl0ver) for iOS 9.x --- -## 2) Prometheus (64-bit device) - nonce collision method +## 2) Prometheus (64-bit device) - APNonce collision method (Recovery) ### Requirements -- iPhone 5s, iPad Air, iPad mini 2 on iOS 9.1 - 10.2 +- __iPhone 5s, iPad Air, iPad mini 2 on iOS 9.1 - 10.2__ - No Jailbreak required - SHSH files with customly chosen APNonce - The shsh file needs to have one of the APNnces, which the device generates a lot +- __collisioned APNonces available in file 'nonces.txt'__ ### Info You can downgrade if the destination iOS is compatible with the latest signed SEP. You also need to have special shsh files. If you don't know what this is, you probably can **NOT** use this method! @@ -126,12 +113,48 @@ one to speed up the process: `futurerestore -w -t t1.shsh -t t2.shsh -t t3.shsh --- -## 3) Odysseus (32-bit devices) +## 3) Prometheus (64-bit device) - APNonce collision method (DFU) ### Requirements -- futurerestore compiled with libipatcher (Odysseus support) +- __Devices for A7 chip (iPhone 5s, iPad Air, iPad mini 2) and some devices with A8 chip (iPod touch [6th gen]) on all iOS firmwares__ +- No Jailbreak required +- SHSH files with customly chosen APNonce +- The shsh file needs to have one of the APNnces, which the device generates a lot +- __[img4tool](https://github.com/s0uthwest/img4tool) can't be used for Windows [problem with signing iBSS/iBEC], now it's TO-DO__ +- __collisioned APNonces available in file 'nonces.txt' in [TSSChecker](https://github.com/s0uthwest/TSSChecker).__ + +### Info +You can downgrade if the destination iOS is compatible with the latest signed SEP. You also need to have special shsh files. If you don't know what this is, you probably can **NOT** use this method! + +### How to use +1. Connect your device in DFU mode +2. Use [irecovery](https://github.com/libimobiledevice/irecovery) for check nonce booted with DFU +3. Extract iBSS/iBEC from target firmware for downgrade (unsigned) +4. Check DFU APNonces with [irecovery](https://github.com/libimobiledevice/irecovery) with DFU booting. + You can't automatically collision DFU APNonces. + + __If APNonce is not collisioned, "use hands" for DFU booting.__ + + __If APNonce is successfully coliisioned, use this SHSH2 for sign iBSS/iBEC.__ +5. Use [img4tool](https://github.com/s0uthwest/img4tool) for sign iBSS: + `img4tool -s ticket.shsh -c iBSS.signed -p ` +6. Use [img4tool](https://github.com/s0uthwest/img4tool) for sign iBEC: + `img4tool -s ticket.shsh -c iBEC.signed -p ` +7. So, after signing we can boot into Recovery with [irecovery](https://github.com/libimobiledevice/irecovery): + + `irecovery -f iBSS.signed` - loading iBSS + + `irecovery -f iBEC.signed` - loading iBEC +8. So good! On the computer run `futurerestore -w -t ticket.shsh --latest-baseband --latest-sep ios.ipsw` + +--- + +## 4) Odysseus (32-bit devices) + +### Requirements +- futurerestore compiled with libipatcher ([Odysseus](https://dayt0n.com/articles/Odysseus) support) - Jailbreak or bootrom exploit (limera1n) -- Firmware keys for the device/destination iOS must be public (check ipsw.me) +- Firmware keys for the device/destination iOS must be public - SHSH files for the destination iOS (OTA blobs work too!) ### Info @@ -143,7 +166,7 @@ If you have a jailbroken 32-bit device you can downgrade to any iOS you have blo * Enter pwndfu mode with redsn0w or any other tool * iPhone 4s and later: * Jailbreak required! - * Enter kDFU mode with kDFU app by loading a pwned iBSS from any existing odysseus bundle. + * Enter kDFU mode by loading a pwnediBSS from any existing odysseus bundle. 2. Connect your device to computer in kDFU mode (or pwnDFU mode) 3. On the computer run `futurerestore --use-pwndfu -t ticket.shsh --latest-baseband ios.ipsw` @@ -151,21 +174,15 @@ If you have a jailbroken 32-bit device you can downgrade to any iOS you have blo Odysseus *Futurerestore + Libipatcher* -Odysseus -*kDFU App* - -Odysseus -*Enter kDFU Mode (watch up to the point where the screen goes black)* - -*You can use **any** odysseus bundle for this* +*You can use **any** successfully created odysseus bundle for this* -## 4) iOS 9 Re-restore bug (found by @alitek123) (32-bit devices): +## 5) iOS 9 Re-restore bug (found by [@alitek123](https://twitter.com/alitek123), 32-bit devices only): ### Requirements - No Jailbreak required -- SHSH files without a APNonce (noNonce APTickets) +- __SHSH files without a APNonce (noNonce APTickets)__ ### Info -If you have shsh files for iOS9 which do not contain a nonce, you can restore to that firmware. +If you have shsh files for iOS9 which do not contain an APNonce, you can restore to that firmware. ### How to use 1. Connect your device in DFU mode From 8451845796024dab415d3644c2814cd819960dbc Mon Sep 17 00:00:00 2001 From: s0uthwest Date: Fri, 4 Jan 2019 10:26:14 -0800 Subject: [PATCH 14/15] Compiling with libcrypto and libusbmuxd --- configure.ac | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index 5f582dd95..e74296385 100644 --- a/configure.ac +++ b/configure.ac @@ -1,5 +1,5 @@ AC_PREREQ(2.64) -AC_INIT([futurerestore], [1.0], [https://github.com/s0uthwest/futurerestore/issues],, [https://github.com/s0uthwest/futurerestore]) +AC_INIT([futurerestore], [1.0], [https://github.com/s0uthwest/futurerestore]) AC_CANONICAL_SYSTEM @@ -33,6 +33,8 @@ PKG_CHECK_MODULES(libplist, libplist >= 1.12) PKG_CHECK_MODULES(libzip, libzip >= 0.10) PKG_CHECK_MODULES(libimobiledevice, libimobiledevice-1.0 >= 1.2.1) PKG_CHECK_MODULES(libirecovery, libirecovery >= 0.2.0) +PKG_CHECK_MODULES(libcrypto, libcrypto >= 1.0) +PKG_CHECK_MODULES(libusbmuxd, libusbmuxd >= 1.0) AC_PROG_CC AC_PROG_CXX From 18f75de6756bba729185cd44e5542e6800b44204 Mon Sep 17 00:00:00 2001 From: s0uthwest <42713499+s0uthwest@users.noreply.github.com> Date: Fri, 4 Jan 2019 21:35:33 +0300 Subject: [PATCH 15/15] Semi-fix PRIu64 for compiling --- futurerestore/futurerestore.cpp | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) diff --git a/futurerestore/futurerestore.cpp b/futurerestore/futurerestore.cpp index 73e9ad604..6ee5cd8ea 100644 --- a/futurerestore/futurerestore.cpp +++ b/futurerestore/futurerestore.cpp @@ -27,11 +27,9 @@ extern "C"{ #include "locking.h" #include "restore.h" #include "tsschecker.h" -#include "all_tsschecker.h" #include } - //(re)define __mkdir #ifdef __mkdir #undef __mkdir @@ -195,7 +193,6 @@ plist_t futurerestore::nonceMatchesApTickets(){ _rerestoreiOS9 = (info("Detected iOS 9 re-restore, proceeding in DFU mode\n"),true); } - unsigned char* realnonce; int realNonceSize = 0; if (_rerestoreiOS9) { @@ -234,7 +231,6 @@ plist_t futurerestore::nonceMatchesApTickets(){ } } - return NULL; } @@ -262,8 +258,6 @@ const char *futurerestore::nonceMatchesIM4Ms(){ return NULL; } - - void futurerestore::waitForNonce(vectornonces, size_t nonceSize){ if (!_didInit) reterror(-1, "did not init\n"); setAutoboot(false); @@ -433,7 +427,6 @@ char *futurerestore::getiBootBuild(){ return _ibootBuild; } - pair, size_t> getIPSWComponent(struct idevicerestore_client_t* client, plist_t build_identity, string component){ ptr_smart path; unsigned char* component_data = NULL; @@ -452,7 +445,6 @@ pair, size_t> getIPSWComponent(struct idevicerestore_client_t* return {(char*)component_data,component_size}; } - void futurerestore::enterPwnRecovery(plist_t build_identity, string bootargs){ #ifndef HAVE_LIBIPATCHER reterror(-404, "compiled without libipatcher"); @@ -1557,7 +1549,6 @@ char *futurerestore::getPathOfElementInManifest(const char *element, const char return pathStr; } - static int zip_test_file(zip_t *za, zip_uint64_t idx, zip_uint64_t size, zip_uint32_t crc) { zip_file_t *zf; char buf[8192]; @@ -1566,7 +1557,7 @@ static int zip_test_file(zip_t *za, zip_uint64_t idx, zip_uint64_t size, zip_uin zip_uint32_t ncrc; if ((zf = zip_fopen_index(za, idx, 0)) == NULL) { - fprintf(stderr, "cannot open file %" PRIu64 " in archive: %s\n", idx, zip_strerror(za)); + // fprintf(stderr, "cannot open file %" PRIu64 " in archive: %s\n", idx, zip_strerror(za)); return -1; } @@ -1579,7 +1570,7 @@ static int zip_test_file(zip_t *za, zip_uint64_t idx, zip_uint64_t size, zip_uin } if (n < 0) { - fprintf(stderr, "error reading file %" PRIu64 " in archive: %s\n", idx, zip_file_strerror(zf)); + // fprintf(stderr, "error reading file %" PRIu64 " in archive: %s\n", idx, zip_file_strerror(zf)); zip_fclose(zf); return -1; } @@ -1587,13 +1578,13 @@ static int zip_test_file(zip_t *za, zip_uint64_t idx, zip_uint64_t size, zip_uin zip_fclose(zf); if (nsize != size) { - fprintf(stderr, "file %" PRIu64 ": unexpected length %" PRId64 " (should be %" PRId64 ")\n", idx, nsize, size); + // fprintf(stderr, "file %" PRIu64 ": unexpected length %" PRId64 " (should be %" PRId64 ")\n", idx, nsize, size); return -2; } if (ncrc != crc) { - fprintf(stderr, "file %" PRIu64 ": unexpected length %x (should be %x)\n", idx, ncrc, crc); + // fprintf(stderr, "file %" PRIu64 ": unexpected length %x (should be %x)\n", idx, ncrc, crc); return -2; } return 0; -} \ No newline at end of file +}