def serialize(self): from_field, to_field = self.from_field.text(), self.to_field.text() target_addr = self.target_addr_field.text() restrict_from, restrict_to = self.restrict_from_field.text( ), self.restrict_to_field.text() try: if from_field != "": self.conf.from_addr = utils.to_addr(from_field) if to_field != "": self.conf.to_addr = utils.to_addr(to_field) if target_addr != "": self.conf.target_addr = utils.to_addr(target_addr) else: print "Target address is mandatory for generic analysis" return None if restrict_from != "": self.conf.restrict_values_from = utils.to_addr(restrict_from) if restrict_to != "": self.conf.restrict_values_to = utils.to_addr(restrict_to) except ValueError: print "Invalid values for either from/to or target address" dba_expr = self.dba_expr_field.text() if dba_expr == "": print "DBA Expr field must be filled !" return None else: self.conf.dba = dba_expr if self.satisfiability_radiobutton.isChecked(): self.conf.kind = self.conf.SATISFIABILITY if self.values_radiobutton.isChecked(): self.conf.kind = self.conf.VALUES self.conf.limit_values = self.values_limit_spinbox.value() if self.get_formula_checkbox.isChecked(): self.conf.get_formula = True try: params = specific_parameters_t() params.typeid = params.GENERIC params.generic_params.CopyFrom(self.conf) return params except: print "Analysis specific arguments serialization failed" return None
def run(self): # -- GUI stuff self.result_widget.set_actions_visible_and_enabled(False) self.set_progress_visible(True) # ----------- # Refill the configuration file if self.configuration.ksteps != 0 and self.config_widget.radio_path_routine.isChecked( ): self.k = self.configuration.ksteps # Use the ksteps given if making the path on the whole routine self.result_widget.webview.append( "### Opaque predicates Detection ###\n") self.configuration.analysis_name = "static opaque" self.configuration.additional_parameters.typeid = self.configuration.additional_parameters.STANDARD target_val = str(self.config_widget.target_field.text()) self.txt_dump = open("/tmp/" + idc.GetInputFile() + "_dump.txt", "w") start_tps = time.time() if self.config_widget.radio_addr.isChecked(): addr = utils.to_addr(target_val) self.process_routine(idaapi.get_func(addr).startEA, pred_addr=addr) elif self.config_widget.radio_routine.isChecked(): addr = idc.LocByName(target_val) if addr == idc.BADADDR: addr = utils.to_addr(target_val) self.process_routine(addr) elif self.config_widget.radio_program.isChecked(): self.process_program() else: pass self.exec_time_total = time.time() - start_tps - self.exec_time_dep self.txt_dump.close() self.analyse_finished = True self.broker.terminate() # -- GUI stuff self.result_widget.set_actions_visible_and_enabled(True) self.set_progress_visible(False) # ------------ self.analysis_terminated()
def serialize(self): target_addr = self.target_field.text() try: if target_addr != "": self.conf.target_addr = utils.to_addr(target_addr) except ValueError: print "Invalid values for target address" self.conf.uniq = self.uniq_checkbox.isChecked() try: params = specific_parameters_t() params.typeid = params.STANDARD params.standard_params.CopyFrom(self.conf) return params except Exception: print "Analysis specific arguments serialization failed" return None