Decryptipsw.sh
出自iPhone.org.hk
- !/bin/sh
- v0.3
if [ $# -lt 1 ] then
echo "usage : $0 iPhone1,1_2.0_5A274d_Restore.ipsw" exit 0
else
IPSWNAMES=$@
fi DDONE=0 for IPSWNAME in $IPSWNAMES do if [ -f "$IPSWNAME" ] then PWD=`pwd` rm -f Restore.plist unzip -o $IPSWNAME Restore.plist > /dev/null 2>/dev/null if [ -f Restore.plist ]; then DEVICECLASS=`defaults read $PWD/Restore DeviceClass` PRODUCTVERSION=`defaults read $PWD/Restore ProductVersion` BUILDVERSION=`defaults read $PWD/Restore ProductBuildVersion` RESTORERAMDISK=`defaults read $PWD/Restore RestoreRamDisks | awk '/User/ { split($0, line, "\""); printf("%s\n", line[2]); }'` SYSTEMRESTOREIMAGE=`defaults read $PWD/Restore SystemRestoreImages | awk '/User/ { split($0, line, "\""); printf("%s\n", line[2]); }'` unzip -o $IPSWNAME $RESTORERAMDISK > /dev/null 2>/dev/null FILEFORMAT=`hexdump -n4 -e '"%c%c%c%c\n"' $RESTORERAMDISK` if [ "$FILEFORMAT" == "8900" ] then
DECRYPTKEY=`strings $RESTORERAMDISK | egrep "^[0-9a-fA-F]{72}\$"` if [ "$DECRYPTKEY" == "" ]; then RAMDISKLENGTH=`hexdump -s12 -n4 -e '"%d\n"' $RESTORERAMDISK` RAMDISKCOUNT=`echo $RAMDISKLENGTH / 512 | bc` dd if=$RESTORERAMDISK of=$DEVICECLASS$PRODUCTVERSION$BUILDVERSION.stripped.dmg bs=512 skip=4 count=$RAMDISKCOUNT conv=sync > /dev/null 2>/dev/null openssl enc -d -in $DEVICECLASS$PRODUCTVERSION$BUILDVERSION.stripped.dmg -out $DEVICECLASS$PRODUCTVERSION$BUILDVERSION.ramdisk.dmg -aes-128-cbc -K 188458A6D15034DFE386F23B61D43774 -iv 0 > /dev/null 2>/dev/null rm -f $DEVICECLASS$PRODUCTVERSION$BUILDVERSION.stripped.dmg else dd if=$RESTORERAMDISK of=$DEVICECLASS$PRODUCTVERSION$BUILDVERSION.ramdisk.dmg bs=512 skip=4 conv=sync > /dev/null 2>/dev/null fi
else
RAMDISKLENGTH=`hexdump -s12 -n4 -e '"%d\n"' $RESTORERAMDISK` RAMDISKCOUNT=`echo $RAMDISKLENGTH / 32 | bc` dd if=$RESTORERAMDISK of=$DEVICECLASS$PRODUCTVERSION$BUILDVERSION.ramdisk.dmg bs=32 skip=1 count=$RAMDISKCOUNT conv=sync > /dev/null 2>/dev/null
fi rm -f $RESTORERAMDISK DECRYPTKEY=`strings $DEVICECLASS$PRODUCTVERSION$BUILDVERSION.ramdisk.dmg | egrep "^[0-9a-fA-F]{72}\$"` if [ "$DECRYPTKEY" == "" ]; then
echo "Decrypt failed : $IPSWNAME"
else unzip -o $IPSWNAME $SYSTEMRESTOREIMAGE > /dev/null 2>/dev/null ./vfdecrypt -i $SYSTEMRESTOREIMAGE -o $DEVICECLASS$PRODUCTVERSION$BUILDVERSION.decrypted.dmg -k $DECRYPTKEY > /dev/null 2>/dev/null rm -f $SYSTEMRESTOREIMAGE echo md5 $IPSWNAME echo "RAMDISK = $DEVICECLASS$PRODUCTVERSION$BUILDVERSION.ramdisk.dmg" echo "FILESYSTEM = $DEVICECLASS$PRODUCTVERSION$BUILDVERSION.decrypted.dmg" echo "DECRYPTKEY = $DECRYPTKEY" DDONE=1 fi else
echo "Invalid ipsw file $IPSWNAME"
fi else echo "$IPSWNAME NOT FOUND" fi done if [ "$DDONE" == "1" ]; then
echo "Job Completed!!!"
fi