Ejemplo n.º 1
0
    def run_BinDiff(self, v1, v2, experiment):
        """ as_binary_filename is a function that takes 2 arguments: experiment and iteration number, and returns the binary name for this iteration """
        try:
            f = open("bindiff.input", "w")

            binary_1 = experiment.as_binary_filename(experiment, v1)
            binary_2 = experiment.as_binary_filename(experiment, v2)

            f.write("%s#%s#%s" %
                    (binary_1, binary_2, binary_2))  # file1#file2#dirbase
            f.close()

            ida.run_Ida(binary_2,
                        extend_analysis=experiment.config.extend_IDA_analysis,
                        path=experiment.path)

            out_file = self.full_filename(experiment, v1, v2)

            self.run_BinDiff_once(binary_1, binary_2, out_file,
                                  ida.get_suffix(experiment), experiment.path)

        except OSError, e:
            print "Error in running BinDiff:"
            print e
            sys.exit(1)
Ejemplo n.º 2
0
    def analyze(self, experiment, version):
        exe = experiment.as_binary_filename(experiment, version)
        suffix = ida.get_suffix(experiment)

        ida.selectIdaSuffix(exe, suffix, experiment.path)
        ida.run_Ida_Script(exe, "analyze_turbodiff.idc", suffix,
                           experiment.path, [".ana", ".dis", ".turbodiffinfo"],
                           "")
Ejemplo n.º 3
0
    def match(self, experiment, v1, v2):
        exe1 = experiment.as_binary_filename(experiment, v1)
        exe2 = experiment.as_binary_filename(experiment, v2)
        suffix = ida.get_suffix(experiment)

        file_base = self.filename_base(experiment, v1, v2)

        options = "turbodiff_bart:%s %s" % (multiplatform.local_dir_entry(
            experiment.path, exe2) + ".idb", file_base)

        ida.selectIdaSuffix(exe1, suffix, experiment.path)
        ida.selectIdaSuffix(exe2, suffix, experiment.path)
        ida.run_Ida_Script(exe1, "match_turbodiff.idc", suffix,
                           experiment.path, [".turbodiffdump"], options,
                           file_base)
Ejemplo n.º 4
0
def match(experiment, v1, v2):
    exe1 = experiment.as_binary_filename(experiment, v1)
    exe2 = experiment.as_binary_filename(experiment, v2)
    suffix = ida.get_suffix(experiment)

    file_base = filename_base(experiment, v1, v2)

    options = "patchdiff2_bart:%s %s" % (multiplatform.local_dir_entry(
        experiment.path, exe2) + ".idb", file_base)

    ida.selectIdaSuffix(exe1, suffix, experiment.path)
    ida.selectIdaSuffix(exe2, suffix, experiment.path)
    ida.run_Ida_Script(exe1, "match_patchdiff2.idc", suffix, experiment.path, [
        ".patchdiff2.identical.out", ".patchdiff2.info", ".patchdiff2.matches",
        "patchdiff2.unmatched1", ".patchdiff2.unmatched2"
    ], options, file_base)
Ejemplo n.º 5
0
    def match(self, experiment, v1, v2):
        exe1 = experiment.as_binary_filename(experiment, v1)
        exe2 = experiment.as_binary_filename(experiment, v2)
        suffix = ida.get_suffix(experiment)

        file_base = self.filename_base(experiment, v1, v2)

        ida.selectIdaSuffix(exe1, suffix, experiment.path)
        ida.selectIdaSuffix(exe2, suffix, experiment.path)

        ida_call = '"%s" -A -S%s\\%s ' % (ida.ida_binary, ida.ida_scriptdir,
                                          "binarydiffer.idc")

        logging.info("Running BinaryDiffer %s against %s", exe1, exe2)
        call([
            binarydiffer, exe1, exe2,
            self.full_filename(experiment, v1, v2), ida_call
        ])
Ejemplo n.º 6
0
 def full_filename(self, experiment, v1, v2):
     suffix = ida.get_suffix(experiment)
     return ida.script_filename_raw(self.filename_base(experiment, v1, v2),
                                    suffix, self.matcher_suffix)