def store_funky(self, data): global num_funky num_funky += 1 # store funky input for further analysis funky_folder = self.config.argument_values['work_dir'] + "/funky/" atomic_write(funky_folder + "input_%02d_%05d" % (self.slave_id, num_funky), data)
def __set_agent_and_driver(self): driver_bin = read_binary_file(self.config.argument_values['driver']) bin = p32(len(driver_bin)) + driver_bin agent_bin = read_binary_file(self.config.argument_values['agent']) bin += p32(len(agent_bin)) + agent_bin assert (len(bin) <= self.agent_size) atomic_write(self.binary_filename, bin)
def set_payload(self, payload, write=True): self.set_payload_len(len(payload), write=False) # IoControlCode payload = p32(self.node_struct["info"]["IoControlCode"]) + payload atomic_write( QueueNode.__get_payload_filename(self.get_exit_reason(), self.get_id()), payload)
def write_result(self, file): global METHODS_NUM, methods output = "" for i in range(METHODS_NUM): if (self.methods[i] > 0): output += methods[i] + ":\t" + str(self.methods[i]) + "\n" atomic_write(file, output)
def maybe_write_stats(self): cur_time = time.time() if cur_time - self.write_last < self.write_thres: return self.write_last = cur_time self.data["run_time"] = cur_time - self.data["start_time"] self.data[ "execs/sec"] = self.data["total_execs"] / self.data["run_time"] atomic_write(self.filename, msgpack.packb(self.data, use_bin_type=True))
def check_funkyness_and_store_trace(self, data): global num_funky exec_res = self.q.send_payload() hash = exec_res.hash() trace1 = read_binary_file(self.config.argument_values['work_dir'] + "/pt_trace_dump_%d" % self.slave_id) exec_res = self.q.send_payload() if (hash != exec_res.hash()): print_warning("Validation identified funky bits, dumping!") num_funky += 1 trace_folder = self.config.argument_values['work_dir'] + "/traces/funky_%d_%d" % (num_funky, self.slave_id); os.makedirs(trace_folder) atomic_write(trace_folder + "/input", data) atomic_write(trace_folder + "/trace_a", trace1) trace2 = read_binary_file(self.config.argument_values["work_dir"] + "/pt_trace_dump_%d" % self.slave_id) atomic_write(trace_folder + "/trace_b", trace2) return exec_res
def __set_agent(self): max_size = (128 << 20) agent_bin = self.config.argument_values['agent'] bin = read_binary_file(agent_bin) assert (len(bin) <= max_size) atomic_write(self.binary_filename, bin)
def write_statistics(self): atomic_write(self.stats_file, msgpack.packb(self.data, use_bin_type=True))
def __save_payload_sequence(self, sequence): atomic_write(self.__get_filename() + ".seq", lz4.block.compress(json.dumps(sequence)))
def write_bitmap(self, bitmap): atomic_write(self.__get_bitmap_filename(), lz4.frame.compress(bitmap))
def __set_binary(self, filename, binaryfile, max_size): bin = read_binary_file(binaryfile) assert (len(bin) <= max_size) atomic_write(filename, bin)
def save_to_file(self, label): workdir = FuzzerConfiguration().argument_values['work_dir'] filename = "/corpus/%s/payload_%05d" % (label, Program.PayloadCount) atomic_write(workdir + filename, self.serialize()) Program.PayloadCount += 1
def write_metadata(self): return atomic_write( self.__get_metadata_filename(self.get_id()), msgpack.packb(self.program_struct, use_bin_type=True))
def write_statistics(self): self.data["duration"] = time.time() - self.data["start_time"] self.data["execs/sec"] = ( self.data["executions"] + self.data["executions_redqueen"]) / self.data["duration"] atomic_write(self.filename, msgpack.packb(self.data))
def write_statistics(self): atomic_write(self.filename, msgpack.packb(self.data))
def set_payload(self, payload, write=True): self.set_payload_len(len(payload), write=False) atomic_write( QueueNode.__get_payload_filename(self.get_exit_reason(), self.get_id()), payload)
def __save_payload(self, payload): atomic_write(self.__get_filename(), payload)
def write_metadata(self): return atomic_write(QueueNode.__get_metadata_filename(self.get_id()), msgpack.packb(self.node_struct, use_bin_type=True))
def set_bitmap(self, bitmap): atomic_write(self.__get_bitmap_filename(), zlib.compress(bitmap))