from construct.core import Struct from construct.macros import * from construct import RepeatUntil, OneOf from util import hexdump SCFGItem = Struct("SCFGItem", String("tag", 4), String("data", 16, padchar="\x00") ) SCFG = Struct("SCFG", OneOf(String("magic", 4), ["gfCS"]), ULInt32("length"), ULInt32("unk1"), ULInt32("unk2"), ULInt32("unk3"), ULInt32("unk4") ) def parse_SCFG(data): res = {} scfg = SCFG.parse(data) assert scfg.length > 0x18 for i in Array((scfg.length - 0x18) / 20, SCFGItem).parse(data[0x18:scfg.length]): if i.tag != "\xFF\xFF\xFF\xFF": res[str(i.tag)[::-1]] = str(i.data) return res