class FS: ''' File system object - default size of ~2MB ''' def __init__(self, segname=".zip", size=0x200000): self.segname = segname self.size = size self.memhandle = StringIO() done = False # (name, start, end) segs = segment.getSegsInfo() for s in segs: # if our segment is already present, use it if segname == s[0]: print "[*] fs.py: found an existing segment, using it." # start address self.addr = s[1] # the EOF is the first 4 bytes # seek to the actual data ea = self.addr + 4 flags = idc.GetFlags(ea) # get the data bytes = "" while flags != 0: bytes += chr(idc.Byte(ea)) ea += 1 flags = idc.GetFlags(ea) self.memhandle.write(bytes) self.memhandle.seek(0) # save the new size self.EOF = len(bytes) self.save_eof() done = True break # otherwise, make a new one if done == False: print "[*] fs.py: didn't find an existing segment, making a new one." self.addr = segment.alloc(self.size, segname) self.EOF = 0 self.save_eof() zipfs = ZipFile(self.memhandle, mode='w') zipfs.close() self.memhandle.seek(0)