Skip to content

Commit

Permalink
Use AppleDB for getting IPSW SHA
Browse files Browse the repository at this point in the history
- also remove unused/unsupported stuff
- add advanced flags that can be used by some users
  • Loading branch information
LukeZGD committed Jan 19, 2025
1 parent 6a27183 commit a6b1739
Showing 1 changed file with 37 additions and 77 deletions.
114 changes: 37 additions & 77 deletions restore.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2689,9 +2689,7 @@ ipsw_download() {
ipsw_verify() {
local ipsw_dl="$1"
local build_id="$2"
local cutver
local device
local type
local phone
local IPSWSHA1
local IPSWSHA1E=$(cat "$device_fw_dir/$build_id/sha1sum" 2>/dev/null)
log "Getting SHA1 hash for $ipsw_dl.ipsw..."
Expand All @@ -2709,53 +2707,30 @@ ipsw_verify() {
;;
esac
case $build_id in
7* ) cutver=3;;
8* ) cutver=4;;
9* ) cutver=5;;
10* ) cutver=6;;
11* ) cutver=7;;
12* ) cutver=8;;
13* ) cutver=9;;
1[AC]* | [23457]* ) phone="Phone";; # iPhoneOS
esac
if [[ -n $cutver ]]; then
type="$device_type"
else
ipsw_latest_set
type="$device_type2"
if [[ $device_type == "iPad"* ]]; then
case $build_id in
1[789]* | [23]* ) phone="Pad";; # iPadOS
esac
fi
case $build_id in
14* ) cutver=10;;
15* ) cutver=11;;
16* ) cutver=12;;
17* ) cutver=13;;
18* ) cutver=14;;
19* ) cutver=15;;
20* ) cutver=16;;
esac
case $device_type in
iPad4,[123] | iPad5,[34] ) device="iPad_Air";;
iPad2,[567] | iPad[45],* ) device="iPad_mini";;
iPad6,[3478] ) device="iPad_Pro";;
iPad* ) device="iPad";;
iPho* ) device="iPhone";;
iPod* ) device="iPod_touch";;
esac

if [[ $(echo "$IPSWSHA1E" | grep -c '<') != 0 ]]; then
rm "$device_fw_dir/$build_id/sha1sum"
fi

log "Getting SHA1 hash from The Apple Wiki..."
IPSWSHA1="$(curl "https://theapplewiki.com/index.php?title=Firmware/${device}/${cutver}.x" | grep -A10 "${type}.*${build_id}" | sed -ne '/<code>/,/<\/code>/p' | sed '1!d' | sed -e "s/<code>//" | sed "s/<\/code>//" | cut -c 5-)"
log "Getting SHA1 hash from AppleDB..."
# i cant seem to connect to appledb.dev, ill just use the github gh-pages
IPSWSHA1="$(curl "https://raw.githubusercontent.com/littlebyteorg/appledb/refs/heads/gh-pages/ios/i${phone}OS;$build_id.json" | $jq -r ".sources[] | select(.type == \"ipsw\" and any(.deviceMap[]; . == \"$device_type\")) | .hashes.sha1")"
mkdir -p $device_fw_dir/$build_id 2>/dev/null

