示例#1
0
 def type_undefined(self, view, name, type):
     def type_undefined_complete(self):
         results.append("type undefined {0} {1}".format(name))
     evt = binja.AnalysisCompletionEvent(bv, type_undefined_complete)
示例#2
0
    def test_events(self):
        """Event failure"""
        file_name = self.unpackage_file("helloworld")
        bv = binja.BinaryViewType['ELF'].open(file_name)
        bv.update_analysis_and_wait()

        results = []

        def simple_complete(self):
            results.append("analysis complete")

        evt = binja.AnalysisCompletionEvent(bv, simple_complete)

        class NotifyTest(binja.BinaryDataNotification):
            def data_written(self, view, offset, length):
                results.append("data written: offset {0} length {1}".format(
                    hex(offset), hex(length)))

            def data_inserted(self, view, offset, length):
                results.append("data inserted: offset {0} length {1}".format(
                    hex(offset), hex(length)))

            def data_removed(self, view, offset, length):
                results.append("data removed: offset {0} length {1}".format(
                    hex(offset), hex(length)))

            def function_added(self, view, func):
                results.append("function added: {0}".format(func.name))

            def function_removed(self, view, func):
                results.append("function removed: {0}".format(func.name))

            def data_var_added(self, view, var):
                results.append("data var added: {0}".format(hex(var.address)))

            def data_var_removed(self, view, var):
                results.append("data var removed: {0}".format(hex(
                    var.address)))

            def string_found(self, view, string_type, offset, length):
                results.append("string found: offset {0} length {1}".format(
                    hex(offset), hex(length)))

            def string_removed(self, view, string_type, offset, length):
                results.append("string removed: offset {0} length {1}".format(
                    hex(offset), hex(length)))

            def type_defined(self, view, name, type):
                results.append("type defined: {0}".format(name))

            def type_undefined(self, view, name, type):
                results.append("type undefined: {0}".format(name))

        test = NotifyTest()
        bv.register_notification(test)
        sacrificial_addr = 0x84fc

        type, name = bv.parse_type_string("int foo")
        type_id = type.generate_auto_type_id("source", name)

        bv.define_type(type_id, name, type)
        bv.undefine_type(type_id)

        bv.update_analysis_and_wait()

        bv.insert(sacrificial_addr, b"AAAA")
        bv.update_analysis_and_wait()

        bv.define_data_var(sacrificial_addr, binja.types.Type.int(4))
        bv.update_analysis_and_wait()

        bv.write(sacrificial_addr, b"BBBB")
        bv.update_analysis_and_wait()

        bv.add_function(sacrificial_addr)
        bv.update_analysis_and_wait()

        bv.remove_function(bv.get_function_at(sacrificial_addr))
        bv.update_analysis_and_wait()

        bv.undefine_data_var(sacrificial_addr)
        bv.update_analysis_and_wait()

        bv.remove(sacrificial_addr, 4)
        bv.update_analysis_and_wait()

        bv.unregister_notification(test)

        return fixOutput(sorted(results))
示例#3
0
 def string_removed(self, view, string_type, offset, length):
     def string_removed_complete(self):
         results.append("string removed {0} {1}".format(offset, length))
     evt = binja.AnalysisCompletionEvent(bv, string_removed_complete)
示例#4
0
 def data_var_updated(self, view, var):
     def data_var_updated_complete(self):
         results.append("data var updated {0}".format(var.name))
     evt = binja.AnalysisCompletionEvent(bv, data_var_updated_complete)
示例#5
0
 def function_update_requested(self, view, func):
     def function_update_requested_complete(self):
         results.append("function update requested {0}".format(func.name))
     evt = binja.AnalysisCompletionEvent(bv, function_update_requested_complete)
示例#6
0
 def data_removed(self, view, offset, length):
     def data_removed_complete(self):
         results.append("data removed {0} {1}".format(offset, length))
     evt = binja.AnalysisCompletionEvent(bv, data_removed_complete)
示例#7
0
 def data_written(self, view, offset, length):
     def data_written_complete(self):
         results.append("data written {0} {1}".format(offset, length))
     evt = binja.AnalysisCompletionEvent(bv, data_written_complete)