Add IPA install (sideload and appsync), and other

and futurerestoring for A8/A9/A10 (iOS 15) devices
This commit is contained in:
LukeZGD 2023-12-26 17:29:08 +08:00
parent 28881bc514
commit 0174fd8dfe
28 changed files with 216 additions and 16 deletions

View File

@ -19,6 +19,9 @@
- Only unsupported versions are iOS 9.0.x and iPad 2 on 4.3.x - Only unsupported versions are iOS 9.0.x and iPad 2 on 4.3.x
- Hacktivation for iPhone 2G, 3G, 3GS (activate without valid SIM card) - Hacktivation for iPhone 2G, 3G, 3GS (activate without valid SIM card)
- Restore to iOS 10.3.3 (signed OTA version) on supported A7 devices - Restore to iOS 10.3.3 (signed OTA version) on supported A7 devices
- Install IPA files for supported devices with AppSync installed
- Sideload IPA files for supported devices on Linux
- Save SHSH blobs for signed OTA versions for supported devices
- Save onboard and Cydia SHSH blobs for 32-bit devices - Save onboard and Cydia SHSH blobs for 32-bit devices
- Enter pwned iBSS/kDFU mode for supported 32-bit devices - Enter pwned iBSS/kDFU mode for supported 32-bit devices
- Boot SSH Ramdisk for 32-bit devices - Boot SSH Ramdisk for 32-bit devices
@ -71,11 +74,11 @@
- iPhone 2G, 3G, 3GS, 4, 4S, 5, 5C - iPhone 2G, 3G, 3GS, 4, 4S, 5, 5C
- iPad 1, 2, 3, 4, mini 1 - iPad 1, 2, 3, 4, mini 1
- iPod touch 1, 2, 3, 4, 5 - iPod touch 1, 2, 3, 4, 5
- Restoring with SHSH blobs is also supported on most A7/A8 devices: - Restoring with SHSH blobs is also supported on some 64-bit devices:
- See [SEP/BB Compatibility Chart](https://docs.google.com/spreadsheets/d/1Mb1UNm6g3yvdQD67M413GYSaJ4uoNhLgpkc7YKi3LBs/edit#gid=1191207636) for iOS versions that can be restored to - See [SEP/BB Compatibility Chart](https://docs.google.com/spreadsheets/d/1Mb1UNm6g3yvdQD67M413GYSaJ4uoNhLgpkc7YKi3LBs/edit#gid=1191207636) for iOS versions that can be restored to
- iPhone 5S, 6, 6 Plus - iPhone 5S, 6, 6 Plus, 6S, 6S Plus, SE 2016, 7
- iPad Air 1, mini 2, mini 3 - iPad Air 1, Air 2, mini 2, mini 3, mini 4
- iPod touch 6 - iPod touch 6, 7
- Restoring with powdersn0w is supported on the following devices and target version range: - Restoring with powdersn0w is supported on the following devices and target version range:
- iPhone 4 GSM - iOS 4.0 to 7.1.1 (4.2.1 is not functional) - iPhone 4 GSM - iOS 4.0 to 7.1.1 (4.2.1 is not functional)
- iPhone 4 CDMA - iOS 5.0 to 7.1.1 (4.2.x is not functional) - iPhone 4 CDMA - iOS 5.0 to 7.1.1 (4.2.x is not functional)
@ -118,10 +121,14 @@
- [libimobiledevice](https://github.com/libimobiledevice/libimobiledevice) - libimobiledevice - [libimobiledevice](https://github.com/libimobiledevice/libimobiledevice) - libimobiledevice
- [libirecovery](https://github.com/libimobiledevice/libirecovery) - libimobiledevice - [libirecovery](https://github.com/libimobiledevice/libirecovery) - libimobiledevice
- [libideviceactivation](https://github.com/libimobiledevice/libideviceactivation) - libimobiledevice - [libideviceactivation](https://github.com/libimobiledevice/libideviceactivation) - libimobiledevice
- [ideviceinstaller](https://github.com/libimobiledevice/ideviceinstaller) - libimobiledevice
- [anisette-server](https://github.com/Dadoum/Provision) from Provision - Dadoum (used for sideloading on Linux)
- [AltServer-Linux](https://github.com/NyaMisty/AltServer-Linux) - NyaMisty (used for sideloading on Linux)
- [tsschecker](https://github.com/tihmstar/tsschecker) - tihmstar; [1Conan fork](https://github.com/1Conan/tsschecker) v413 - [tsschecker](https://github.com/tihmstar/tsschecker) - tihmstar; [1Conan fork](https://github.com/1Conan/tsschecker) v413
- [futurerestore](https://github.com/tihmstar/futurerestore) - tihmstar; - [futurerestore](https://github.com/tihmstar/futurerestore) - tihmstar;
- [LukeZGD fork](https://github.com/LukeZGD/futurerestore) used on Linux for restoring 32-bit devices - [LukeZGD fork](https://github.com/LukeZGD/futurerestore) used on Linux for restoring 32-bit devices
- [LukeeGD fork](https://github.com/LukeeGD/futurerestore) used on Linux for restoring A7/A8 devices - [LukeeGD fork](https://github.com/LukeeGD/futurerestore) used on Linux for restoring A7/A8 devices
- [new futurerestore](https://github.com/futurerestore/futurerestore/) used for restoring A8/A9/A10 devices that support iOS 15(.8)
- [iBoot32Patcher](https://github.com/dora2-iOS/iBoot32Patcher/) - dora2ios fork - [iBoot32Patcher](https://github.com/dora2-iOS/iBoot32Patcher/) - dora2ios fork
- [idevicerestore](https://github.com/libimobiledevice/idevicerestore) - libimobiledevice; [LukeZGD fork](https://github.com/LukeZGD/idevicerestore) - [idevicerestore](https://github.com/libimobiledevice/idevicerestore) - libimobiledevice; [LukeZGD fork](https://github.com/LukeZGD/idevicerestore)
- [idevicererestore](https://github.com/LukeZGD/daibutsuCFW/tree/main/src/idevicererestore) from daibutsuCFW (used on custom IPSW restores for A5/A6 devices) - [idevicererestore](https://github.com/LukeZGD/daibutsuCFW/tree/main/src/idevicererestore) from daibutsuCFW (used on custom IPSW restores for A5/A6 devices)

BIN
bin/linux/arm64/ideviceinstaller Executable file

Binary file not shown.

BIN
bin/linux/armhf/ideviceinstaller Executable file

Binary file not shown.

BIN
bin/linux/x86_64/ideviceinstaller Executable file

Binary file not shown.

BIN
bin/macos/ideviceinstaller Executable file

Binary file not shown.

View File

@ -0,0 +1 @@
1871dece87f78204b4a6de00415ad7ec1bdb8109

View File

@ -0,0 +1 @@
https://updates.cdn-apple.com/2023FallFCS/fullrestores/042-76437/E826C2CC-D34C-405F-B582-3F877988C052/iPad_64bit_TouchID_15.8_19H370_Restore.ipsw

View File

@ -0,0 +1 @@
1871dece87f78204b4a6de00415ad7ec1bdb8109

View File

@ -0,0 +1 @@
https://updates.cdn-apple.com/2023FallFCS/fullrestores/042-76437/E826C2CC-D34C-405F-B582-3F877988C052/iPad_64bit_TouchID_15.8_19H370_Restore.ipsw

View File

@ -0,0 +1 @@
1871dece87f78204b4a6de00415ad7ec1bdb8109

View File

@ -0,0 +1 @@
https://updates.cdn-apple.com/2023FallFCS/fullrestores/042-76437/E826C2CC-D34C-405F-B582-3F877988C052/iPad_64bit_TouchID_15.8_19H370_Restore.ipsw

View File

@ -0,0 +1 @@
1871dece87f78204b4a6de00415ad7ec1bdb8109

View File

@ -0,0 +1 @@
https://updates.cdn-apple.com/2023FallFCS/fullrestores/042-76437/E826C2CC-D34C-405F-B582-3F877988C052/iPad_64bit_TouchID_15.8_19H370_Restore.ipsw

View File

@ -0,0 +1 @@
8c2691a5845fbb3be110730f4a0359bd943305d9

View File

@ -0,0 +1 @@
https://updates.cdn-apple.com/2023FallFCS/fullrestores/042-76337/06663E02-EF9F-465C-A958-AA7F3B238C2A/iPhone_4.7_15.8_19H370_Restore.ipsw

View File

@ -0,0 +1 @@
35c4377214fabaa2878925e7724acadff8a20e20

View File

@ -0,0 +1 @@
https://updates.cdn-apple.com/2023FallFCS/fullrestores/042-76338/0D898C88-1E03-42FD-A160-93DDEDD358FA/iPhone_5.5_15.8_19H370_Restore.ipsw

View File

@ -0,0 +1 @@
c4668a350a94cfbfb43389122fce27df4a747699

View File

@ -0,0 +1 @@
https://updates.cdn-apple.com/2023FallFCS/fullrestores/042-76384/1169EC5F-D667-4CD9-B1EB-8ACAC3B14F89/iPhone_4.0_64bit_15.8_19H370_Restore.ipsw

View File

@ -0,0 +1 @@
a3bea9e09025ccb8af1abcf30d48d2c51b8a0c4d

View File

@ -0,0 +1 @@
https://updates.cdn-apple.com/2023FallFCS/fullrestores/042-76317/60642D20-45C8-4BEB-83C9-898F5B5FB257/iPhone_4.7_P3_15.8_19H370_Restore.ipsw

View File

@ -0,0 +1 @@
0935fd29c1f77dd328b1bbdcf5e6b077e1501223

View File

@ -0,0 +1 @@
https://updates.cdn-apple.com/2023FallFCS/fullrestores/042-76582/616E5E74-0792-4444-B8C9-FF0BFA54B3CC/iPhone_5.5_P3_15.8_19H370_Restore.ipsw

View File

@ -0,0 +1 @@
a3bea9e09025ccb8af1abcf30d48d2c51b8a0c4d

View File

@ -0,0 +1 @@
https://updates.cdn-apple.com/2023FallFCS/fullrestores/042-76317/60642D20-45C8-4BEB-83C9-898F5B5FB257/iPhone_4.7_P3_15.8_19H370_Restore.ipsw

View File

@ -0,0 +1 @@
0935fd29c1f77dd328b1bbdcf5e6b077e1501223

View File

@ -0,0 +1 @@
https://updates.cdn-apple.com/2023FallFCS/fullrestores/042-76582/616E5E74-0792-4444-B8C9-FF0BFA54B3CC/iPhone_5.5_P3_15.8_19H370_Restore.ipsw

View File

@ -32,7 +32,7 @@ pause() {
} }
clean() { clean() {
kill $httpserver_pid $iproxy_pid 2>/dev/null kill $httpserver_pid $iproxy_pid $anisette_pid 2>/dev/null
popd &>/dev/null popd &>/dev/null
rm -rf "$(dirname "$0")/tmp/"* "$(dirname "$0")/iP"*/ "$(dirname "$0")/tmp/" 2>/dev/null rm -rf "$(dirname "$0")/tmp/"* "$(dirname "$0")/iP"*/ "$(dirname "$0")/tmp/" 2>/dev/null
if [[ $platform == "macos" ]]; then if [[ $platform == "macos" ]]; then
@ -719,8 +719,12 @@ device_get_info() {
device_proc=6;; # A6 device_proc=6;; # A6
iPad4,[123456789] | iPhone6,[12] ) iPad4,[123456789] | iPhone6,[12] )
device_proc=7;; # A7 device_proc=7;; # A7
iPhone7,[12] | iPod7,1 ) iPhone7,[12] | iPad5,[1234] | iPod7,1 )
device_proc=8;; # A8 device_proc=8;; # A8
iPhone8,[124] )
device_proc=9;; # A9
iPhone9,[1234] | iPod9,1 )
device_proc=10;; # A10
esac esac
if [[ -z $device_proc ]]; then if [[ -z $device_proc ]]; then
print "* Device: $device_type (${device_model}ap) in $device_mode mode" print "* Device: $device_type (${device_model}ap) in $device_mode mode"
@ -782,8 +786,8 @@ device_get_info() {
device_latest_build="16H81" device_latest_build="16H81"
;; ;;
iPad5,[1234] | iPhone8,[124] | iPhone9,[1234] | iPod9,1 ) iPad5,[1234] | iPhone8,[124] | iPhone9,[1234] | iPod9,1 )
device_latest_vers="15.7.9" device_latest_vers="15.8"
device_latest_build="19H365" device_latest_build="19H370"
;; ;;
esac esac
# set device_use_bb, device_use_bb_sha1 (what baseband to use for ota/other) # set device_use_bb, device_use_bb_sha1 (what baseband to use for ota/other)
@ -3139,7 +3143,9 @@ restore_download_bbsep() {
local build_id local build_id
local baseband_sha1 local baseband_sha1
local restore_baseband_check local restore_baseband_check
if [[ $device_latest_vers == "$device_use_vers" || $device_target_vers == "10"* ]]; then if [[ $device_latest_vers == "15"* ]]; then
return
elif [[ $device_latest_vers == "$device_use_vers" || $device_target_vers == "10"* ]]; then
build_id="$device_use_build" build_id="$device_use_build"
restore_baseband="$device_use_bb" restore_baseband="$device_use_bb"
baseband_sha1="$device_use_bb_sha1" baseband_sha1="$device_use_bb_sha1"
@ -3322,6 +3328,39 @@ restore_futurerestore() {
# sep args for 64bit # sep args for 64bit
ExtraArr+=("-s" "$restore_sep" "-m" "$restore_manifest") ExtraArr+=("-s" "$restore_sep" "-m" "$restore_manifest")
fi fi
if (( device_proc < 7 )); then
futurerestore2+="_old"
elif [[ $device_latest_vers == "15"* ]]; then
futurerestore2="../saved/futurerestore_$platform"
ExtraArr=("--latest-sep")
if [[ $restore_baseband == 0 ]]; then
ExtraArr+=("--no-baseband")
else
ExtraArr+=("--latest-baseband")
fi
log "New futurerestore will be used for this restore: https://github.com/futurerestore/futurerestore"
if [[ $platform == "linux" && $platform_arch != "x86_64" ]]; then
log "New futurerestore is not supported on this arch. x86_64 only."
return
fi
if [[ ! -e $futurerestore2 ]]; then
local url="https://nightly.link/futurerestore/futurerestore/workflows/ci/main/"
local file="futurerestore-"
case $platform in
"macos" ) file+="macOS-RELEASE.zip";;
"linux" ) file+="Linux-x86_64-RELEASE.zip";;
esac
url+="$file"
log "Downloading futurerestore: $url"
curl -LO "$url"
unzip -q "$file" -d .
tar -xJvf futurerestore*.xz
mv futurerestore $futurerestore2
chmod +x $futurerestore2
fi
else
futurerestore2+="_new"
fi
if [[ -n "$1" ]]; then if [[ -n "$1" ]]; then
# custom arg, either --use-pwndfu or --skip-blob # custom arg, either --use-pwndfu or --skip-blob
ExtraArr+=("$1") ExtraArr+=("$1")
@ -3329,13 +3368,6 @@ restore_futurerestore() {
if [[ $debug_mode == 1 ]]; then if [[ $debug_mode == 1 ]]; then
ExtraArr+=("-d") ExtraArr+=("-d")
fi fi
if (( device_proc < 7 )); then
futurerestore2+="_old"
elif [[ $device_latest_vers == "15"* ]]; then
:
else
futurerestore2+="_new"
fi
if [[ $platform == "macos" && $device_target_other != 1 && if [[ $platform == "macos" && $device_target_other != 1 &&
$device_target_vers == "10.3.3" && $device_proc == 7 ]]; then $device_target_vers == "10.3.3" && $device_proc == 7 ]]; then
ipsw_path="$ipsw_custom" ipsw_path="$ipsw_custom"
@ -4230,6 +4262,14 @@ menu_main() {
if (( device_proc < 8 )) && [[ $device_proc != 1 ]]; then if (( device_proc < 8 )) && [[ $device_proc != 1 ]]; then
menu_items+=("Save SHSH Blobs") menu_items+=("Save SHSH Blobs")
fi fi
if [[ $device_mode == "Normal" ]]; then
if [[ $platform == "linux" ]]; then
case $device_vers in
8* | 9* | 1* ) menu_items+=("Sideload IPA");;
esac
fi
menu_items+=("Install IPA (AppSync)")
fi
menu_items+=("Other Utilities" "Exit") menu_items+=("Other Utilities" "Exit")
select opt in "${menu_items[@]}"; do select opt in "${menu_items[@]}"; do
selected="$opt" selected="$opt"
@ -4239,12 +4279,68 @@ menu_main() {
"Restore/Downgrade" ) menu_restore;; "Restore/Downgrade" ) menu_restore;;
"Jailbreak Device" ) mode="jailbreak";; "Jailbreak Device" ) mode="jailbreak";;
"Save SHSH Blobs" ) menu_shsh;; "Save SHSH Blobs" ) menu_shsh;;
"Install IPA (AppSync)" | "Sideload IPA" ) menu_ipa "$selected";;
"Other Utilities" ) menu_other;; "Other Utilities" ) menu_other;;
"Exit" ) mode="exit";; "Exit" ) mode="exit";;
esac esac
done done
} }
menu_ipa() {
local menu_items
local selected
local back
ipa_path=
while [[ -z "$mode" && -z "$back" ]]; do
menu_items=("Select IPA")
menu_print_info
if [[ $1 == "Install"* ]]; then
print "* Make sure that AppSync Unified is installed on your device."
else
print "* Sideload IPA is for iOS 9 and newer. (may or may not work on 8)"
print "* Sideloading will require an Apple ID."
print "* Your Apple ID and password will only be sent to Apple servers."
fi
echo
if [[ -n $ipa_path ]]; then
print "* Selected IPA: $ipa_path"
menu_items+=("Install IPA")
else
print "* Select IPA to install"
fi
menu_items+=("Go Back")
echo
print " > Main Menu > $1"
input "Select an option:"
select opt in "${menu_items[@]}"; do
selected="$opt"
break
done
case $selected in
"Select IPA" ) menu_ipa_browse;;
"Install IPA" )
if [[ $1 == "Install"* ]]; then
mode="ideviceinstaller"
else
mode="altserver_linux"
fi
;;
"Go Back" ) back=1;;
esac
done
}
menu_ipa_browse() {
local newpath
input "Select your IPA file in the file selection window."
newpath="$($zenity --file-selection --file-filter='IPA | *.ipa' --title="Select IPA file")"
[[ ! -s "$newpath" ]] && read -p "$(input "Enter path to IPA file (or press Ctrl+C to cancel): ")" newpath
[[ ! -s "$newpath" ]] && return
log "Selected IPA file: $newpath"
ipa_path="$newpath"
}
menu_shsh() { menu_shsh() {
local menu_items local menu_items
local selected local selected
@ -5015,6 +5111,24 @@ device_jailbreakrd() {
* ) * )
warn "This version ($device_vers) is not supported for jailbreaking with SSHRD." warn "This version ($device_vers) is not supported for jailbreaking with SSHRD."
print "* Supported versions are: 3.1.3 to 9.3.4 (excluding 9.0.x)" print "* Supported versions are: 3.1.3 to 9.3.4 (excluding 9.0.x)"
;;
esac
case $device_vers in
9.0* )
print "* For this version, use Pangu9, or download openpwnage and sideload it to your device."
print "* https://ios.cfw.guide/installing-pangu9/"
print "* https://github.com/0xilis/openpwnage"
return
;;
9.3.[56] )
print "* For this version, download kok3shi9 and sideload it to your device."
print "* https://kok3shidoll.web.app/kok3shi9.html"
return
;;
10* )
print "* For this version, download kok3shiX or socket and sideload it to your device."
print "* https://kok3shidoll.github.io/download/kokeshi/kokeshiX_v1.0_alpha_2.ipa"
print "* https://github.com/staturnzz/socket"
return return
;; ;;
esac esac
@ -5207,6 +5321,61 @@ device_enter_ramdisk() {
device_ramdisk device_ramdisk
} }
device_ideviceinstaller() {
log "Installing selected IPA to device using ideviceinstaller..."
"$dir/ideviceinstaller" install "$ipa_path"
}
device_altserver_linux() {
local altserver="../saved/anisette-server-$platform"
local anisette="../saved/AltServer-$platform"
local arch="$platform_arch"
case $arch in
"armhf" ) arch="armv7";;
"arm64" ) arch="aarch64";;
esac
if [[ $platform == "linux" ]]; then
altserver+="_$arch"
anisette+="_$arch"
fi
if [[ ! -e $altserver ]]; then
log "Downloading AltServer-Linux..."
curl -LO https://github.com/NyaMisty/AltServer-Linux/releases/download/v0.0.5/AltServer-$arch
mv AltServer-$arch $altserver
fi
if [[ ! -e $anisette ]]; then
log "Downloading Anisette server..."
curl -LO https://github.com/Dadoum/Provision/releases/download/2.2.0/anisette-server-$arch
mv anisette-server-$arch $anisette
fi
chmod +x $altserver $anisette
log "Running Anisette"
$anisette &
anisette_pid=$!
local ready=0
log "Waiting for Anisette"
while [[ $ready != 1 ]]; do
[[ $(curl 127.0.0.1:6969 2>/dev/null) ]] && ready=1
sleep 1
done
export ALTSERVER_ANISETTE_SERVER=http://127.0.0.1:6969
altserver_linux="env ALTSERVER_ANISETTE_SERVER=$ALTSERVER_ANISETTE_SERVER $altserver"
log "Enter Apple ID details to continue."
print "* Your Apple ID and password will only be sent to Apple servers."
local apple_id
local apple_pass
while [[ -z $apple_id ]]; do
read -p "$(input 'Apple ID: ')" apple_id
done
while [[ -z $apple_pass ]]; do
read -s -p "$(input 'Password: ')" apple_pass
done
log "Running AltServer-Linux with given Apple ID details..."
pushd ../saved >/dev/null
$altserver_linux -u $device_udid -a "$apple_id" -p "$apple_pass" "$ipa_path"
popd >/dev/null
}
main() { main() {
clear clear
print " *** Legacy iOS Kit ***" print " *** Legacy iOS Kit ***"
@ -5300,6 +5469,8 @@ main() {
"getversion" ) device_ramdisk getversion;; "getversion" ) device_ramdisk getversion;;
"shutdown" ) "$dir/idevicediagnostics" shutdown;; "shutdown" ) "$dir/idevicediagnostics" shutdown;;
"restart" ) "$dir/idevicediagnostics" restart;; "restart" ) "$dir/idevicediagnostics" restart;;
"ideviceinstaller" ) device_ideviceinstaller;;
"altserver_linux" ) device_altserver_linux;;
* ) :;; * ) :;;
esac esac