# Miori Lorenzo Dec 2012
#
# Samsung YP-F3, YP-U7, YP-W1 Firmware Extractor
#
# ~~~~~ Some fields are still unknown ~~~~~~
#
import struct, os, sys
romFile = sys.argv[1]
outFolder = "%s_extracted/" % romFile
os.mkdir(outFolder)
f = open(romFile, "rb")
f.seek(0, 2)
original_size = f.tell()
f.seek(0)
def getValue(bytes):
return struct.unpack("I", bytes)[0]
files_no = getValue(f.read(4))
total_size = 0
print "Total files: %i"%files_no
f.seek(0x14)
for i in xrange(files_no):
fn = f.read(52).replace("\x00", "")
print "File name: %s"%fn
fsize = getValue(f.read(4))
total_size += fsize
print "File size: 0x%x bytes"%fsize
fpos = getValue(f.read(4))
print "File pos: 0x%x"%fpos
print "Unknown field: 0x%x bytes"%(getValue(f.read(4)))
pos2continue = f.tell()
f.seek(fpos)
fout = open(outFolder + fn, "wb", 1024)
fout.write(f.read(fsize))
fout.close()
f.seek(pos2continue)
f.close()
print "Original file size: %i"%original_size
print "Total extracted size: %i"%total_size
print "Header & Stuff %i"%abs(original_size-total_size)