if [[ -n $IPSWSHA1 && -n $IPSWSHA1E && $IPSWSHA1 == "$IPSWSHA1E" ]]; then
log "Using saved SHA1 hash for this IPSW: $IPSWSHA1"
elif [[ -z $IPSWSHA1 && -n $IPSWSHA1E ]]; then
warn "No SHA1 hash from The Apple Wiki, using local hash"
warn "No SHA1 hash from AppleDB, using local hash"
IPSWSHA1="$IPSWSHA1E"
elif [[ -z $IPSWSHA1 && -z $IPSWSHA1E ]]; then
warn "No SHA1 hash from either The Apple Wiki or local hash, cannot verify IPSW."
warn "No SHA1 hash from either AppleDB or local hash, cannot verify IPSW."
pause
if [[ $build_id == "$device_base_build" ]]; then
device_base_sha1="$IPSWSHA1L"
Expand Down Expand Up @@ -3145,11 +3120,6 @@ ipsw_prepare_keys() {
local name=$(echo $fw_key | $jq -j '.keys[] | select(.image == "'$getcomp'") | .filename')
local iv=$(echo $fw_key | $jq -j '.keys[] | select(.image == "'$getcomp'") | .iv')
local key=$(echo $fw_key | $jq -j '.keys[] | select(.image == "'$getcomp'") | .key')
if [[ $device_target_build == "14"* && $getcomp == "iBSS" ]]; then
name="$(curl "https://www.theiphonewiki.com/wiki/${ipsw_codename}_${device_target_build}_(${device_type})" | grep "iBSS" -A1 | sed "s/^.*keypage-ibss\">//" | sed "s/^.*h2>//" | sed "s/<\/span>//" | sed "s/<\/p>//" | tr -d '\n')"
elif [[ $device_target_build == "14"* && $getcomp == "iBEC" ]]; then
name="$(curl "https://www.theiphonewiki.com/wiki/${ipsw_codename}_${device_target_build}_(${device_type})" | grep "iBEC" -A1 | sed "s/^.*keypage-ibec\">//" | sed "s/^.*h2>//" | sed "s/<\/span>//" | sed "s/<\/p>//" | tr -d '\n')"
fi
if [[ -z $name && $device_proc != 1 ]]; then
error "Issue with firmware keys: Failed getting $getcomp. Check The Apple Wiki or your wikiproxy"
fi
Expand Down Expand Up @@ -3386,21 +3356,6 @@ ipsw_prepare_bundle() {
local ramdisk_name=$(echo "$key" | $jq -j '.keys[] | select(.image == "RestoreRamdisk") | .filename')
local RamdiskIV=$(echo "$key" | $jq -j '.keys[] | select(.image == "RestoreRamdisk") | .iv')
local RamdiskKey=$(echo "$key" | $jq -j '.keys[] | select(.image == "RestoreRamdisk") | .key')
if [[ $device_target_build == "14"* ]]; then
case $device_target_build in
14A* ) ipsw_codename="Whitetail";;
14B* ) ipsw_codename="Butler";;
14C* ) ipsw_codename="Corry";;
14D* ) ipsw_codename="Dubois";;
14E* ) ipsw_codename="Erie";;
14F* ) ipsw_codename="Franklin";;
14G* ) ipsw_codename="Greensburg";;
esac
if [[ $ipsw_isbeta == 1 ]]; then
ipsw_codename+="Seed"
fi
ramdisk_name="$(curl "https://www.theiphonewiki.com/wiki/${ipsw_codename}_${device_target_build}_(${device_type})" | grep "Restore Ramdisk" -A1 | sed "s/^.*keypage-restoreramdisk\">//" | sed "s/^.*h2>//" | sed "s/<\/span>//" | tr -d '\n')"
fi
if [[ -z $ramdisk_name ]]; then
error "Issue with firmware keys: Failed getting RestoreRamdisk. Check The Apple Wiki or your wikiproxy"
fi
Expand Down Expand Up @@ -3429,9 +3384,6 @@ ipsw_prepare_bundle() {
RootSize=$((RootSize+30))
local rootfs_name="$(echo "$key" | $jq -j '.keys[] | select(.image == "RootFS") | .filename')"
local rootfs_key="$(echo "$key" | $jq -j '.keys[] | select(.image == "RootFS") | .key')"
if [[ $device_target_build == "14"* ]]; then
rootfs_name="$(curl "https://www.theiphonewiki.com/wiki/${ipsw_codename}_${device_target_build}_(${device_type})" | grep "Root" -A1 | sed "s/^.*keypage-rootfs\">//" | sed "s/^.*h2>//" | sed "s/<\/span>//" | tr -d '\n')"
fi
if [[ -z $rootfs_name ]]; then
error "Issue with firmware keys: Failed getting RootFS. Check The Apple Wiki or your wikiproxy"
fi
Expand Down Expand Up @@ -6182,7 +6134,7 @@ device_ramdisk() {
;;
esac
case $vers in
8* | 7.1* ) :;; # do not extract, will extract later below
8* ) :;; # do not extract, will extract later below
4.[10]* | 3* ) :;; # do not extract, already extracted above
* )
log "Extracting $untether"
Expand Down Expand Up @@ -6214,9 +6166,6 @@ device_ramdisk() {
log "Moving files"
$ssh -p $ssh_port [email protected] "bash /mnt1/move.sh $vers; rm /mnt1/move.sh"
if [[ $vers == "7.1"* ]]; then # change to "7"* for lyncis 7.0.x. but this portion is unused anyway since ramdisk method is disabled for 7.x
untether="lyncis.tar"
log "Extracting $untether"
$ssh -p $ssh_port [email protected] "tar -xvf /mnt1/$untether -C /mnt1; rm /mnt1/$untether /mnt1/install.sh"
log "Symlinking lyncis"
$ssh -p $ssh_port [email protected] "mv -v /mnt1/usr/libexec/CrashHousekeeping /mnt1/usr/libexec/CrashHousekeeping.backup; ln -s /lyncis /mnt1/usr/libexec/CrashHousekeeping"
log "Rebooting"
Expand Down Expand Up @@ -6727,8 +6676,14 @@ menu_print_info() {
if [[ -n $version_current ]]; then
print "* Version: $version_current ($git_hash)"
fi
if [[ $no_internet_check == 1 ]]; then
warn "No internet check flag detected, check is disabled and no support will be provided."
fi
if [[ $no_version_check == 1 ]]; then
warn "No version check flag detected, update check is disabled and no support will be provided."
warn "No version check flag detected, check is disabled and no support will be provided."
fi
if [[ $EUID == 0 && $run_as_root == 1 ]]; then
warn "Script is running as root. This is not supported, proceed with caution."
fi
if [[ $git_hash_latest != "$git_hash" ]]; then
warn "Current version is newer/different than remote: $version_latest ($git_hash_latest)"
Expand Down Expand Up @@ -9688,7 +9643,7 @@ main() {
echo
version_get

if [[ $EUID == 0 ]]; then
if [[ $EUID == 0 && $run_as_root != 1 ]]; then
error "Running the script as root is not allowed."
fi

Expand All @@ -9699,18 +9654,20 @@ main() {

set_tool_paths

log "Checking Internet connection..."
local try=("google.com" "www.apple.com" "208.67.222.222")
local check
for i in "${try[@]}"; do
ping -c1 $i >/dev/null
check=$?
if [[ $check == 0 ]]; then
break
if [[ $no_internet_check != 1 ]]; then
log "Checking Internet connection..."
local try=("google.com" "www.apple.com" "208.67.222.222")
local check
for i in "${try[@]}"; do
ping -c1 $i >/dev/null
check=$?
if [[ $check == 0 ]]; then
break
fi
done
if [[ $check != 0 ]]; then
error "Please check your Internet connection before proceeding."
fi
done
if [[ $check != 0 ]]; then
error "Please check your Internet connection before proceeding."
fi

version_check
Expand Down Expand Up @@ -9815,7 +9772,6 @@ for i in "$@"; do
"--no-color" ) no_color=1;;
"--no-device" ) device_argmode="none";;
"--entry-device" ) device_argmode="entry";;
"--no-version-check" ) no_version_check=1;;
"--debug" ) set -x; debug_mode=1; menu_old=1;;
"--help" ) display_help; exit;;
"--ipsw-verbose" ) ipsw_verbose=1;;
Expand All @@ -9838,6 +9794,10 @@ for i in "$@"; do
"--bootargs"* ) device_bootargs="${i#*=}";;
"--old-menu" ) menu_old=1;;
"--use-usbmuxd2" ) use_usbmuxd2=1;;
# please dont use these, unless you know what youre doing
"--run-as-root" ) run_as_root=1;;
"--no-internet-check" ) no_internet_check=1;;
"--no-version-check" ) no_version_check=1;;
esac
done

Expand Down

0 comments on commit a6b1739

Please sign in to comment.