All pastes #763237 Raw Edit

Mine

public python v1 · immutable
·published 2007-11-06 09:05 UTC
rendered paste body
import syssys.path.append('..\\..')from PyStand import Structuint32 = Struct.uint32class XBEHeader(Struct):	__endian__ = Struct.LE	def __format__(self):		self.magic = Struct.string(4)		self.sig = Struct.string(0x100)		self.base, self.headerSize, self.imageSize = uint32[3]		self.imageHeaderSize, self.timestamp = uint32[2]		self.certAddr, self.numSects, self.sectHeaders = uint32[3]		self.flags, self.entry, self.tls = uint32[3]		self.stackCommit, self.heapReserve, self.heapCommit = uint32[3]		self.baseAddress, self.peImageSize = uint32[2]		self.peChecksum, self.peTimestamp = uint32[2]		self.pathName, self.fileName, self.uniFileName = uint32[3]		self.thunkAddr, self.nonKernel = uint32[2]		self.numLibraryVers, self.libraryVers = uint32[2]		self.kernelLibraryVers, self.xapiLibraryVers = uint32[2]		self.logoBitmapAddr, self.logoBitmapSize = uint32[2]class XBECert(Struct):	__endian__ = Struct.LE	def __format__(self):		self.certSize, self.timestamp, self.titleID = uint32[3]		self.titleName = Struct.string(0x50, encoding='utf-16', stripNulls=True)		self.altTitleIDs = uint32[16]		self.media, self.region, self.rating = uint32[3]		self.diskNumber, self.version = uint32[2]		self.LANKey, self.sigKey = Struct.string(16)[2]		self.altSigKeys = Struct.string(16)[16]class XBESectionHeader(Struct):	__endian__ = Struct.LE	def __format__(self):		self.flags, self.virtAddr, self.virtSize = uint32[3]		self.rawAddr, self.rawSize = uint32[2]		self.nameAddr, self.nameRefCount = uint32[2]		self.headRefCount, self.tailRefCount = uint32[2]		self.digest = Struct.string(20)class XBELibraryVersion(Struct):	__endian__ = Struct.LE	def __format__(self):		self.library = Struct.string(8)		self.majorVersion, self.minorVersion, self.buildVersion = Struct.uint16[3]		self.flags = Struct.uint16class XBETLS(Struct):	__endian__ = Struct.LE	def __format__(self):		self.dataStart, self.dataEnd = uint32[2]		self.indexAddress, self.callbackAddress = uint32[2]		self.zeroFillSize, self.characteristics = uint32[2]class XBE(object):	def __init__(self, fp):		data = fp.read()				header = XBEHeader(data)		assert header.magic == 'XBEH'				cert = XBECert(data, header.certAddr - header.base)				print cert.titleName				self.sections = {}				sectPos = header.sectHeaders - header.base		for sect in range(header.numSects):			sect = XBESectionHeader(data, sectPos)			sectPos += len(sect)						nameAddr = sect.nameAddr - header.base			sectName = data[nameAddr:nameAddr+20].split('\0', 1)[0]			sectData = data[sect.rawAddr:sect.rawAddr+sect.rawSize]						self.sections[sectName] = XBESection(name=sectName, addr=sect.virtAddr, size=sect.virtSize, data=sectData)class XBESection(object):	def __init__(self, name, addr, size, data):		self.name, self.addr, self.size, self.data = \		name, addr, size, dataif __name__=='__main__':	XBE(file(sys.argv[1], 'rb'))