diff --git a/bin/macos/ideviceenterrecovery b/bin/macos/ideviceenterrecovery new file mode 100755 index 0000000..b9701e0 Binary files /dev/null and b/bin/macos/ideviceenterrecovery differ diff --git a/bin/macos/ideviceinfo b/bin/macos/ideviceinfo new file mode 100755 index 0000000..987c39d Binary files /dev/null and b/bin/macos/ideviceinfo differ diff --git a/bin/macos/iproxy b/bin/macos/iproxy new file mode 100755 index 0000000..59ca560 Binary files /dev/null and b/bin/macos/iproxy differ diff --git a/bin/macos/irecovery b/bin/macos/irecovery new file mode 100755 index 0000000..e553ee0 Binary files /dev/null and b/bin/macos/irecovery differ diff --git a/resources/jailbreak/greenpois0n/iPhone2,1_8B117.tar b/resources/jailbreak/greenpois0n/iPhone2,1_8B117.tar new file mode 100644 index 0000000..512842f Binary files /dev/null and b/resources/jailbreak/greenpois0n/iPhone2,1_8B117.tar differ diff --git a/resources/jailbreak/greenpois0n/iPod2,1_8B117.tar b/resources/jailbreak/greenpois0n/iPod2,1_8B117.tar new file mode 100644 index 0000000..519c7be Binary files /dev/null and b/resources/jailbreak/greenpois0n/iPod2,1_8B117.tar differ diff --git a/resources/jailbreak/greenpois0n/iPod3,1_8B117.tar b/resources/jailbreak/greenpois0n/iPod3,1_8B117.tar new file mode 100644 index 0000000..f4e2922 Binary files /dev/null and b/resources/jailbreak/greenpois0n/iPod3,1_8B117.tar differ diff --git a/resources/patch/old/iPhone2,1/4.1/018-7080-079.dmg.patch b/resources/patch/old/iPhone2,1/4.1/018-7080-079.dmg.patch new file mode 100644 index 0000000..83cfe32 Binary files /dev/null and b/resources/patch/old/iPhone2,1/4.1/018-7080-079.dmg.patch differ diff --git a/resources/patch/old/iPhone2,1/4.1/iBSS.n88ap.RELEASE.dfu.patch b/resources/patch/old/iPhone2,1/4.1/iBSS.n88ap.RELEASE.dfu.patch new file mode 100644 index 0000000..d1623eb Binary files /dev/null and b/resources/patch/old/iPhone2,1/4.1/iBSS.n88ap.RELEASE.dfu.patch differ diff --git a/resources/patch/old/iPod2,1/4.1/018-7103-078.dmg.patch b/resources/patch/old/iPod2,1/4.1/018-7103-078.dmg.patch new file mode 100644 index 0000000..087a1a0 Binary files /dev/null and b/resources/patch/old/iPod2,1/4.1/018-7103-078.dmg.patch differ diff --git a/resources/patch/old/iPod2,1/4.1/iBSS.n72ap.RELEASE.dfu.patch b/resources/patch/old/iPod2,1/4.1/iBSS.n72ap.RELEASE.dfu.patch new file mode 100644 index 0000000..bf42cae Binary files /dev/null and b/resources/patch/old/iPod2,1/4.1/iBSS.n72ap.RELEASE.dfu.patch differ diff --git a/resources/patch/old/iPod3,1/4.1/018-7081-078.dmg.patch b/resources/patch/old/iPod3,1/4.1/018-7081-078.dmg.patch new file mode 100644 index 0000000..72227d1 Binary files /dev/null and b/resources/patch/old/iPod3,1/4.1/018-7081-078.dmg.patch differ diff --git a/resources/patch/old/iPod3,1/4.1/iBSS.n18ap.RELEASE.dfu.patch b/resources/patch/old/iPod3,1/4.1/iBSS.n18ap.RELEASE.dfu.patch new file mode 100644 index 0000000..dd1f1c0 Binary files /dev/null and b/resources/patch/old/iPod3,1/4.1/iBSS.n18ap.RELEASE.dfu.patch differ diff --git a/restore.sh b/restore.sh index 0bfd1a9..777eb1f 100755 --- a/restore.sh +++ b/restore.sh @@ -48,11 +48,8 @@ clean_and_exit() { } bash_version=$(/usr/bin/env bash -c 'echo ${BASH_VERSINFO[0]}') -if (( bash_version < 5 )); then - error "Your bash version ($bash_version) is too old. Install a newer version of bash to continue." \ - "* For macOS users, install bash, libimobiledevice, and libirecovery from Homebrew or MacPorts" \ - $'\n* For Homebrew: brew install bash libimobiledevice libirecovery' \ - $'\n* For MacPorts: sudo port install bash libimobiledevice libirecovery' +if (( bash_version > 3 )); then + shopt -s compat32 fi display_help() { @@ -117,18 +114,16 @@ set_tool_paths() { fi # version check - if [[ -e /etc/debian_version ]]; then + if [[ -n $UBUNTU_CODENAME ]]; then + ubuntu_ver="$(echo "$VERSION_ID" | cut -c -2)" + elif [[ -e /etc/debian_version ]]; then debian_ver=$(cat /etc/debian_version) if [[ $debian_ver == *"sid" ]]; then debian_ver="sid" else debian_ver="$(echo "$debian_ver" | cut -c -2)" fi - fi - if [[ -n $UBUNTU_CODENAME ]]; then - ubuntu_ver="$(echo "$VERSION_ID" | cut -c -2)" - fi - if [[ $ID == "fedora" || $ID == "nobara" ]]; then + elif [[ $ID == "fedora" || $ID == "nobara" ]]; then fedora_ver=$VERSION_ID fi @@ -218,26 +213,15 @@ set_tool_paths() { fi bspatch="$(which bspatch)" - ideviceenterrecovery="$(which ideviceenterrecovery)" - ideviceinfo="$(which ideviceinfo)" - iproxy="$(which iproxy)" + ideviceenterrecovery="$(which ideviceenterrecovery 2>/dev/null)" + ideviceinfo="$(which ideviceinfo 2>/dev/null)" + iproxy="$(which iproxy 2>/dev/null)" ipwnder32="$dir/ipwnder32" - irecovery="$(which irecovery)" + irecovery="$(which irecovery 2>/dev/null)" ping="ping -c1" sha1sum="$(which shasum) -a 1" sha256sum="$(which shasum) -a 256" - if [[ -z $ideviceinfo || -z $irecovery ]]; then - error "Install bash, libimobiledevice and libirecovery from Homebrew or MacPorts to continue." \ - "* For Homebrew: brew install bash libimobiledevice libirecovery" \ - $'\n* For MacPorts: sudo port install bash libimobiledevice libirecovery' - fi - - if [[ $(uname -m) != "x86_64" && ! $(/usr/bin/pgrep oahd >/dev/null 2>&1) ]]; then - warn "Rosetta 2 does not seem to be installed. Please install Rosetta 2 to continue." - print "* If you already have Rosetta 2, ignore this message." - fi - elif [[ $OSTYPE == "msys" ]]; then platform="windows" platform_ver="$(uname)" @@ -288,6 +272,11 @@ set_tool_paths() { irecovery+="$dir/irecovery" sha1sum="$(which sha1sum)" sha256sum="$(which sha256sum)" + elif [[ -z $ideviceinfo || -z $irecovery ]]; then + ideviceenterrecovery="$dir/ideviceenterrecovery" + ideviceinfo="$dir/ideviceinfo" + iproxy="$dir/iproxy" + irecovery="$dir/irecovery" fi if [[ $platform != "linux" ]]; then jq="$dir/jq" @@ -566,7 +555,9 @@ device_get_info() { iPad3,4 | iPad4,[12345] | iPhone5,[34] | iPhone6,[12] ) device_use_vers="10.3.3" device_use_build="14G60" - ;;& + ;; + esac + case $device_type in iPad4,[123456789] | iPhone6,[12] | iPhone7,[12] | iPod7,1 ) device_latest_vers="12.5.7" device_latest_build="16H81" @@ -594,7 +585,9 @@ device_get_info() { iPad4,[235] | iPhone5,[34] | iPhone6,[12] ) # MDM9615 10.3.3 (5C, 5S, air, mini2) device_use_bb="Mav7Mav8-7.60.00.Release.bbfw" device_use_bb_sha1="f397724367f6bed459cf8f3d523553c13e8ae12c" - ;;& + ;; + esac + case $device_type in iPad4,[235689] | iPhone6,[12] ) # MDM9615 12.5.7 device_latest_bb="Mav7Mav8-10.80.02.Release.bbfw" device_latest_bb_sha1="f5db17f72a78d807a791138cd5ca87d2f5e859f0" @@ -736,7 +729,7 @@ device_enter_mode() { local sendfiles=() local device_det=$(echo "$device_vers" | cut -c 1) - if [[ $device_mode != "Normal" ]] || [[ $device_proc == 4 && $device_type != "iPhone3"* ]]; then + if [[ $device_mode != "Normal" ]]; then device_enter_mode pwnDFU return fi @@ -1216,8 +1209,7 @@ ipsw_preference_set() { 7* | 6* | 5* | 4.2.1 | 4.1 ) ipsw_canjailbreak=1;; esac - if [[ $device_target_vers == "$device_latest_vers" && $ipsw_canjailbreak != 1 ]] || - (( device_proc >= 7 )) || [[ $device_target_vers == "4.1" ]]; then + if [[ $device_target_vers == "$device_latest_vers" && $ipsw_canjailbreak != 1 ]] || (( device_proc >= 7 )); then return fi @@ -1230,6 +1222,7 @@ ipsw_preference_set() { fi if [[ $device_target_vers == "3.1.3" || $device_target_vers == "4.0" ]]; then + log "Jailbreak Option is always enabled for $device_target_vers" ipsw_jailbreak=1 elif [[ $device_target_other != 1 || $ipsw_canjailbreak == 1 ]] && [[ -z $ipsw_jailbreak ]]; then input "Jailbreak Option" @@ -1596,9 +1589,11 @@ ipsw_prepare_32bit_paths() { local str2 if [[ $2 == "target" ]]; then case $comp in - "AppleLogo" ) str2="${name/applelogo/"applelogo7"}";;& - "RecoveryMode" ) str2="${name/recoverymode/"recoverymode7"}";;& - "NewiBoot" ) str2="${name/iBoot/"iBoot$(echo $device_target_vers | cut -c 1)"}";;& + "AppleLogo" ) str2="${name/applelogo/"applelogo7"}";; + "RecoveryMode" ) str2="${name/recoverymode/"recoverymode7"}";; + "NewiBoot" ) str2="${name/iBoot/"iBoot$(echo $device_target_vers | cut -c 1)"}";; + esac + case $comp in "AppleLogo" | "RecoveryMode" | "NewiBoot" ) str+="$str2" echo "$str2" >> $FirmwareBundle/manifest @@ -1723,7 +1718,9 @@ ipsw_prepare_bundle() { case $vers in 6* ) echo -e "RamdiskPackagepackagesrc/bin.tariosios6" >> $NewPlist;; 7* ) error "iOS 7 targets are not supported.";; - 8* | 9* ) echo -e "packagesrc/ios9.tarRamdiskPackagepackagesrc/bin.tariosios" >> $NewPlist;;& + 8* | 9* ) echo -e "packagesrc/ios9.tarRamdiskPackagepackagesrc/bin.tariosios" >> $NewPlist;; + esac + case $vers in 8* ) echo -e "8" >> $NewPlist;; 9* ) echo -e "9" >> $NewPlist;; esac @@ -2070,7 +2067,9 @@ ipsw_prepare_custom() { "3.1.3" | "4.0" ) "$dir/hfsplus" out.dmg add ../resources/jailbreak/fstab_old private/etc/fstab;; "4.2.1" | "4.1" ) "$dir/hfsplus" out.dmg add ../resources/jailbreak/fstab_old private/etc/fstab - "$dir/hfsplus" out.dmg mv sbin/launchd sbin/punchd + if [[ $device_target_vers == "4.2.1" ]]; then + "$dir/hfsplus" out.dmg mv sbin/launchd sbin/punchd + fi "$dir/hfsplus" out.dmg untar ../resources/jailbreak/greenpois0n/${device_type}_${device_target_build}.tar ;; * ) "$dir/hfsplus" out.dmg untar ../resources/jailbreak/unthredeh4il.tar;; @@ -2386,12 +2385,17 @@ restore_prepare() { elif [[ $device_target_vers == "4.1" || $device_target_vers == "$device_latest_vers" ]]; then if [[ $ipsw_jailbreak == 1 ]]; then shsh_save version $device_target_vers - device_enter_mode kDFU + device_enter_mode pwnDFU restore_idevicerestore else restore_latest fi - elif [[ $device_type == "iPhone2,1" || $device_type == "iPod2,1" ]]; then + elif [[ $device_type == "iPhone3,1" ]]; then + # powdersn0w 4.3.x-6.1.3 + shsh_save version 7.1.2 + device_enter_mode pwnDFU + restore_idevicerestore + else device_enter_mode pwnDFU restore_latest custom if [[ $device_type == "iPhone2,1" ]]; then @@ -2401,11 +2405,6 @@ restore_prepare() { if [[ $device_target_vers == "3"* ]]; then print "* For device activation on Linux, go to: Other Utilities -> Attempt Activation" fi - else - # powdersn0w 4.3.x-6.1.3 - shsh_save version 7.1.2 - device_enter_mode pwnDFU - restore_idevicerestore fi ;; @@ -2454,19 +2453,18 @@ ipsw_prepare() { 4 ) if [[ $device_target_other == 1 ]]; then ipsw_prepare_32bit - elif [[ $device_target_vers == "$device_latest_vers" ]] || - [[ $device_target_vers == "4.1" ]]; then + elif [[ $device_target_vers == "$device_latest_vers" ]]; then if [[ $ipsw_jailbreak == 1 ]]; then ipsw_prepare_32bit fi - elif [[ $device_type == "iPhone2,1" || $device_type == "iPod2,1" ]]; then - ipsw_prepare_custom - else + elif [[ $device_type == "iPhone3,1" ]]; then # powdersn0w 4.3.x-6.1.3 if [[ $device_target_vers == "4.3"* ]]; then shsh_save version 7.1.2 fi ipsw_prepare_powder + else + ipsw_prepare_custom fi ;; @@ -2613,7 +2611,11 @@ device_ramdisk() { mv iBSS iBEC AppleLogo.dec DeviceTree.dec Kernelcache.dec Ramdisk.dmg ../saved/$device_type/ramdisk 2>/dev/null - device_enter_mode kDFU + if [[ $device_proc == 4 ]]; then + device_enter_mode pwnDFU + else + device_enter_mode kDFU + fi log "Sending iBSS..." $irecovery -f ../saved/$device_type/ramdisk/iBSS if [[ $device_type != "iPod2,1" ]]; then @@ -2669,12 +2671,14 @@ shsh_save_onboard() { print "* You may also need iTunes 12.4.3 or older for shshdump to work" pause fi - device_enter_mode kDFU if [[ $device_proc == 4 ]]; then + device_enter_mode pwnDFU patch_ibss log "Sending iBSS..." $irecovery -f pwnediBSS sleep 5 + else + device_enter_mode kDFU fi patch_ibec log "Sending iBEC..." @@ -2797,7 +2801,9 @@ menu_shsh() { iPad4,[12345] | iPhone6,[12] ) menu_items+=("iOS 10.3.3");; iPad2,[1234567] | iPad3,[123456] | iPhone4,1 | iPhone5,[12] | iPod5,1 ) - menu_items+=("iOS 8.4.1");;& + menu_items+=("iOS 8.4.1");; + esac + case $device_type in iPad2,[123] | iPhone4,1 ) menu_items+=("iOS 6.1.3");; esac @@ -2819,18 +2825,17 @@ menu_shsh() { "iOS 10.3.3" ) device_target_vers="10.3.3" device_target_build="14G60" - ;;& - + ;; "iOS 8.4.1" ) device_target_vers="8.4.1" device_target_build="12H321" - ;;& - + ;; "iOS 6.1.3" ) device_target_vers="6.1.3" device_target_build="10B329" - ;;& - + ;; + esac + case $selected in "iOS"* ) mode="save-ota-blobs";; "Onboard Blobs" ) menu_shsh_onboard;; "Cydia Blobs" ) mode="save-cydia-blobs";; @@ -2886,20 +2891,23 @@ menu_restore() { iPad4,[12345] | iPhone6,[12] ) menu_items+=("iOS 10.3.3");; iPad2,[1234567] | iPad3,[123456] | iPhone4,1 | iPhone5,[12] | iPod5,1 ) - menu_items+=("iOS 8.4.1");;& + menu_items+=("iOS 8.4.1");; + esac + case $device_type in iPad2,[123] | iPhone4,1 ) - menu_items+=("iOS 6.1.3");;& - iPhone3,1 ) - menu_items+=("powdersn0w (any iOS)");; + menu_items+=("iOS 6.1.3");; + esac + case $device_type in iPhone4,1 | iPhone5,[12] | iPad2,4 | iPod5,1 ) menu_items+=("Other (powdersn0w 7.1.x blobs)");; + iPhone3,1 ) + menu_items+=("powdersn0w (any iOS)");; iPhone2,1 ) - menu_items+=("iOS 5.1.1" "iOS 4.3.3");;& - iPhone2,1 | iPod2,1 | iPod3,1 ) - menu_items+=("iOS 4.1");;& - iPhone2,1 ) - menu_items+=("iOS 4.0" "iPhoneOS 3.1.3");; + menu_items+=("iOS 5.1.1" "iOS 4.3.3" "iOS 4.1" "iOS 4.0" "iPhoneOS 3.1.3");; + iPod3,1 ) + menu_items+=("iOS 4.1");; iPod2,1 ) + menu_items+=("iOS 4.1") if [[ $device_newbr == 0 ]]; then menu_items+=("iOS 4.0") fi @@ -3110,8 +3118,9 @@ menu_ipsw() { elif [[ $1 == *"powdersn0w"* ]]; then device_target_powder=1 fi - ;;& - + ;; + esac + case $selected in "Start Restore" ) mode="downgrade";; "Create IPSW" ) mode="custom-ipsw";; "Select Target IPSW" ) menu_ipsw_browse "$1";; @@ -3283,14 +3292,16 @@ menu_other() { fi menu_items+=("SSH Ramdisk") fi - case $device_type in - iPhone3,1 ) menu_items+=("Disable/Enable Exploit");;& - iPhone3,[123] | iPhone4,1 | iPhone5,[1234] | iPad2,4 | iPod5,1 ) menu_items+=("Clear NVRAM");; - esac - menu_items+=("Attempt Activation") + if [[ $device_type == "iPhone3,1" ]]; then + menu_items+=("Disable/Enable Exploit") + fi + if (( device_proc < 7 )); then + menu_items+=("Clear NVRAM") + fi if [[ $device_type == "iPhone2,1" ]]; then menu_items+=("Install alloc8 Exploit") fi + menu_items+=("Attempt Activation") fi if [[ $device_proc != 8 ]]; then menu_items+=("Create Custom IPSW") @@ -3370,13 +3381,16 @@ main() { fi case $mode in - "custom-ipsw" | "downgrade" ) + "custom-ipsw" ) ipsw_preference_set ipsw_prepare - ;;& - - "custom-ipsw" ) log "Done creating custom IPSW";; - "downgrade" ) restore_prepare;; + log "Done creating custom IPSW" + ;; + "downgrade" ) + ipsw_preference_set + ipsw_prepare + restore_prepare + ;; "save-ota-blobs" ) shsh_save;; "kdfu" ) device_enter_mode kDFU;; "remove4" ) device_remove4;;