Menu revamp. there is an option to use old menu for those who prefer that

This commit is contained in:
LukeeGD 2025-01-02 11:16:10 +08:00
parent 00cf24f7c1
commit d6514a70da

View File

@ -100,6 +100,7 @@ List of options:
--no-color Disable colors for script output --no-color Disable colors for script output
--no-device Enable no device mode --no-device Enable no device mode
--no-version-check Disable script version checking --no-version-check Disable script version checking
--old-menu Use the old menus with number select and y/n
--pwn Pwn the connected device --pwn Pwn the connected device
--sshrd Enter SSH ramdisk mode (requires additional arguments) --sshrd Enter SSH ramdisk mode (requires additional arguments)
--sshrd-menu Re-enter SSH ramdisk menu (device must be in SSH ramdisk mode) --sshrd-menu Re-enter SSH ramdisk menu (device must be in SSH ramdisk mode)
@ -138,6 +139,122 @@ zip() {
$zip2 "$@" || error "An error occurred with the zip operation: $*" $zip2 "$@" || error "An error occurred with the zip operation: $*"
} }
# from https://unix.stackexchange.com/questions/146570/arrow-key-enter-menu#415155
function select_option {
if [[ $menu_old == 1 ]]; then
select opt in "$@"; do
selected=$((REPLY-1))
break
done
return $selected
fi
# little helpers for terminal print control and key input
ESC=$( printf "\033")
cursor_blink_on() { printf "$ESC[?25h"; }
cursor_blink_off() { printf "$ESC[?25l"; }
cursor_to() { printf "$ESC[$1;${2:-1}H"; }
print_option() { printf " $1 "; }
print_selected() { printf " $ESC[7m $1 $ESC[27m"; }
get_cursor_row() { IFS=';' read -sdR -p $'\E[6n' ROW COL; echo ${ROW#*[}; }
key_input() { read -s -n3 key 2>/dev/null >&2
if [[ $key = $ESC[A ]]; then echo up; fi
if [[ $key = $ESC[B ]]; then echo down; fi
if [[ $key = "" ]]; then echo enter; fi; }
# initially print empty new lines (scroll down if at bottom of screen)
for opt; do printf "\n"; done
# determine current screen position for overwriting the options
local lastrow=`get_cursor_row`
local startrow=$(($lastrow - $#))
# ensure cursor and input echoing back on upon a ctrl+c during read -s
trap "cursor_blink_on; stty echo; printf '\n'; exit" 2
cursor_blink_off
local selected=0
while true; do
# print options by overwriting the last lines
local idx=0
for opt; do
cursor_to $(($startrow + $idx))
if [ $idx -eq $selected ]; then
print_selected "$opt"
else
print_option "$opt"
fi
((idx++))
done
# user key control
case `key_input` in
enter) break;;
up) ((selected--));
if [ $selected -lt 0 ]; then selected=$(($# - 1)); fi;;
down) ((selected++));
if [ $selected -ge $# ]; then selected=0; fi;;
esac
done
# cursor position back to normal
cursor_to $lastrow
printf "\n"
cursor_blink_on
return $selected
}
select_yesno() {
local msg="Do you want to continue?"
if [[ -n $1 ]]; then
msg="$1"
fi
if [[ $2 == 1 ]]; then
msg+=" (Y/n): "
else
msg+=" (y/N): "
fi
if [[ $menu_old == 1 ]]; then
local cont
local opt
while [[ $cont != 1 ]]; do
read -p "$(input "$msg")" opt
case $opt in
[NnYy] ) cont=1;;
esac
done
if [[ $2 == 1 ]]; then
# yes is default if $2 set to 1
if [[ $opt == 'N' || $opt == 'n' ]]; then
return 0
fi
return 1
fi
# no is default by default
if [[ $opt == 'Y' || $opt == 'y' ]]; then
return 1
fi
return 0
fi
local yesno=("No" "Yes") # no is default by default
if [[ $2 == 1 ]]; then # yes is default if $2 set to 1
yesno=("Yes" "No")
fi
input "$msg"
select_option "${yesno[@]}"
local res=$?
if [[ $2 == 1 ]]; then
case $res in
0 ) return 1;;
1 ) return 0;;
esac
fi
return $res
}
set_tool_paths() { set_tool_paths() {
: ' : '
sets variables: platform, platform_ver, dir sets variables: platform, platform_ver, dir
@ -514,8 +631,8 @@ version_update_check() {
version_update() { version_update() {
local url local url
local req local req
read -p "$(input 'Do you want to update now? (Y/n): ')" opt select_yesno "Do you want to update now?" 1
if [[ $opt == 'n' || $opt == 'N' ]]; then if [[ $? != 1 ]]; then
log "User selected N, cannot continue. Exiting." log "User selected N, cannot continue. Exiting."
exit exit
fi fi
@ -930,8 +1047,8 @@ device_get_info() {
if [[ $device_type == "iPhone1,1" && -z $device_argmode ]]; then if [[ $device_type == "iPhone1,1" && -z $device_argmode ]]; then
print "* Device Type Option" print "* Device Type Option"
print "* Select Y if the device is an iPhone 2G, or N if it is an iPod touch 1" print "* Select Y if the device is an iPhone 2G, or N if it is an iPod touch 1"
read -p "$(input 'Is this device an iPhone 2G? (Y/n): ')" opt select_yesno "Is this device an iPhone 2G?" 1
if [[ $opt == 'n' || $opt == 'N' ]]; then if [[ $? != 1 ]]; then
device_type="iPod1,1" device_type="iPod1,1"
fi fi
fi fi
@ -1436,8 +1553,8 @@ device_dfuhelper() {
fi fi
print "* DFU Mode Helper - Get ready to enter DFU mode." print "* DFU Mode Helper - Get ready to enter DFU mode."
print "* If you already know how to enter DFU mode, you may do so right now before continuing." print "* If you already know how to enter DFU mode, you may do so right now before continuing."
read -p "$(input "Select Y to continue, N to exit $rec(Y/n) ")" opt select_yesno "Select Y to continue, N to exit $rec" 1
if [[ $opt == 'N' || $opt == 'n' ]]; then if [[ $? != 1 ]]; then
if [[ -z $1 ]]; then if [[ -z $1 ]]; then
log "Attempting to exit Recovery mode." log "Attempting to exit Recovery mode."
$irecovery -n $irecovery -n
@ -1528,8 +1645,8 @@ device_enter_mode() {
if [[ $device_mode == "Normal" ]]; then if [[ $device_mode == "Normal" ]]; then
if [[ $mode != "enterrecovery" ]]; then if [[ $mode != "enterrecovery" ]]; then
print "* The device needs to be in Recovery/DFU mode before proceeding." print "* The device needs to be in Recovery/DFU mode before proceeding."
read -p "$(input 'Send device to recovery mode? (Y/n): ')" opt select_yesno "Send device to recovery mode?" 1
if [[ $opt == 'n' || $opt == 'N' ]]; then if [[ $? != 1 ]]; then
log "User selected N, cannot continue. Exiting." log "User selected N, cannot continue. Exiting."
exit exit
fi fi
@ -1701,8 +1818,8 @@ device_enter_mode() {
print "* Select Y if your device is in pwned iBSS/kDFU mode." print "* Select Y if your device is in pwned iBSS/kDFU mode."
print "* Select N if this is not the case. (pwned using checkm8-a5)" print "* Select N if this is not the case. (pwned using checkm8-a5)"
print "* Failing to answer correctly will cause \"Sending iBEC\" to fail." print "* Failing to answer correctly will cause \"Sending iBEC\" to fail."
read -p "$(input 'Is your device already in pwned iBSS/kDFU mode? (y/N): ')" opt select_yesno "Is your device already in pwned iBSS/kDFU mode?" 0
if [[ $opt == "Y" || $opt == "y" ]]; then if [[ $? != 0 ]]; then
log "Pwned iBSS/kDFU mode specified by user." log "Pwned iBSS/kDFU mode specified by user."
return return
fi fi
@ -1799,22 +1916,22 @@ device_enter_mode() {
print "* If the first option does not work, try the other option and do multiple attempts." print "* If the first option does not work, try the other option and do multiple attempts."
print "* Note: Some Intel Macs may have better success rates with ipwndfu than ipwnder." print "* Note: Some Intel Macs may have better success rates with ipwndfu than ipwnder."
input "Select your option:" input "Select your option:"
select opt2 in "${selection[@]}"; do select_option "${selection[@]}"
log "Placing device to pwnDFU mode using $opt2" opt2="${selection[$?]}"
case $opt2 in log "Placing device to pwnDFU mode using $opt2"
"ipwndfu" ) device_ipwndfu pwn; tool_pwned=$?; break;; case $opt2 in
"ipwnder (SHAtter)" ) $ipwnder -s; tool_pwned=$?; break;; "ipwndfu" ) device_ipwndfu pwn; tool_pwned=$?; break;;
"ipwnder (limera1n)" ) $ipwnder -p; tool_pwned=$?; break;; "ipwnder (SHAtter)" ) $ipwnder -s; tool_pwned=$?; break;;
"ipwnder" ) "ipwnder (limera1n)" ) $ipwnder -p; tool_pwned=$?; break;;
mkdir image3 ../saved/image3 2>/dev/null "ipwnder" )
cp ../saved/image3/* image3/ 2>/dev/null mkdir image3 ../saved/image3 2>/dev/null
$ipwnder -d cp ../saved/image3/* image3/ 2>/dev/null
tool_pwned=$? $ipwnder -d
cp image3/* ../saved/image3/ tool_pwned=$?
break cp image3/* ../saved/image3/
;; break
esac ;;
done esac
elif [[ $platform == "linux" ]]; then elif [[ $platform == "linux" ]]; then
# A6/A7 linux uses ipwndfu # A6/A7 linux uses ipwndfu
device_ipwndfu pwn device_ipwndfu pwn
@ -1841,14 +1958,14 @@ device_enter_mode() {
print "* If the first option does not work, try many times and/or try the other option(s)." print "* If the first option does not work, try many times and/or try the other option(s)."
print "* Note: Some Intel Macs have very low success rates for A7 checkm8." print "* Note: Some Intel Macs have very low success rates for A7 checkm8."
input "Select your option:" input "Select your option:"
select opt2 in "${selection[@]}"; do select_option "${selection[@]}"
log "Placing device to pwnDFU mode using $opt" opt2="${selection[$?]}"
case $opt2 in log "Placing device to pwnDFU mode using $opt"
"ipwnder32" ) $ipwnder32 -p; tool_pwned=$?; break;; case $opt2 in
"ipwndfu" ) device_ipwndfu pwn; tool_pwned=$?; break;; "ipwnder32" ) $ipwnder32 -p; tool_pwned=$?; break;;
* ) ${ipwnder}2 -p; tool_pwned=$?; break;; "ipwndfu" ) device_ipwndfu pwn; tool_pwned=$?; break;;
esac * ) ${ipwnder}2 -p; tool_pwned=$?; break;;
done esac
fi fi
if [[ $tool_pwned == 2 ]]; then if [[ $tool_pwned == 2 ]]; then
return return
@ -2386,8 +2503,8 @@ ipsw_preference_set() {
;; ;;
esac esac
fi fi
read -p "$(input 'Enable this option? (Y/n): ')" ipsw_jailbreak select_yesno "Enable this option?" 1
if [[ $ipsw_jailbreak == 'N' || $ipsw_jailbreak == 'n' ]]; then if [[ $? != 1 ]]; then
ipsw_jailbreak= ipsw_jailbreak=
log "Jailbreak option disabled by user." log "Jailbreak option disabled by user."
else else
@ -2403,8 +2520,8 @@ ipsw_preference_set() {
print "* Enable this option if you have no valid SIM card to activate the phone." print "* Enable this option if you have no valid SIM card to activate the phone."
print "* Disable this option if you have a working SIM card and want cellular data." print "* Disable this option if you have a working SIM card and want cellular data."
print "* This option is disabled by default (N). Select this option if unsure." print "* This option is disabled by default (N). Select this option if unsure."
read -p "$(input 'Enable this option? (y/N): ')" ipsw_hacktivate select_yesno "Enable this option?" 0
if [[ $ipsw_hacktivate == 'Y' || $ipsw_hacktivate == 'y' ]]; then if [[ $? != 0 ]]; then
log "Hacktivate option enabled by user." log "Hacktivate option enabled by user."
ipsw_hacktivate=1 ipsw_hacktivate=1
else else
@ -2438,8 +2555,8 @@ ipsw_preference_set() {
print "* I recommend to enable this option to speed up creating the custom IPSW." print "* I recommend to enable this option to speed up creating the custom IPSW."
print "* However, if your PC/Mac has less than 8 GB of RAM, disable this option." print "* However, if your PC/Mac has less than 8 GB of RAM, disable this option."
print "* This option is enabled by default (Y). Select this option if unsure." print "* This option is enabled by default (Y). Select this option if unsure."
read -p "$(input 'Enable this option? (Y/n): ')" ipsw_memory select_yesno "Enable this option?" 1
if [[ $ipsw_memory == 'N' || $ipsw_memory == 'n' ]]; then if [[ $? != 1 ]]; then
log "Memory option disabled by user." log "Memory option disabled by user."
ipsw_memory= ipsw_memory=
else else
@ -2464,8 +2581,8 @@ ipsw_preference_set() {
input "Verbose Boot Option" input "Verbose Boot Option"
print "* When this option is enabled, the device will have verbose boot on restore." print "* When this option is enabled, the device will have verbose boot on restore."
print "* This option is enabled by default (Y). Select this option if unsure." print "* This option is enabled by default (Y). Select this option if unsure."
read -p "$(input 'Enable this option? (Y/n): ')" ipsw_verbose select_yesno "Enable this option?" 1
if [[ $ipsw_verbose == 'N' || $ipsw_verbose == 'n' ]]; then if [[ $? != 1 ]]; then
ipsw_verbose= ipsw_verbose=
log "Verbose boot option disabled by user." log "Verbose boot option disabled by user."
else else
@ -5137,11 +5254,11 @@ device_buttons() {
print "* Selecting 1 (pwnDFU) is recommended. Both your home and power buttons must be working properly for entering DFU mode." print "* Selecting 1 (pwnDFU) is recommended. Both your home and power buttons must be working properly for entering DFU mode."
print "* Selecting 2 (kDFU) is for those that prefer the jailbroken method instead (have OpenSSH installed)." print "* Selecting 2 (kDFU) is for those that prefer the jailbroken method instead (have OpenSSH installed)."
input "Select your option:" input "Select your option:"
select opt2 in "${selection[@]}"; do select_option "${selection[@]}"
case $opt2 in opt2="${selection[$?]}"
*"DFU" ) device_enter_mode $opt2; break;; case $opt2 in
esac *"DFU" ) device_enter_mode $opt2; break;;
done esac
} }
device_buttons2() { device_buttons2() {
@ -5159,12 +5276,12 @@ device_buttons2() {
print "* For more details, go to: https://github.com/LukeZGD/Legacy-iOS-Kit/wiki/checkm8-a5" print "* For more details, go to: https://github.com/LukeZGD/Legacy-iOS-Kit/wiki/checkm8-a5"
fi fi
input "Select your option:" input "Select your option:"
select opt2 in "${selection[@]}"; do select_option "${selection[@]}"
case $opt2 in opt2="${selection[$?]}"
"Jailbroken" ) break;; case $opt2 in
*"DFU" ) device_enter_mode $opt2; break;; "Jailbroken" ) break;;
esac *"DFU" ) device_enter_mode $opt2; break;;
done esac
} }
restore_prepare() { restore_prepare() {
@ -5453,8 +5570,8 @@ restore_usepwndfu64_option() {
fi fi
if [[ $device_proc == 7 ]]; then if [[ $device_proc == 7 ]]; then
print "* This option is disabled by default (N). Select this option if unsure." print "* This option is disabled by default (N). Select this option if unsure."
read -p "$(input 'Enable this option? (y/N): ')" opt select_yesno "Enable this option?" 0
if [[ $opt == 'Y' || $opt == 'y' ]]; then if [[ $? != 0 ]]; then
log "Pwned restore option enabled by user." log "Pwned restore option enabled by user."
restore_usepwndfu64=1 restore_usepwndfu64=1
else else
@ -5462,8 +5579,8 @@ restore_usepwndfu64_option() {
fi fi
else else
print "* This option is enabled by default (Y). Select this option if unsure." print "* This option is enabled by default (Y). Select this option if unsure."
read -p "$(input 'Enable this option? (Y/n): ')" opt select_yesno "Enable this option?" 1
if [[ $opt == 'N' || $opt == 'n' ]]; then if [[ $? != 1 ]]; then
log "Pwned restore option disabled by user." log "Pwned restore option disabled by user."
else else
log "Pwned restore option enabled." log "Pwned restore option enabled."
@ -5482,10 +5599,8 @@ menu_remove4() {
menu_print_info menu_print_info
print " > Main Menu > Other Utilities > Disable/Enable Exploit" print " > Main Menu > Other Utilities > Disable/Enable Exploit"
input "Select an option:" input "Select an option:"
select opt in "${menu_items[@]}"; do select_option "${menu_items[@]}"
selected="$opt" selected="${menu_items[$?]}"
break
done
case $selected in case $selected in
"Disable Exploit" ) rec=0;; "Disable Exploit" ) rec=0;;
"Enable Exploit" ) rec=2;; "Enable Exploit" ) rec=2;;
@ -6127,12 +6242,13 @@ device_ramdisk_setnvram() {
iPhone4,1 ) $ssh -p $ssh_port root@127.0.0.1 "nvram boot-ramdisk=/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/disk.dmg";; iPhone4,1 ) $ssh -p $ssh_port root@127.0.0.1 "nvram boot-ramdisk=/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/disk.dmg";;
iPod5,1 ) $ssh -p $ssh_port root@127.0.0.1 "nvram boot-ramdisk=/a/b/c/d/e/f/g/h/i/j/k/l/m/disk.dmg";; iPod5,1 ) $ssh -p $ssh_port root@127.0.0.1 "nvram boot-ramdisk=/a/b/c/d/e/f/g/h/i/j/k/l/m/disk.dmg";;
iPhone5* ) iPhone5* )
read -p "$(input "Select base version: Y for iOS 7.1.x, N for iOS 7.0.x (Y/n) ")" opt local selection=("iOS 7.1.x" "iOS 7.0.x")
if [[ $opt != 'N' && $opt != 'n' ]]; then input "Select this device's base version:"
$ssh -p $ssh_port root@127.0.0.1 "nvram boot-ramdisk=/a/b/c/d/e/f/g/h/i/j/k/l/m/disk.dmg" select_option "${selection[@]}"
else case $? in
$ssh -p $ssh_port root@127.0.0.1 "nvram boot-ramdisk=/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/disk.dmg" 1 ) $ssh -p $ssh_port root@127.0.0.1 "nvram boot-ramdisk=/a/b/c/d/e/f/g/h/i/j/k/l/m/disk.dmg";;
fi * ) $ssh -p $ssh_port root@127.0.0.1 "nvram boot-ramdisk=/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/disk.dmg";;
esac
;; ;;
iPad1,1 | iPod3,1 ) iPad1,1 | iPod3,1 )
device_ramdisk_iosvers device_ramdisk_iosvers
@ -6256,10 +6372,8 @@ menu_ramdisk() {
print "* SSH Ramdisk Menu" print "* SSH Ramdisk Menu"
while [[ -z $mode ]]; do while [[ -z $mode ]]; do
input "Select an option:" input "Select an option:"
select opt in "${menu_items[@]}"; do select_option "${menu_items[@]}"
selected="$opt" selected="${menu_items[$?]}"
break
done
case $selected in case $selected in
"Connect to SSH" ) mode="ssh";; "Connect to SSH" ) mode="ssh";;
"Reboot Device" ) mode="reboot";; "Reboot Device" ) mode="reboot";;
@ -6295,8 +6409,8 @@ menu_ramdisk() {
if [[ $1 == "12"* ]]; then if [[ $1 == "12"* ]]; then
warn "Dumping blobs may fail on iOS 8 ramdisk." warn "Dumping blobs may fail on iOS 8 ramdisk."
print "* It is recommended to do this on iOS $device_ramdiskver ramdisk instead." print "* It is recommended to do this on iOS $device_ramdiskver ramdisk instead."
read -p "$(input "Select Y to continue, N to go back (y/N) ")" opt select_yesno
if [[ $opt != 'Y' && $opt != 'y' ]]; then if [[ $? != 1 ]]; then
continue continue
fi fi
elif (( device_proc < 7 )); then elif (( device_proc < 7 )); then
@ -6334,8 +6448,8 @@ menu_ramdisk() {
print "* The mount command also changes depending on the iOS version (which is what we're trying to get here in the first place)" print "* The mount command also changes depending on the iOS version (which is what we're trying to get here in the first place)"
print "* You need to mount filesystems using the appropriate command before continuing (scroll up to see the commands)" print "* You need to mount filesystems using the appropriate command before continuing (scroll up to see the commands)"
warn "Make sure that you know what you are doing when using this option on 64-bit devices." warn "Make sure that you know what you are doing when using this option on 64-bit devices."
read -p "$(input "Select Y to continue, N to go back (y/N) ")" opt select_yesno
if [[ $opt != 'Y' && $opt != 'y' ]]; then if [[ $? != 1 ]]; then
continue continue
fi fi
fi fi
@ -6351,8 +6465,8 @@ menu_ramdisk() {
"trollstore" ) "trollstore" )
print "* Make sure that your device is on iOS 14 or 15 before continuing." print "* Make sure that your device is on iOS 14 or 15 before continuing."
print "* If your device is on iOS 13 or below, TrollStore will NOT work." print "* If your device is on iOS 13 or below, TrollStore will NOT work."
read -p "$(input "Select Y to continue, N to go back (y/N) ")" opt select_yesno
if [[ $opt != 'Y' && $opt != 'y' ]]; then if [[ $? != 1 ]]; then
continue continue
fi fi
log "Checking for latest TrollStore" log "Checking for latest TrollStore"
@ -6392,8 +6506,8 @@ menu_ramdisk() {
print "* If your device is on iOS 7, make sure to boot an iOS 8 ramdisk afterwards to fix booting." print "* If your device is on iOS 7, make sure to boot an iOS 8 ramdisk afterwards to fix booting."
fi fi
print "* When the device boots back up, trigger a restore by entering wrong passwords 10 times." print "* When the device boots back up, trigger a restore by entering wrong passwords 10 times."
read -p "$(input "Select Y to continue, N to go back (y/N) ")" opt select_yesno
if [[ $opt != 'Y' && $opt != 'y' ]]; then if [[ $? != 1 ]]; then
continue continue
fi fi
$ssh -p $ssh_port root@127.0.0.1 "/sbin/mount_hfs /dev/disk0s1s1 /mnt1; /sbin/mount_hfs /dev/disk0s1s2 /mnt2; cp /com.apple.springboard.plist /mnt1/" $ssh -p $ssh_port root@127.0.0.1 "/sbin/mount_hfs /dev/disk0s1s1 /mnt1; /sbin/mount_hfs /dev/disk0s1s2 /mnt2; cp /com.apple.springboard.plist /mnt1/"
@ -6420,8 +6534,8 @@ menu_ramdisk() {
"erase9" ) "erase9" )
warn "This will do a \"Erase All Content and Settings\" procedure for iOS 9+ devices." warn "This will do a \"Erase All Content and Settings\" procedure for iOS 9+ devices."
warn "Do NOT do this if your device is jailbroken untethered!!! (mostly iOS 9.3.4/9.1 and lower)" warn "Do NOT do this if your device is jailbroken untethered!!! (mostly iOS 9.3.4/9.1 and lower)"
read -p "$(input "Select Y to continue, N to go back (y/N) ")" opt select_yesno
if [[ $opt != 'Y' && $opt != 'y' ]]; then if [[ $? != 1 ]]; then
continue continue
fi fi
log "Sending command for erasing all content and settings..." log "Sending command for erasing all content and settings..."
@ -6697,10 +6811,8 @@ menu_main() {
menu_items+=("App Management" "Data Management" "Device Operations") menu_items+=("App Management" "Data Management" "Device Operations")
fi fi
menu_items+=("Other Utilities" "Exit") menu_items+=("Other Utilities" "Exit")
select opt in "${menu_items[@]}"; do select_option "${menu_items[@]}"
selected="$opt" selected="${menu_items[$?]}"
break
done
case $selected in case $selected in
"Restore/Downgrade" ) menu_restore;; "Restore/Downgrade" ) menu_restore;;
"Jailbreak Device" ) device_jailbreak_confirm;; "Jailbreak Device" ) device_jailbreak_confirm;;
@ -6729,10 +6841,8 @@ menu_appmanage() {
menu_items=("Install IPA (AppSync)" "List User Apps" "List System Apps" "List All Apps" "Go Back") menu_items=("Install IPA (AppSync)" "List User Apps" "List System Apps" "List All Apps" "Go Back")
print " > Main Menu > App Management" print " > Main Menu > App Management"
input "Select an option:" input "Select an option:"
select opt in "${menu_items[@]}"; do select_option "${menu_items[@]}"
selected="$opt" selected="${menu_items[$?]}"
break
done
case $selected in case $selected in
"Install IPA (AppSync)" ) menu_ipa "$selected";; "Install IPA (AppSync)" ) menu_ipa "$selected";;
"List User Apps" ) $ideviceinstaller list --user;; "List User Apps" ) $ideviceinstaller list --user;;
@ -6774,10 +6884,8 @@ menu_datamanage() {
echo echo
print " > Main Menu > Data Management" print " > Main Menu > Data Management"
input "Select an option:" input "Select an option:"
select opt in "${menu_items[@]}"; do select_option "${menu_items[@]}"
selected="$opt" selected="${menu_items[$?]}"
break
done
case $selected in case $selected in
"Go Back" ) back=1;; "Go Back" ) back=1;;
"Backup" ) mode="device_backup_create";; "Backup" ) mode="device_backup_create";;
@ -6826,10 +6934,8 @@ menu_backup_restore() {
echo echo
print " > Main Menu > Data Management > Restore" print " > Main Menu > Data Management > Restore"
input "Select option to restore:" input "Select option to restore:"
select opt in "${menu_items[@]}"; do select_option "${menu_items[@]}"
selected="$opt" selected="${menu_items[$?]}"
break
done
case $selected in case $selected in
"Go Back" ) back=1;; "Go Back" ) back=1;;
* ) device_backup="$selected"; mode="device_backup_restore";; * ) device_backup="$selected"; mode="device_backup_restore";;
@ -6857,10 +6963,8 @@ menu_fourthree() {
echo echo
print " > Main Menu > FourThree Utility" print " > Main Menu > FourThree Utility"
input "Select an option:" input "Select an option:"
select opt in "${menu_items[@]}"; do select_option "${menu_items[@]}"
selected="$opt" selected="${menu_items[$?]}"
break
done
case $selected in case $selected in
"Step 1: Restore" ) ipsw_fourthree=1; menu_ipsw "iOS 6.1.3" "fourthree";; "Step 1: Restore" ) ipsw_fourthree=1; menu_ipsw "iOS 6.1.3" "fourthree";;
"Step 2: Partition" ) mode="device_fourthree_step2";; "Step 2: Partition" ) mode="device_fourthree_step2";;
@ -6913,10 +7017,8 @@ menu_ipa() {
echo echo
print " > Main Menu > $1" print " > Main Menu > $1"
input "Select an option:" input "Select an option:"
select opt in "${menu_items[@]}"; do select_option "${menu_items[@]}"
selected="$opt" selected="${menu_items[$?]}"
break
done
case $selected in case $selected in
"Select IPA" ) menu_ipa_browse;; "Select IPA" ) menu_ipa_browse;;
"Install IPA" ) "Install IPA" )
@ -7016,10 +7118,8 @@ menu_shsh() {
fi fi
print " > Main Menu > Save SHSH Blobs" print " > Main Menu > Save SHSH Blobs"
input "Select an option:" input "Select an option:"
select opt in "${menu_items[@]}"; do select_option "${menu_items[@]}"
selected="$opt" selected="${menu_items[$?]}"
break
done
case $selected in case $selected in
"iOS 10.3.3" ) "iOS 10.3.3" )
device_target_vers="10.3.3" device_target_vers="10.3.3"
@ -7041,8 +7141,8 @@ menu_shsh() {
print "* This option will save onboard blobs of your device, but only as a raw dump. You will need to convert them to be usable." print "* This option will save onboard blobs of your device, but only as a raw dump. You will need to convert them to be usable."
print "* This option is useful for determining the iBoot version of your device first, to get the correct IPSW for conversion." print "* This option is useful for determining the iBoot version of your device first, to get the correct IPSW for conversion."
print "* See the Convert Raw Dump option for converting raw dumps to usable SHSH blobs." print "* See the Convert Raw Dump option for converting raw dumps to usable SHSH blobs."
read -p "$(input "Select Y to continue, N to go back (y/N) ")" opt select_yesno
if [[ $opt != 'Y' && $opt != 'y' ]]; then if [[ $? != 1 ]]; then
continue continue
fi fi
mode="save-onboard-dump" mode="save-onboard-dump"
@ -7050,8 +7150,8 @@ menu_shsh() {
"Cydia Blobs" ) "Cydia Blobs" )
print "* This option will check if this device has saved blobs in Cydia servers, and proceed to save them if there are any." print "* This option will check if this device has saved blobs in Cydia servers, and proceed to save them if there are any."
read -p "$(input "Select Y to continue, N to go back (y/N) ")" opt select_yesno
if [[ $opt != 'Y' && $opt != 'y' ]]; then if [[ $? != 1 ]]; then
continue continue
fi fi
mode="save-cydia-blobs" mode="save-cydia-blobs"
@ -7096,10 +7196,8 @@ menu_shsh_onboard() {
echo echo
print " > Main Menu > Save SHSH Blobs > Onboard Blobs" print " > Main Menu > Save SHSH Blobs > Onboard Blobs"
input "Select an option:" input "Select an option:"
select opt in "${menu_items[@]}"; do select_option "${menu_items[@]}"
selected="$opt" selected="${menu_items[$?]}"
break
done
case $selected in case $selected in
"Select IPSW" ) menu_ipsw_browse;; "Select IPSW" ) menu_ipsw_browse;;
"Save Onboard Blobs" ) mode="save-onboard-blobs";; "Save Onboard Blobs" ) mode="save-onboard-blobs";;
@ -7144,10 +7242,8 @@ menu_shsh_convert() {
echo echo
print " > Main Menu > Save SHSH Blobs > Convert Raw Dump" print " > Main Menu > Save SHSH Blobs > Convert Raw Dump"
input "Select an option:" input "Select an option:"
select opt in "${menu_items[@]}"; do select_option "${menu_items[@]}"
selected="$opt" selected="${menu_items[$?]}"
break
done
case $selected in case $selected in
"Select IPSW" ) menu_ipsw_browse;; "Select IPSW" ) menu_ipsw_browse;;
"Select Raw Dump" ) menu_shshdump_browse;; "Select Raw Dump" ) menu_shshdump_browse;;
@ -7256,10 +7352,8 @@ menu_restore() {
echo echo
fi fi
input "Select an option:" input "Select an option:"
select opt in "${menu_items[@]}"; do select_option "${menu_items[@]}"
selected="$opt" selected="${menu_items[$?]}"
break
done
case $selected in case $selected in
"" ) :;; "" ) :;;
"Go Back" ) back=1;; "Go Back" ) back=1;;
@ -7305,10 +7399,8 @@ menu_ipsw_downloader() {
fi fi
echo echo
input "Select an option:" input "Select an option:"
select opt in "${menu_items[@]}"; do select_option "${menu_items[@]}"
selected="$opt" selected="${menu_items[$?]}"
break
done
case $selected in case $selected in
"Enter Build Version" ) "Enter Build Version" )
print "* Enter the build version of the IPSW you want to download." print "* Enter the build version of the IPSW you want to download."
@ -7356,10 +7448,8 @@ menu_restore_more() {
echo echo
fi fi
input "Select an option:" input "Select an option:"
select opt in "${menu_items[@]}"; do select_option "${menu_items[@]}"
selected="$opt" selected="${menu_items[$?]}"
break
done
case $selected in case $selected in
"" ) :;; "" ) :;;
"Go Back" ) back=1;; "Go Back" ) back=1;;
@ -7798,10 +7888,8 @@ menu_ipsw() {
print "$nav" print "$nav"
input "Select an option:" input "Select an option:"
select opt in "${menu_items[@]}"; do select_option "${menu_items[@]}"
selected="$opt" selected="${menu_items[$?]}"
break
done
case $selected in case $selected in
"Create IPSW" ) mode="custom-ipsw";; "Create IPSW" ) mode="custom-ipsw";;
"$start" ) mode="downgrade";; "$start" ) mode="downgrade";;
@ -7994,10 +8082,8 @@ menu_ipsw_browse() {
print "* Select $text IPSW Menu" print "* Select $text IPSW Menu"
while true; do while true; do
input "Select an option:" input "Select an option:"
select opt in "${menu_items[@]}"; do select_option "${menu_items[@]}"
selected="$opt" selected="${menu_items[$?]}"
break
done
case $selected in case $selected in
"Open File Picker" ) picker=1; break;; "Open File Picker" ) picker=1; break;;
"Enter Path" ) break;; "Enter Path" ) break;;
@ -8274,10 +8360,8 @@ menu_flags() {
menu_print_info menu_print_info
print " > Main Menu > Other Utilities > Enable Flags" print " > Main Menu > Other Utilities > Enable Flags"
input "Select an option:" input "Select an option:"
select opt in "${menu_items[@]}"; do select_option "${menu_items[@]}"
selected="$opt" selected="${menu_items[$?]}"
break
done
case $selected in case $selected in
"Enable disable-bbupdate flag" ) "Enable disable-bbupdate flag" )
warn "This will enable the --disable-bbupdate flag." warn "This will enable the --disable-bbupdate flag."
@ -8286,8 +8370,8 @@ menu_flags() {
print "* This applies to the following: iPhone 4S, 5, 5C, iPad 4, mini 1" print "* This applies to the following: iPhone 4S, 5, 5C, iPad 4, mini 1"
print "* Do not enable this if you do not know what you are doing." print "* Do not enable this if you do not know what you are doing."
local opt local opt
read -p "$(input 'Do you want to enable the disable-bbupdate flag? (y/N): ')" opt select_yesno "Do you want to enable the disable-bbupdate flag?" 0
if [[ $opt == 'y' || $opt == 'Y' ]]; then if [[ $? != 0 ]]; then
device_disable_bbupdate="$device_type" device_disable_bbupdate="$device_type"
back=1 back=1
fi fi
@ -8297,8 +8381,8 @@ menu_flags() {
print "* This will enable usage of dumped activation records and stitch to IPSW." print "* This will enable usage of dumped activation records and stitch to IPSW."
print "* Do not enable this if you do not know what you are doing." print "* Do not enable this if you do not know what you are doing."
local opt local opt
read -p "$(input 'Do you want to enable the activation-records flag? (y/N): ')" opt select_yesno "Do you want to enable the activation-records flag?" 0
if [[ $opt == 'y' || $opt == 'Y' ]]; then if [[ $? != 0 ]]; then
device_actrec=1 device_actrec=1
back=1 back=1
fi fi
@ -8308,8 +8392,8 @@ menu_flags() {
print "* This will assume that a pwned iBSS has already been sent to the device." print "* This will assume that a pwned iBSS has already been sent to the device."
print "* Do not enable this if you do not know what you are doing." print "* Do not enable this if you do not know what you are doing."
local opt local opt
read -p "$(input 'Do you want to enable the skip-ibss flag? (y/N): ')" opt select_yesno "Do you want to enable the skip-ibss flag?" 0
if [[ $opt == 'y' || $opt == 'Y' ]]; then if [[ $? != 0 ]]; then
device_skip_ibss=1 device_skip_ibss=1
back=1 back=1
fi fi
@ -8322,8 +8406,8 @@ menu_flags() {
print "* The recommended method is to jailbreak after the restore instead." print "* The recommended method is to jailbreak after the restore instead."
print "* Do not enable this if you do not know what you are doing." print "* Do not enable this if you do not know what you are doing."
local opt local opt
read -p "$(input 'Do you want to enable the jailbreak flag? (y/N): ')" opt select_yesno "Do you want to enable the jailbreak flag?" 0
if [[ $opt == 'y' || $opt == 'Y' ]]; then if [[ $? != 0 ]]; then
ipsw_jailbreak=1 ipsw_jailbreak=1
back=1 back=1
fi fi
@ -8335,8 +8419,8 @@ menu_flags() {
print "* This issue is called \"gas gauge\" error, also known as error 29 in iTunes." print "* This issue is called \"gas gauge\" error, also known as error 29 in iTunes."
print "* By enabling this, firmware components for 6.1.3 or lower will be used for restoring to get past the error." print "* By enabling this, firmware components for 6.1.3 or lower will be used for restoring to get past the error."
local opt local opt
read -p "$(input 'Do you want to enable the gasgauge-patch flag? (y/N): ')" opt select_yesno "Do you want to enable the gasgauge-patch flag?" 0
if [[ $opt == 'y' || $opt == 'Y' ]]; then if [[ $? != 0 ]]; then
ipsw_gasgauge_patch=1 ipsw_gasgauge_patch=1
back=1 back=1
fi fi
@ -8346,8 +8430,8 @@ menu_flags() {
print "* This will skip first restore and flash NOR IPSW only for powdersn0w 4.2.x and lower." print "* This will skip first restore and flash NOR IPSW only for powdersn0w 4.2.x and lower."
print "* Do not enable this if you do not know what you are doing." print "* Do not enable this if you do not know what you are doing."
local opt local opt
read -p "$(input 'Do you want to enable the skip-ibss flag? (y/N): ')" opt select_yesno "Do you want to enable the skip-ibss flag?" 0
if [[ $opt == 'y' || $opt == 'Y' ]]; then if [[ $? != 0 ]]; then
ipsw_skip_first=1 ipsw_skip_first=1
back=1 back=1
fi fi
@ -8358,8 +8442,8 @@ menu_flags() {
print "* This can be used to skip blob verification for OTA/onboard/factory SHSH blobs." print "* This can be used to skip blob verification for OTA/onboard/factory SHSH blobs."
print "* Do not enable this if you do not know what you are doing." print "* Do not enable this if you do not know what you are doing."
local opt local opt
read -p "$(input 'Do you want to enable the skip-blob flag? (y/N): ')" opt select_yesno "Do you want to enable the skip-blob flag?" 0
if [[ $opt == 'y' || $opt == 'Y' ]]; then if [[ $? != 0 ]]; then
restore_useskipblob=1 restore_useskipblob=1
back=1 back=1
fi fi
@ -8390,10 +8474,8 @@ menu_devicemanage() {
menu_items+=("Pair Device" "Enter Recovery Mode" "Go Back") menu_items+=("Pair Device" "Enter Recovery Mode" "Go Back")
print " > Main Menu > Device Operations" print " > Main Menu > Device Operations"
input "Select an option:" input "Select an option:"
select opt in "${menu_items[@]}"; do select_option "${menu_items[@]}"
selected="$opt" selected="${menu_items[$?]}"
break
done
case $selected in case $selected in
"Export Device Info" ) "Export Device Info" )
mkdir -p ../saved/info 2>/dev/null mkdir -p ../saved/info 2>/dev/null
@ -8497,10 +8579,8 @@ menu_other() {
# other utilities menu # other utilities menu
print " > Main Menu > Other Utilities" print " > Main Menu > Other Utilities"
input "Select an option:" input "Select an option:"
select opt in "${menu_items[@]}"; do select_option "${menu_items[@]}"
selected="$opt" selected="${menu_items[$?]}"
break
done
case $selected in case $selected in
"Hacktivate Device" ) mode="device_hacktivate";; "Hacktivate Device" ) mode="device_hacktivate";;
"Revert Hacktivation" ) mode="device_reverthacktivate";; "Revert Hacktivation" ) mode="device_reverthacktivate";;
@ -8594,8 +8674,8 @@ device_jailbreak_confirm() {
if [[ $device_proc == 4 ]]; then if [[ $device_proc == 4 ]]; then
print "* Note: If the process fails somewhere, you can just enter DFU mode and attempt jailbreaking again from there." print "* Note: If the process fails somewhere, you can just enter DFU mode and attempt jailbreaking again from there."
fi fi
read -p "$(input "Select Y to continue, N to go back (y/N) ")" opt select_yesno
if [[ $opt != 'Y' && $opt != 'y' ]]; then if [[ $? != 1 ]]; then
return return
fi fi
mode="device_jailbreak_gilbert" mode="device_jailbreak_gilbert"
@ -8690,8 +8770,8 @@ device_jailbreak_confirm() {
print "* By selecting Jailbreak Device, your device will be jailbroken using Ramdisk Method." print "* By selecting Jailbreak Device, your device will be jailbroken using Ramdisk Method."
print "* Before continuing, make sure that your device does not have a jailbreak yet." print "* Before continuing, make sure that your device does not have a jailbreak yet."
print "* No data will be lost, but please back up your data just in case." print "* No data will be lost, but please back up your data just in case."
read -p "$(input "Select Y to continue, N to go back (y/N) ")" opt select_yesno
if [[ $opt != 'Y' && $opt != 'y' ]]; then if [[ $? != 1 ]]; then
return return
fi fi
mode="device_jailbreak" mode="device_jailbreak"
@ -8748,8 +8828,8 @@ device_dump() {
log "Found existing dumped $arg: $dump" log "Found existing dumped $arg: $dump"
print "* Select Y to overwrite, or N to use existing dump" print "* Select Y to overwrite, or N to use existing dump"
print "* Make sure to keep a backup of the dump if needed" print "* Make sure to keep a backup of the dump if needed"
read -p "$(input 'Overwrite this existing dump? (y/N) ')" opt select_yesno "Overwrite this existing dump?" 0
if [[ $opt != 'Y' && $opt != 'y' ]]; then if [[ $? != 1 ]]; then
return return
fi fi
log "Deleting existing dumped $arg" log "Deleting existing dumped $arg"
@ -8869,8 +8949,8 @@ device_dumprd() {
device_dumpbb rd device_dumpbb rd
print "* Reminder to backup dump tars if needed" print "* Reminder to backup dump tars if needed"
if [[ -s $dump/baseband-$device_ecid.tar ]]; then if [[ -s $dump/baseband-$device_ecid.tar ]]; then
read -p "$(input "Baseband dump exists in $dump/baseband-$device_ecid.tar. Overwrite? (y/N) ")" opt select_yesno "Baseband dump exists in $dump/baseband-$device_ecid.tar. Overwrite?" 0
if [[ $opt == 'Y' || $opt == 'y' ]]; then if [[ $? == 1 ]]; then
log "Deleting existing dumped baseband" log "Deleting existing dumped baseband"
rm $dump/baseband-$device_ecid.tar rm $dump/baseband-$device_ecid.tar
fi fi
@ -8901,7 +8981,8 @@ device_dumprd() {
mv activation.tar activation-$device_ecid.tar mv activation.tar activation-$device_ecid.tar
if [[ -s $dump/activation-$device_ecid.tar ]]; then if [[ -s $dump/activation-$device_ecid.tar ]]; then
read -p "$(input "Activation records dump exists in $dump/activation-$device_ecid.tar. Overwrite? (y/N) ")" opt read -p "$(input "Activation records dump exists in $dump/activation-$device_ecid.tar. Overwrite? (y/N) ")" opt
if [[ $opt == 'Y' || $opt == 'y' ]]; then select_yesno "Activation records dump exists in $dump/activation-$device_ecid.tar. Overwrite?" 0
if [[ $? == 1 ]]; then
log "Deleting existing dumped activation" log "Deleting existing dumped activation"
rm $dump/activation-$device_ecid.tar rm $dump/activation-$device_ecid.tar
fi fi
@ -8998,8 +9079,8 @@ restore_customipsw_confirm() {
print "* For iPhone 2G/3G, the second restore may fail due to baseband." print "* For iPhone 2G/3G, the second restore may fail due to baseband."
print "* You can exit recovery mode after by going to: Main Menu -> Exit Recovery Mode" print "* You can exit recovery mode after by going to: Main Menu -> Exit Recovery Mode"
fi fi
read -p "$(input "Select Y to continue, N to go back (y/N) ")" opt select_yesno
if [[ $opt != 'Y' && $opt != 'y' ]]; then if [[ $? != 1 ]]; then
return return
fi fi
mode="customipsw" mode="customipsw"
@ -9024,8 +9105,8 @@ device_dfuipsw_confirm() {
print "* This will force the device to enter DFU mode, which is useful for devices with broken buttons." print "* This will force the device to enter DFU mode, which is useful for devices with broken buttons."
print "* All device data will be wiped! Only proceed if you have backed up your data." print "* All device data will be wiped! Only proceed if you have backed up your data."
print "* Expect the restore to fail and the device to be stuck in DFU mode." print "* Expect the restore to fail and the device to be stuck in DFU mode."
read -p "$(input "Select Y to continue, N to go back (y/N) ")" opt select_yesno
if [[ $opt != 'Y' && $opt != 'y' ]]; then if [[ $? != 1 ]]; then
return return
fi fi
mode="device_dfuipsw" mode="device_dfuipsw"
@ -9153,10 +9234,8 @@ menu_justboot() {
fi fi
echo echo
input "Select an option:" input "Select an option:"
select opt in "${menu_items[@]}"; do select_option "${menu_items[@]}"
selected="$opt" selected="${menu_items[$?]}"
break
done
case $selected in case $selected in
"Enter Build Version" ) "Enter Build Version" )
print "* Enter the build version of your device's current iOS version to boot." print "* Enter the build version of your device's current iOS version to boot."
@ -9213,8 +9292,8 @@ device_enter_ramdisk() {
print "* The version of the SSH Ramdisk is set to iOS $ver by default. This is the recommended option." print "* The version of the SSH Ramdisk is set to iOS $ver by default. This is the recommended option."
print "* There is also an option to use iOS 8 ramdisk. This can be used to fix devices on iOS 7 not booting after using iOS $ver ramdisk." print "* There is also an option to use iOS 8 ramdisk. This can be used to fix devices on iOS 7 not booting after using iOS $ver ramdisk."
print "* If not sure, just press Enter/Return. This will select the default version." print "* If not sure, just press Enter/Return. This will select the default version."
read -p "$(input "Select Y to use iOS $ver, select N to use iOS 8 (Y/n) ")" opt select_yesno "Select Y to use iOS $ver, select N to use iOS 8" 1
if [[ $opt == 'n' || $opt == 'N' ]]; then if [[ $? != 1 ]]; then
device_ramdisk_ios8=1 device_ramdisk_ios8=1
fi fi
fi fi
@ -9327,10 +9406,12 @@ restore_latest64() {
print "* Restore will do factory reset and update the device, all data will be cleared" print "* Restore will do factory reset and update the device, all data will be cleared"
print "* Update will only update the device to the latest version" print "* Update will only update the device to the latest version"
print "* Or press Ctrl+C to cancel" print "* Or press Ctrl+C to cancel"
read -p "$(input "Select Y to Restore, select N to Update (Y/n) ")" opt2 local selection=("Restore" "Update")
if [[ $opt2 != 'n' && $opt2 != 'N' ]]; then input "Select your option:"
opt+="e" select_option "${selection[@]}"
fi case $? in
1 ) opt+="e";;
esac
$idevicerestore2 $opt $idevicerestore2 $opt
mv *.ipsw .. mv *.ipsw ..
} }
@ -9697,6 +9778,7 @@ for i in "$@"; do
"--ecid"* ) device_ecid="${i#*=}"; device_argmode="entry";; "--ecid"* ) device_ecid="${i#*=}"; device_argmode="entry";;
"--build-id"* ) device_rd_build="${i#*=}";; "--build-id"* ) device_rd_build="${i#*=}";;
"--bootargs"* ) device_bootargs="${i#*=}";; "--bootargs"* ) device_bootargs="${i#*=}";;
"--old-menu" ) menu_old=1;;
esac esac
done done
@ -9746,8 +9828,8 @@ if [[ $othertmp != 0 ]]; then
print "* There might be other Legacy iOS Kit instance(s) running, or residual tmp folder(s) not deleted." print "* There might be other Legacy iOS Kit instance(s) running, or residual tmp folder(s) not deleted."
print "* Running multiple instances is not fully supported and can cause unexpected behavior." print "* Running multiple instances is not fully supported and can cause unexpected behavior."
print "* It is recommended to only use a single instance and/or delete all existing \"tmp\" folders in your Legacy iOS Kit folder before continuing." print "* It is recommended to only use a single instance and/or delete all existing \"tmp\" folders in your Legacy iOS Kit folder before continuing."
read -p "$(input "Select Y to remove all tmp folders, N to run as is (Y/n) ")" opt select_yesno "Select Y to remove all tmp folders, N to run as is" 1
if [[ $opt != 'N' && $opt != 'n' ]]; then if [[ $? == 1 ]]; then
rm -r "$(dirname "$0")/tmp"* rm -r "$(dirname "$0")/tmp"*
fi fi
fi fi