# 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)