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/.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/LICENSE b/LICENSE.txt
similarity index 100%
rename from LICENSE
rename to LICENSE.txt
diff --git a/README.md b/README.md
index 65713c4c6..c563b9ac5 100644
--- a/README.md
+++ b/README.md
@@ -1,47 +1,15 @@
# 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
-
+Only use if you are sure what you're doing.
---
-# Features
+## 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
-* 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
-```
+ * 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.
# Dependencies
* ## Runtime
@@ -49,18 +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 OSX)
- * [libplist](https://github.com/libimobiledevice/libplist)
+ * [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);
+ * [libimobiledevice](https://github.com/libimobiledevice/libimobiledevice)
* ## Submodules
Make sure these projects compile on your system (install their dependencies)
- * [tsschecker](https://github.com/encounter/tsschecker)
- * [img4tool](https://github.com/tihmstar/img4tool)
- * [idevicerestore](https://github.com/encounter/idevicerestore)
-
-# Building from source
-See [COMPILING.md](COMPILING.md)
+ * [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.
---
@@ -70,10 +41,10 @@ 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
+- __Jailbreak__
- SHSH2 files with a generator
- nonceEnabler patch enabled
@@ -84,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
@@ -94,31 +65,42 @@ You can downgrade if the destination iOS is compatible with the latest signed SE
*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 (64bit device) - nonce collision method
+## 2) Prometheus (64-bit device) - APNonce collision method (Recovery)
### 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
+- __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!
@@ -131,24 +113,60 @@ one to speed up the process: `futurerestore -w -t t1.shsh -t t2.shsh -t t3.shsh
---
-## 3) Odysseus (32bit devices)
+## 3) Prometheus (64-bit device) - APNonce collision method (DFU)
+
+### Requirements
+- __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 support)
+- 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
-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 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`
@@ -156,21 +174,15 @@ If you have a jailbroken 32bit device you can downgrade to any iOS you have blob
*Futurerestore + Libipatcher*
-
-*kDFU App*
-
-
-*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) (32bit 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 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.
+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
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..e74296385 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])
AC_CANONICAL_SYSTEM
@@ -33,11 +33,12 @@ 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
-
# Optional module libipatcher
AC_ARG_WITH([libipatcher],
[AS_HELP_STRING([--without-libipatcher],
@@ -81,7 +82,6 @@ Makefile
futurerestore/Makefile
])
-
echo "
Configuration for $PACKAGE $VERSION:
-------------------------------------------
diff --git a/external/idevicerestore b/external/idevicerestore
index 396777645..c052febe9 160000
--- a/external/idevicerestore
+++ b/external/idevicerestore
@@ -1 +1 @@
-Subproject commit 39677764510f5da14a4d5357204e0cd8575dae25
+Subproject commit c052febe964c517f5b36ffcc1194711efe6879a2
diff --git a/external/img4tool b/external/img4tool
index b3bb5040e..2511b5c38 160000
--- a/external/img4tool
+++ b/external/img4tool
@@ -1 +1 @@
-Subproject commit b3bb5040e0defdc50ba66ace029910e48597efd8
+Subproject commit 2511b5c380b4f62eff38c5e2ad1ef3c7dfc3c4b0
diff --git a/external/tsschecker b/external/tsschecker
index e2243e8d5..aac4a1733 160000
--- a/external/tsschecker
+++ b/external/tsschecker
@@ -1 +1 @@
-Subproject commit e2243e8d5256f9d1ba402069f10d0e0a0cd83d57
+Subproject commit aac4a17334c4e7f7ddf2ab453441b42eae92de51
diff --git a/futurerestore.xcodeproj/project.pbxproj b/futurerestore.xcodeproj/project.pbxproj
index c79de8748..21417fc36 100644
--- a/futurerestore.xcodeproj/project.pbxproj
+++ b/futurerestore.xcodeproj/project.pbxproj
@@ -7,15 +7,26 @@
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 */; };
+ 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 */; };
- 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 */; };
- 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 "; }; };
8799B0B41D89DAF6002F4D5F /* tss.c in Sources */ = {isa = PBXBuildFile; fileRef = 878587761D89D1C1008689F0 /* tss.c */; };
@@ -40,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 */
@@ -57,6 +66,30 @@
/* 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; };
+ 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 = ""; };
@@ -99,35 +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 = ""; };
- 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 = ""; };
- 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 */
@@ -137,33 +153,42 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
- 878E1AC51F73EB3F00B1565B /* libzip.5.dylib in Frameworks */,
- 878587AD1D89D59E008689F0 /* libz.tbd in Frameworks */,
- 8788A6811EE8426A00138E07 /* libipatcher.0.dylib in Frameworks */,
- 87F574D01E151F44008D5C4D /* libcrypto.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 */,
+ 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 */,
+ 5604B7C7219B3630004C22EE /* libz.tbd 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 */,
+ 5604B7C9219B3632004C22EE /* libcurl.tbd in Frameworks */,
+ 5604B7C5219B362E004C22EE /* libimobiledevice.6.dylib in Frameworks */,
+ 5604B7BD219B3602004C22EE /* liblzfse.dylib in Frameworks */,
+ 56EF4C0921B1A8570056D405 /* libipatcher.0.dylib in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
+ 561C73F221973D620030617C /* jssy */ = {
+ isa = PBXGroup;
+ children = (
+ 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 = "";
+ };
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 */,
87F574C21E151CDE008D5C4D /* Frameworks */,
@@ -193,6 +218,7 @@
8785874D1D89D1A4008689F0 /* external */ = {
isa = PBXGroup;
children = (
+ 561C73F221973D620030617C /* jssy */,
878587961D89D2BA008689F0 /* tsschecker */,
8785878B1D89D1ED008689F0 /* img4tool */,
8785874E1D89D1C1008689F0 /* idevicerestore */,
@@ -251,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;
@@ -264,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 */,
);
@@ -279,13 +305,22 @@
87F574C21E151CDE008D5C4D /* Frameworks */ = {
isa = PBXGroup;
children = (
- 878E1AC41F73EB3F00B1565B /* libzip.5.dylib */,
- 8788A6801EE8426A00138E07 /* libipatcher.0.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 */,
+ 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 = "";
@@ -300,6 +335,7 @@
8785873F1D89CFDC008689F0 /* Sources */,
878587401D89CFDC008689F0 /* Frameworks */,
878587411D89CFDC008689F0 /* CopyFiles */,
+ 561C73F621973DC80030617C /* Version bump */,
);
buildRules = (
);
@@ -316,7 +352,7 @@
8785873B1D89CFDC008689F0 /* Project object */ = {
isa = PBXProject;
attributes = {
- LastUpgradeCheck = 0730;
+ LastUpgradeCheck = 1010;
ORGANIZATIONNAME = tihmstar;
TargetAttributes = {
878587421D89CFDC008689F0 = {
@@ -329,7 +365,6 @@
developmentRegion = English;
hasScannedForEncodings = 0;
knownRegions = (
- en,
);
mainGroup = 8785873A1D89CFDC008689F0;
productRefGroup = 878587441D89CFDC008689F0 /* Products */;
@@ -341,12 +376,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 */,
+ 56520BFB21B1BB14005BD3F7 /* cmain.c in Sources */,
8799B0C11D89DB38002F4D5F /* fls.c in Sources */,
8799B0B41D89DAF6002F4D5F /* tss.c in Sources */,
8799B0C01D89DB38002F4D5F /* fdr.c in Sources */,
@@ -358,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;
};
@@ -387,13 +448,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 = "-";
@@ -415,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;
};
@@ -431,13 +517,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 = "-";
@@ -453,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;
};
@@ -463,17 +574,20 @@
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = YES;
- HEADER_SEARCH_PATHS = "";
+ 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",
- /usr/local/Cellar/libzip/1.3.0/lib,
);
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;
};
@@ -481,17 +595,20 @@
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = YES;
- HEADER_SEARCH_PATHS = "";
+ 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",
- /usr/local/Cellar/libzip/1.3.0/lib,
);
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;
};
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 000000000..c2800f2eb
Binary files /dev/null and b/futurerestore.xcodeproj/project.xcworkspace/xcuserdata/s0uthwest.xcuserdatad/UserInterfaceState.xcuserstate differ
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
+
+
+
+
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
+}
diff --git a/futurerestore/main.cpp b/futurerestore/main.cpp
index 244ee2a58..39e6cfb41 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
@@ -248,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) {
@@ -266,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--);