def save_sample(malware_id, output_dir): sample = Malware.details(id=malware_id, fields=VARIANT_SAMPLE_FIELDS) if sample.get(m.SAMPLE) == '': print 'No sample available for %s, skipping' % sample.get(m.ID) try: zipfilehandle = cStringIO.StringIO() zipfilehandle.write(base64.b64decode(sample.get(m.SAMPLE))) with zipfile.ZipFile(zipfilehandle, 'r') as zf: for entry in zf.infolist(): if not os.path.exists(output_dir): os.makedirs(output_dir) with open(os.path.join(output_dir, sample.get(m.SHA1)), 'wb') as f: print('Writing to %s' % sample.get(m.SHA1)) f.write(zf.read(entry.filename, sample.get(m.PASSWORD))) except Exception, e: print 'Error saving to file: %s' % str(e)