#!/bin/bash ###################################################################### # __________ __ ___. # Open \______ \ ____ ____ | | _\_ |__ _______ ___ # Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / # Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < # Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ # \/ \/ \/ \/ \/ # # * Script to unpack a Samsung YP-R0 firmware file (R0.ROM) */ ###################################################################### # The file was originally called MuonDecrypt.sh # # I'm not sure about the original author of this file, as it wasn't included in Samsung package. # But I guess it was done by JeanLouis, an Italian user of the Hardware Upgrade Forum. If needed, we should search throug old posts for that... # # bail out early set -e # some sanity checks if [ $# -lt 1 ] || [ $# -gt 2 ]; then echo "Usage $0 [out dir]" exit 1 fi ROM=$1 DIR=${2:-"."} DIR=${DIR%/} MBOOT="$DIR/MBoot.bin" MBOOT_TMP="${TMP_DIR:-$DIR}/MBoot.tmp" LINUX="$DIR/zImage" CRAMFS="$DIR/cramfs-fsl.rom" SYSDATA="$DIR/SYSDATA.bin" MD5SUMS="$DIR/MD5SUMS" TMP="${TMP_DIR:-$DIR}/_$$.tmp" if [ ! -f ./extract_section ]; then echo "Couldn't find extract_section binary (try 'make')" exit 1 fi if [ ! -f ./MuonEncrypt ]; then echo "Couldn't find MuonEncrypt binary (try 'make')" exit 1 fi mkdir -p $DIR if [ ! -w $DIR ]; then echo "Target dir not writable" exit 1 fi ExtractAndDecrypt() { START=$(expr $START - $2) echo "Extracting $1..." ./extract_section $ROM $TMP $START $2 echo "Decrypt $1..." ./MuonEncrypt $TMP > $1 } size=( `head -n 9 $ROM | tail -n 4 | while read LINE; do echo $LINE | cut -d\( -f 2 | cut -d\) -f 1; done`) checksum=( `head -n 9 $ROM | tail -n 4 | while read LINE; do echo $LINE | cut -d\( -f 3 | cut -d\) -f 1; done`) echo "${checksum[0]} $MBOOT" > $MD5SUMS echo "${checksum[1]} $LINUX" >> $MD5SUMS echo "${checksum[2]} $CRAMFS" >> $MD5SUMS echo "${checksum[3]} $SYSDATA" >> $MD5SUMS START=`stat -c%s $ROM` ExtractAndDecrypt $SYSDATA ${size[3]} ExtractAndDecrypt $CRAMFS ${size[2]} ExtractAndDecrypt $LINUX ${size[1]} ExtractAndDecrypt $MBOOT_TMP ${size[0]} rm $TMP echo "Create $MBOOT..." dd if=$MBOOT_TMP of=$MBOOT bs=96 count=1 2>/dev/null dd if=$MBOOT_TMP of=$MBOOT bs=1088 skip=1 seek=1 2>/dev/null rm $MBOOT_TMP echo "Check integrity:" md5sum -c $MD5SUMS