From 62b5995465d6bcf1cce4cff77decaa6253694c95 Mon Sep 17 00:00:00 2001 From: LukeZGD <26163116+LukeZGD@users.noreply.github.com> Date: Mon, 3 Jul 2023 15:22:35 +0800 Subject: [PATCH] Fix iPod2,1 3.1.3, and other updates - fix ipod2,1 3.1.3 getting stuck in recovery after restore - for a4 and older, the "send pwned ibss" option just puts device in pwndfu, so the option name is changed to "enter pwndfu mode" - always show pwndfu/pwned ibss option in other utilities - add sha1sums for some 5.x iphones since some of ipsw.me's hashes are wrong - add 7.0 11a466 sha1sum and url for 5c - add dump/stitch activation records --- README.md | 2 + resources/firmware/iPhone3,3/9A334/sha1sum | 1 + resources/firmware/iPhone3,3/9A405/sha1sum | 1 + resources/firmware/iPhone3,3/9B176/sha1sum | 1 + resources/firmware/iPhone4,1/9A334/sha1sum | 1 + resources/firmware/iPhone4,1/9A405/sha1sum | 1 + resources/firmware/iPhone4,1/9A406/sha1sum | 1 + resources/firmware/iPhone4,1/9B179/sha1sum | 1 + resources/firmware/iPhone5,3/11A466/sha1sum | 1 + resources/firmware/iPhone5,3/11A466/url | 1 + resources/firmware/iPhone5,4/11A466/sha1sum | 1 + resources/firmware/iPhone5,4/11A466/url | 1 + .../jailbreak/greenpois0n/iPod2,1_7E18.tar | Bin 0 -> 20480 bytes .../old/iPod2,1/3.1.3/018-6508-014.dmg.patch | Bin 133543 -> 133561 bytes .../3.1.3/LLB.n72ap.RELEASE.img3.patch | Bin 140 -> 0 bytes .../3.1.3/iBoot.n72ap.RELEASE.img3.patch | Bin 144 -> 0 bytes .../3.1.3/kernelcache.release.s5l8720x.patch | Bin 145 -> 0 bytes restore.sh | 172 +++++++++++++----- 18 files changed, 140 insertions(+), 45 deletions(-) create mode 100644 resources/firmware/iPhone3,3/9A334/sha1sum create mode 100644 resources/firmware/iPhone3,3/9A405/sha1sum create mode 100644 resources/firmware/iPhone3,3/9B176/sha1sum create mode 100644 resources/firmware/iPhone4,1/9A334/sha1sum create mode 100644 resources/firmware/iPhone4,1/9A405/sha1sum create mode 100644 resources/firmware/iPhone4,1/9A406/sha1sum create mode 100644 resources/firmware/iPhone4,1/9B179/sha1sum create mode 100644 resources/firmware/iPhone5,3/11A466/sha1sum create mode 100644 resources/firmware/iPhone5,3/11A466/url create mode 100644 resources/firmware/iPhone5,4/11A466/sha1sum create mode 100644 resources/firmware/iPhone5,4/11A466/url create mode 100644 resources/jailbreak/greenpois0n/iPod2,1_7E18.tar delete mode 100644 resources/patch/old/iPod2,1/3.1.3/LLB.n72ap.RELEASE.img3.patch delete mode 100644 resources/patch/old/iPod2,1/3.1.3/iBoot.n72ap.RELEASE.img3.patch delete mode 100644 resources/patch/old/iPod2,1/3.1.3/kernelcache.release.s5l8720x.patch diff --git a/README.md b/README.md index 5dd5396..dff7e74 100644 --- a/README.md +++ b/README.md @@ -29,6 +29,8 @@ - Boot SSH Ramdisk on supported 32-bit devices - Clear NVRAM for devices that support powdersn0w - Device activation using ideviceactivation +- Dumping and stitching baseband to IPSW (requires `--disable-bbupdate`) +- Dumping and stitching activation records to IPSW (requires `--activation-records`) ## Supported devices - [Identify your device here](https://ipsw.me/device-finder) diff --git a/resources/firmware/iPhone3,3/9A334/sha1sum b/resources/firmware/iPhone3,3/9A334/sha1sum new file mode 100644 index 0000000..47deb2a --- /dev/null +++ b/resources/firmware/iPhone3,3/9A334/sha1sum @@ -0,0 +1 @@ +3258689a46c7ebd03b621531ee0511a88ae4a9e3 \ No newline at end of file diff --git a/resources/firmware/iPhone3,3/9A405/sha1sum b/resources/firmware/iPhone3,3/9A405/sha1sum new file mode 100644 index 0000000..ecd88b2 --- /dev/null +++ b/resources/firmware/iPhone3,3/9A405/sha1sum @@ -0,0 +1 @@ +81afa9d2079a7153e5d27e30f1f08e7c53074591 \ No newline at end of file diff --git a/resources/firmware/iPhone3,3/9B176/sha1sum b/resources/firmware/iPhone3,3/9B176/sha1sum new file mode 100644 index 0000000..4a40e99 --- /dev/null +++ b/resources/firmware/iPhone3,3/9B176/sha1sum @@ -0,0 +1 @@ +9c3b42bac8e61323646ca8daf2abe862bd4be4ce \ No newline at end of file diff --git a/resources/firmware/iPhone4,1/9A334/sha1sum b/resources/firmware/iPhone4,1/9A334/sha1sum new file mode 100644 index 0000000..95ea312 --- /dev/null +++ b/resources/firmware/iPhone4,1/9A334/sha1sum @@ -0,0 +1 @@ +efab39972534df65eb357e7500ece5b010c3e8ca \ No newline at end of file diff --git a/resources/firmware/iPhone4,1/9A405/sha1sum b/resources/firmware/iPhone4,1/9A405/sha1sum new file mode 100644 index 0000000..cd1c01d --- /dev/null +++ b/resources/firmware/iPhone4,1/9A405/sha1sum @@ -0,0 +1 @@ +df036914f0dc069963589cc590575e04b6e3745a \ No newline at end of file diff --git a/resources/firmware/iPhone4,1/9A406/sha1sum b/resources/firmware/iPhone4,1/9A406/sha1sum new file mode 100644 index 0000000..acbe078 --- /dev/null +++ b/resources/firmware/iPhone4,1/9A406/sha1sum @@ -0,0 +1 @@ +869caa17e6b3176efb11b5de653ec8330d43b176 \ No newline at end of file diff --git a/resources/firmware/iPhone4,1/9B179/sha1sum b/resources/firmware/iPhone4,1/9B179/sha1sum new file mode 100644 index 0000000..37be828 --- /dev/null +++ b/resources/firmware/iPhone4,1/9B179/sha1sum @@ -0,0 +1 @@ +44f86c53e90a177292b4df45186cccbb12ceb1bc \ No newline at end of file diff --git a/resources/firmware/iPhone5,3/11A466/sha1sum b/resources/firmware/iPhone5,3/11A466/sha1sum new file mode 100644 index 0000000..13e9412 --- /dev/null +++ b/resources/firmware/iPhone5,3/11A466/sha1sum @@ -0,0 +1 @@ +3d15d882081632f699410b0ca86204ff0ad9b641 \ No newline at end of file diff --git a/resources/firmware/iPhone5,3/11A466/url b/resources/firmware/iPhone5,3/11A466/url new file mode 100644 index 0000000..5e8c7f2 --- /dev/null +++ b/resources/firmware/iPhone5,3/11A466/url @@ -0,0 +1 @@ +http://appldnld.apple.com/iOS7/091-9783.20130918.aazpo/iphone5%2C3_7.0_11a466_restore.ipsw \ No newline at end of file diff --git a/resources/firmware/iPhone5,4/11A466/sha1sum b/resources/firmware/iPhone5,4/11A466/sha1sum new file mode 100644 index 0000000..4eb4e5e --- /dev/null +++ b/resources/firmware/iPhone5,4/11A466/sha1sum @@ -0,0 +1 @@ +9f1333229d088dfe92f726d6167396300624f1bb \ No newline at end of file diff --git a/resources/firmware/iPhone5,4/11A466/url b/resources/firmware/iPhone5,4/11A466/url new file mode 100644 index 0000000..d6f6636 --- /dev/null +++ b/resources/firmware/iPhone5,4/11A466/url @@ -0,0 +1 @@ +http://appldnld.apple.com/iOS7/091-9778.20130818.er45t/iphone5%2C4_7.0_11a466_restore.ipsw \ No newline at end of file diff --git a/resources/jailbreak/greenpois0n/iPod2,1_7E18.tar b/resources/jailbreak/greenpois0n/iPod2,1_7E18.tar new file mode 100644 index 0000000000000000000000000000000000000000..a7d06cd4dd2e5a8a38b58fb8c07a60f199f5f0f7 GIT binary patch literal 20480 zcmeHPUuYaf7@wr6P4(0}Q){iQy=rZ1tGT=6{sd95A*lvqkv5<{Z8x{u+>*V$_d@0SSea;5FZ46P{^a=JqUt`^r4E1f>0ksD2iAR3C7>IGn>qvy=#;9YQY&Y z_xrw?@B3!<_s!n1lilr&v9^~uN+y+JKBhUw`;xv+Z73{}OeWKbOe&t}M|(QapJvfi z+h>LW$|X-PMx)nbs2g#N-dMR*Z1WnR1TQoHnPf)g|9Y$!o`2gKZ{r%c!u+S=$y6qp zh~xavq!LM$|LdE7tbvKVZrg=yuQ3hf+Kt{i|NZ@a8UOpA=Rc0$g+yOEonX=UwVOio zNdNQi|1bZ#@OKF8+$7bmPR6=A7{ebMK-IL-k$q1M4~>jLp;Emg!opl6Tm_M8P{{8n zs-}$%KNt8==Lz_^K={mUU-Bb+Dw^h*Qy!POehGgXmns$D7A`G*Qmh)PrVZ^G+q2jV zp(nzk0MxnlOJn0u{i10(Q+I^|xRk#EKR?EjS)HV5mgAX4w@@m+;LLQhdd1hXmoHTE;`4b%63H&3%*e}3aP-%>yP~Wl&;x%%*EPrLJ z7*Gr-1{4E|0mXn~Krx^gPz)#r6azOT1KXdwJeE>-DXM|o8I3M)S@VFju73@v}DPHb% z#%>0>z;56a5SP56D)4sTF<=Mq1n^eiDIiK{7PuDpF0cpq0T6o~A=tt`N;VX4QQj=c z+a!6nB=<@3Ba%EQ$s>}SmEj= zkuOb<;1z8vPtz_HvXdquTC(mmgz3C(IS5sDU}icMrX4O~DmZ3U6a$I@#eiZ!F`yVw z3@8Q^1BwB~fMS3%FxQ3ui{nzex|QqQKU|ub8tib*d|A6Mc)Z0R&Ek>4H4GffKV>aW2d-2a!V}!bUBI{6FjUgWc*#*b334RePTBEjR zV^AM2BUQrri(K0!#w4v7PZU3Fwa#m^xjhQsjn?B;ir;K*N2NKCT{DiUPv*HDYxo%E z(#|#9j3+v_%dJKE*vUS~KgmI9#_@3+7p<|=g6mcs2eAT-8D=GxH}jc<`--8ZwE7C7B+gS|yIj2*`X-28&mlXam!iHf~K*mW=q z8+RmA(NXV0eT5VhvUPu5SfJokuy4sa<`)*oZk^COp_3g|*^c_D?O;RuTG)$I+>ghE zPHhx_19ZAoioSbhP^nN~(0{kEukEevCHsv+Czi~8(&8vnkAIQNS=to;KG{(>pNAUk9u{`zu@Nlu*emR4&Con!LWk(MlxkNi?LaJ=Tn{oJOLeh@a!GYPIf_wRrF#kUl_M+GxoG;SbD7F zTG$JXSq^S=w{5Z;dVX|B8`*bYc>fsg>>J#_XaC6XfyZzUnfPr9eq-p|X;m8g!Ij<6FcA?C3i}GFPHvKrx^gPz)#r6a$I@#eiZ!F`yVw4BVg$ zgz(JO%nrt0i_&fa_R+TTi5^26755E}r#|QXL3{XP-u}_EynXZx$4|c#_HT99xTHR> zmVw@wTeK>;W$V9x{#SbbKa<8|!0P$`t4;0|_%G$3Hjb{qVFf0wpZ}%ahW9@t;z=~A z{I7uP<+{}8-)PHg09KIy3|(^b literal 0 HcmV?d00001 diff --git a/resources/patch/old/iPod2,1/3.1.3/018-6508-014.dmg.patch b/resources/patch/old/iPod2,1/3.1.3/018-6508-014.dmg.patch index 8b0c95b39aaa4e832906a7a08fb73961a70e35c2..cb11f03513bb0bd288e948a0ed6903993da37243 100644 GIT binary patch delta 9282 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 T`ca$=Aob!!t`-3kKo$Z3l8hne diff --git a/resources/patch/old/iPod2,1/3.1.3/kernelcache.release.s5l8720x.patch b/resources/patch/old/iPod2,1/3.1.3/kernelcache.release.s5l8720x.patch deleted file mode 100644 index ef84f00130c4313b6b32710bde4b16acdf116230..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 145 zcmZ/dev/null) if [[ -z $IPSWSHA1 ]]; then + log "Getting SHA1 hash from ipsw.me..." IPSWSHA1="$(curl https://api.ipsw.me/v2.1/$device_type/$build_id/sha1sum)" fi + log "Verifying $ipsw_dl.ipsw..." local IPSWSHA1L=$($sha1sum "${ipsw_dl//\\//}.ipsw" | awk '{print $1}') if [[ $IPSWSHA1L != "$IPSWSHA1" ]]; then if [[ -z $3 ]]; then @@ -1583,9 +1587,13 @@ ipsw_prepare_jailbreak() { if [[ $device_use_bb != 0 && $device_type != "$device_disable_bbupdate" ]]; then ExtraArgs+=" -bbupdate" elif [[ $device_type == "$device_disable_bbupdate" && $device_type == "iPhone"* ]]; then - device_dumpbaseband + device_dump baseband ExtraArgs+=" ../saved/$device_type/baseband.tar" fi + if [[ $device_actrec == 1 ]]; then + device_dump activation + ExtraArgs+=" ../saved/$device_type/activation.tar" + fi log "Preparing custom IPSW: $ipsw $ipsw_path.ipsw temp.ipsw $ExtraArgs ${JBFiles[*]}" "$ipsw" "$ipsw_path.ipsw" temp.ipsw $ExtraArgs ${JBFiles[@]} @@ -1870,7 +1878,7 @@ ipsw_prepare_32bit() { log "Found existing Custom IPSW. Skipping IPSW creation." return elif [[ $platform != "windows" && $device_type != "$device_disable_bbupdate" && - $ipsw_jailbreak != 1 && $device_proc != 4 ]]; then + $ipsw_jailbreak != 1 && $device_proc != 4 && $device_actrec != 1 ]]; then log "No need to create custom IPSW for non-jailbroken restores on $device_type-$device_target_build" return fi @@ -1883,9 +1891,13 @@ ipsw_prepare_32bit() { if [[ $device_use_bb != 0 && $device_type != "$device_disable_bbupdate" ]]; then ExtraArgs+=" -bbupdate" elif [[ $device_type == "$device_disable_bbupdate" && $device_type == "iPhone"* ]]; then - device_dumpbaseband + device_dump baseband ExtraArgs+=" ../saved/$device_type/baseband.tar" fi + if [[ $device_actrec == 1 ]]; then + device_dump activation + ExtraArgs+=" ../saved/$device_type/activation.tar" + fi if [[ $ipsw_jailbreak == 1 ]]; then case $device_target_vers in 7.1* ) JBFiles+=("panguaxe.tar");; @@ -1960,6 +1972,10 @@ ipsw_prepare_powder() { if [[ $ipsw_memory == 1 ]]; then ExtraArgs+=" -memory" fi + if [[ $device_actrec == 1 ]]; then + device_dump activation + ExtraArgs+=" ../saved/$device_type/activation.tar" + fi log "Preparing custom IPSW: $dir/powdersn0w $ipsw_path.ipsw temp.ipsw -base $ipsw_base_path.ipsw $ExtraArgs ${JBFiles[*]}" "$dir/powdersn0w" "$ipsw_path.ipsw" temp.ipsw -base "$ipsw_base_path.ipsw" $ExtraArgs ${JBFiles[@]} @@ -2034,12 +2050,16 @@ ipsw_prepare_powder2() { if [[ $ipsw_memory == 1 ]]; then ExtraArgs+=" -memory" fi - if [[ $device_use_bb != 0 && $device_type != "$device_disable_bbupdate" ]]; then + if [[ $device_use_bb != 0 && $device_type != "$device_disable_bbupdate" && $device_proc != 4 ]]; then ExtraArgs+=" -bbupdate" elif [[ $device_type == "$device_disable_bbupdate" && $device_type == "iPhone"* ]]; then - device_dumpbaseband + device_dump baseband ExtraArgs+=" ../saved/$device_type/baseband.tar" fi + if [[ $device_actrec == 1 ]]; then + device_dump activation + ExtraArgs+=" ../saved/$device_type/activation.tar" + fi log "Preparing custom IPSW: $dir/powdersn0w $ipsw_path.ipsw temp.ipsw -base $ipsw_base_path.ipsw $ExtraArgs" "$dir/powdersn0w" "$ipsw_path.ipsw" temp.ipsw -base "$ipsw_base_path.ipsw" $ExtraArgs @@ -2072,11 +2092,14 @@ ipsw_prepare_custom() { if [[ $device_target_vers == "5"* ]]; then comps+=("iBEC") + elif [[ $device_type == "iPod2,1" && $device_target_vers == "3.1.3" ]]; then + : + else + case $device_target_vers in + 4.2.1 | 4.1 ) :;; + * ) comps+=("iBoot" "Kernelcache" "LLB");; + esac fi - case $device_target_vers in - 4.2.1 | 4.1 ) :;; - * ) comps+=("iBoot" "Kernelcache" "LLB");; - esac ipsw_extract device_fw_key_check @@ -2158,6 +2181,9 @@ ipsw_prepare_custom() { ;; * ) "$dir/hfsplus" out.dmg untar ../resources/jailbreak/unthredeh4il.tar;; esac + if [[ $device_type == "iPod2,1" && $device_target_vers == "3.1.3" ]]; then + "$dir/hfsplus" out.dmg untar ../resources/jailbreak/greenpois0n/${device_type}_${device_target_build}.tar + fi fi rm $RootName log "Building RootFS" @@ -2743,17 +2769,41 @@ device_ramdisk() { ;; esac case $1 in - "baseband" ) - local baseband="../saved/$device_type/baseband.tar" + "activation" | "baseband" ) + local arg="$1" + local dump="../saved/$device_type" + local opt log "Mounting root filesystem" $ssh -p 2222 root@127.0.0.1 "mount.sh root" sleep 2 + log "Let's just dump both activation and baseband tars" log "Creating baseband.tar" $ssh -p 2222 root@127.0.0.1 "cd /mnt1; tar -cvf baseband.tar usr/standalone usr/local/standalone" - log "Copying baseband.tar" - $scp -P 2222 root@127.0.0.1:/mnt1/baseband.tar . - cp baseband.tar $baseband - $ssh -p 2222 root@127.0.0.1 "rm /mnt1/baseband.tar; reboot_bak" + log "Mounting data partition" + $ssh -p 2222 root@127.0.0.1 "mount.sh pv" + log "Creating activation.tar" + $ssh -p 2222 root@127.0.0.1 "cd /mnt1; tar -cvf activation.tar private/var/root/Library/Lockdown" + log "Copying tars" + $scp -P 2222 root@127.0.0.1:/mnt1/baseband.tar root@127.0.0.1:/mnt1/activation.tar . + print "* Reminder to backup dump tars if needed" + if [[ -s $dump/baseband.tar ]]; then + read -p "Baseband dump exists in $dump/baseband.tar. Overwrite? (Y/n)" opt + if [[ $opt != 'N' && $opt != 'n' ]]; then + cp baseband.tar $dump + fi + else + cp baseband.tar $dump + fi + opt= + if [[ -s $dump/activation.tar ]]; then + read -p "Activation records dump exists in $dump/activation.tar. Overwrite? (Y/n)" opt + if [[ $opt != 'N' && $opt != 'n' ]]; then + cp activation.tar $dump + fi + else + cp activation.tar $dump + fi + $ssh -p 2222 root@127.0.0.1 "rm -f /mnt1/baseband.tar /mnt1/activation.tar; reboot_bak" return ;; @@ -2992,6 +3042,11 @@ menu_print_info() { if [[ $de_bbupdate == 1 ]]; then warn "Disable bbupdate flag detected, baseband update is disabled. Proceed with caution" print "* For iPhones, current baseband will be dumped and stitched to custom IPSW" + print "* Stitching is supported in these restores/downgrades: 8.4.1/6.1.3, Other (with SHSH), powdersn0w" + fi + if [[ $device_actrec == 1 ]]; then + warn "Activation records flag detected. The activation records of your device will be dumped/stitched to IPSWs" + print "* Stitching is supported in these restores/downgrades: 8.4.1/6.1.3, Other (with SHSH), powdersn0w" fi print "* iOS Version: $device_vers" print "* ECID: $device_ecid" @@ -3538,20 +3593,21 @@ menu_other() { if [[ $device_mode != "none" ]]; then if (( device_proc < 7 )); then if [[ $device_mode == "Normal" ]]; then - menu_items+=("Put Device in kDFU Mode") - else - menu_items+=("Send Pwned iBSS") + menu_items+=("Enter kDFU Mode") fi + case $device_proc in + 5 | 6 ) menu_items+=("Send Pwned iBSS");; + * ) menu_items+=("Enter pwnDFU Mode");; + esac if [[ $device_type == "iPhone"* ]]; then menu_items+=("Dump Baseband") fi - menu_items+=("SSH Ramdisk" "Clear NVRAM") - fi - if [[ $device_type == "iPhone3,1" ]]; then - menu_items+=("Disable/Enable Exploit") - elif [[ $device_type == "iPhone2,1" ]]; then - menu_items+=("Install alloc8 Exploit") + menu_items+=("Activation Records" "SSH Ramdisk" "Clear NVRAM") fi + case $device_type in + iPhone3,1 ) menu_items+=("Disable/Enable Exploit");; + iPhone2,1 ) menu_items+=("Install alloc8 Exploit");; + esac menu_items+=("Attempt Activation") fi if [[ $device_proc != 8 ]]; then @@ -3567,15 +3623,16 @@ menu_other() { done case $selected in "Create Custom IPSW" ) menu_restore ipsw;; - "Put Device in kDFU Mode" ) mode="kdfu";; + "Enter kDFU Mode" ) mode="kdfu";; "Disable/Enable Exploit" ) mode="remove4";; "SSH Ramdisk" ) mode="ramdisk4";; "Clear NVRAM" ) mode="ramdisknvram";; - "Send Pwned iBSS" ) mode="pwned-ibss";; + "Send Pwned iBSS" | "Enter pwnDFU Mode" ) mode="pwned-ibss";; "(Re-)Install Dependencies" ) install_depends;; "Attempt Activation" ) mode="activate";; "Install alloc8 Exploit" ) mode="alloc8";; "Dump Baseband" ) mode="baseband";; + "Activation Records" ) mode="actrec";; "Go Back" ) back=1;; esac done @@ -3608,11 +3665,20 @@ device_jailbreakrd() { device_ramdisk jailbreak } -device_dumpbaseband() { - local baseband="../saved/$device_type/baseband.tar" - if [[ -e $baseband ]]; then - log "Found existing dumped baseband: $baseband" - return +device_dump() { + local arg="$1" + local dump="../saved/$device_type/$arg.tar" + local dmps + if [[ -s $dump ]]; then + log "Found existing dumped $arg: $dump" + print "* Select Y to use this, or N to delete it" + print "* Make sure to keep a backup of the dump if needed" + read -p "$(input 'Use this existing dump? (y/N) ')" opt + if [[ $opt == 'Y' || $opt == 'y' ]]; then + return + fi + log "Deleting existing dumped $arg" + rm $dump fi if [[ $device_mode == "Recovery" ]]; then device_enter_mode pwnDFU @@ -3627,19 +3693,23 @@ device_dumpbaseband() { iproxy_pid=$! sleep 2 device_sshpass - log "Creating baseband.tar" - $ssh -p 2222 root@127.0.0.1 "tar -cvf /tmp/baseband.tar /usr/standalone /usr/local/standalone" - log "Copying baseband.tar" - $scp -P 2222 root@127.0.0.1:/tmp/baseband.tar . - cp baseband.tar $baseband + log "Creating $arg.tar" + case $arg in + "baseband" ) dmps="/usr/standalone /usr/local/standalone";; + "activation" ) dmps="/private/var/root/Library/Lockdown";; + esac + $ssh -p 2222 root@127.0.0.1 "tar -cvf /tmp/$arg.tar $dmps" + log "Copying $arg.tar" + $scp -P 2222 root@127.0.0.1:/tmp/$arg.tar . + cp $arg.tar $dump elif [[ $device_mode == "DFU" ]]; then - device_ramdisk baseband + device_ramdisk $arg fi kill $iproxy_pid - if [[ ! -e $baseband ]]; then - error "Failed to dump baseband from device. Please run the script again" + if [[ ! -e $dump ]]; then + error "Failed to dump $arg from device. Please run the script again" fi - log "Dumping baseband done: $baseband" + log "Dumping $arg done: $dump" } restore_customipsw() { @@ -3721,6 +3791,18 @@ main() { ipsw_prepare restore_prepare ;; + "baseband" ) + device_dump baseband + log "Baseband dumping is done" + print "* To stitch baseband to IPSW, run Legacy iOS Kit with --disable-bbupdate argument:" + print " > ./restore.sh --disable-bbupdate" + ;; + "actrec" ) + device_dump activation + log "Activation records dumping is done" + print "* To stitch records to IPSW, run Legacy iOS Kit with --activation-records argument:" + print " > ./restore.sh --activation-records" + ;; "save-ota-blobs" ) shsh_save;; "kdfu" ) device_enter_mode kDFU;; "remove4" ) device_remove4;; @@ -3732,7 +3814,6 @@ main() { "activate" ) $ideviceactivation activate;; "alloc8" ) device_alloc8;; "jailbreak" ) device_jailbreakrd;; - "baseband" ) device_dumpbaseband;; "customipsw" ) restore_customipsw;; * ) :;; esac @@ -3760,6 +3841,7 @@ for i in "$@"; do "--disable-bbupdate" ) de_bbupdate=1; device_disable_bbupdate=1;; "--disable-sudoloop" ) device_disable_sudoloop=1;; "--disable-usbmuxd" ) device_disable_usbmuxd=1;; + "--activation-records" ) device_actrec=1;; esac done