Exemplo n.º 1
0
 def save_config_clicked(self, infile=True):
     raw_config = self.configuration_textarea.toPlainText()
     if raw_config == "":
         print "Press Generate button first"
     else:
         try:
             json_data = json.loads(raw_config)
             self.core.configuration.Clear()
             json2pb(self.core.configuration, json_data)
             if infile:
                 json_data = pb2json(self.core.configuration)
                 filename = QtWidgets.QFileDialog.getSaveFileName()[0]
                 filepath = Path(filename)
                 if filepath != '':
                     bytes = json.dumps(json_data, indent=4)
                     filepath.write_bytes(bytes)
                 else:
                     print "Invalid file given %s" % str(filepath)
         except KeyError as e:
             print "invalid key:"+e.message
Exemplo n.º 2
0
def load_config(name):
    f = open(name, "r")
    js = json.loads(f.read())
    f.close()
    return json2pb(config_pb2.configuration(), js)
Exemplo n.º 3
0
    def load_config_clicked(self):
        filename = QtWidgets.QFileDialog.getOpenFileName()[0]
        filepath = Path(filename)
        if not(filepath != "" and filepath.exists()):
            print "Invalid file given '%s'" % str(filepath)
            return

        raw = filepath.bytes()
        json_data = json.loads(raw)
        self.core.configuration.Clear()
        try:
            json2pb(self.core.configuration, json_data)
        except:
            print "Invalid JSON data given"
            return

        # -- Clear everything
        self.inputs_table.clearContents()
        self.inputs_table.setRowCount(0)
        self.initial_state_list.clear()
        self.bp_list.clear()
        self.start_field.clear()
        self.stop_field.clear()
        self.policy_table.clearContents()
        self.policy_table.setRowCount(0)
        self.libcall_selector.clear()
        self.syscall_selector.clear()
        self.instruction_selector.clear()
        # ------------
        # -- Fill everything back
        if "start" in json_data:
            self.start_field.setText(hex(json_data["start"]))
        if "stop" in json_data:
            self.stop_field.setText(hex(json_data["stop"]))
        if "libcalls" in json_data:
            for lib in [x for x in json_data["libcalls"] if x["name"] in self.libcalls]:
                self.libcall_selector.addItem(lib["name"])
        if "syscalls" in json_data:
            for lib in [x for x in json_data["syscalls"] if x["name"] in self.syscalls]:
                self.syscall_selector.addItem(lib["name"])
        if "instrs" in json_data:
            for i in [x for x in json_data["instrs"] if x["ident"].lower() in self.instructions]:
                self.instruction_selector.addItem(i["ident"].lower())
        if "policy" in json_data:
            for pol in json_data["policy"]:
                i = self.add_policy_item_action()
                split = pol.split(" => ")
                split2 = split[0].split("::")
                if len(split2) == 1:
                    self.set_policy_item_values(i, [split[0], "", "", "", split[1]])
                else:
                    self.set_policy_item_values(i, split2+[split[1]])
        if "inputs" in json_data:
            for input in json_data["inputs"]:
                print "Get in input !"
                i = self.add_input_action()
                wid = self.inputs_table.cellWidget(i, 0)
                wid.setCurrentIndex(wid.findText(input["typeid"]))
                self.inputs_table.item(i, 1).setText(hex(input["address"]))
                wid = self.inputs_table.cellWidget(i, 4)
                wid.setCurrentIndex(wid.findText(input["action"]))
                wid = self.inputs_table.cellWidget(i, 5)
                wid.setCurrentIndex(wid.findText(input["when"]))
                if input["typeid"] == "REG":
                    self.inputs_table.item(i, 2).setText(input["reg"]["name"])
                    reg = input['reg']["value"]
                    value = {"BIT8": reg["value_8"], "BIT16": reg["value_16"], "BIT32": reg["value_32"],
                             "BIT64": reg["value_64"], "BIT80": reg["value_80"], "BIT128": reg["value_128"],
                             "BIT256": reg["value_256"]}[reg["typeid"]]
                    if isinstance(value, int):
                        self.inputs_table.item(i, 3).setText(hex(value))
                    else:
                        self.inputs_table.item(i, 3).setText(to_hex(value))
                else:
                    self.inputs_table.item(i, 2).setText(hex(input["mem"]["addr"]))
                    self.inputs_table.item(i, 3).setText(to_hex(base64.b64decode(input["mem"]["value"])))
        if "breakpoints" in json_data:
            for bp in json_data["breakpoints"]:
                self.bp_list.addItem(hex(bp))
        if "initial_state" in json_data:
            for item in json_data["initial_state"]:
                self.initial_state_list.addItem("%x -> %x: %s" %(item["addr"], item["addr"]+len(item["value"]), item["value"]))
        if "direction" in json_data:
            self.direction_selector.setCurrentIndex(self.direction_selector.findText(json_data["direction"].title()))
        if "callcvt" in json_data:
            self.callcvt_selector.setCurrentIndex(self.callcvt_selector.findText(json_data["callcvt"].lower()))
        if "ksteps" in json_data:
            self.k_spinbox.setValue(json_data["ksteps"])
        if "analysis_name" in json_data:
            self.analysis_name_selector.setCurrentIndex(self.analysis_name_selector.findText(json_data["analysis_name"]))
        if "solver" in json_data:
            index = self.solver_selector.findText(json_data["solver"])
            if index != -1:
                self.solver_selector.setCurrentIndex(index)
        if "incremental" in json_data:
            self.incremental_solving_checkbox.setChecked(json_data["incremental"])
        if "timeout" in json_data:
            self.timeout_spinbox.setValue(json_data["timeout"])
        if "optim_cstprop" in json_data:
            self.cstprop_checkbox.setChecked(json_data["optim_cstprop"])
        if "optim_rebase" in json_data:
            self.rebase_checkbox.setChecked(json_data["optim_rebase"])
        if "optim_row" in json_data:
            self.row_checkbox.setChecked(json_data["optim_row"])
        if "default_action" in json_data:
            self.default_action_selector.setCurrentIndex(self.default_action_selector.findText(json_data["default_action"]))
        if "verbosity" in json_data:
            self.verbosity_slider.setValue(json_data["verbosity"])
        if "additional_parameters" in json_data:
            analyse = self.parent.analysis_from_name(json_data["additional_parameters"]["typeid"])
            analyse.config_widget.set_fields(json_data["additional_parameters"])

        self.configuration_textarea.setText(raw)
Exemplo n.º 4
0
 def from_string(self, s):
     return json2pb(self.config, json.loads(s))