Exemplo n.º 1
0
    def test_dynamic_sub_constraints(self):

        # the constraints are imposed through code.
        # this one only accepts head and tail struct_entry values.
        entry_validator = ctypes6.EntryDynamicValidator(self.memory_handler)
        module_constraints = constraints.ModuleConstraints()
        module_constraints.set_dynamic_constraints('struct_entry',
                                                   entry_validator)
        self.validator = basicmodel.CTypesRecordConstraintValidator(
            self.memory_handler, module_constraints)

        # should be valid. its the head
        node1 = self.offsets['test2'][0]  # head
        node2 = self.offsets['test3'][0]  # tail
        items1 = self.offsets['start_list'][0]
        items2 = self.offsets['end_list'][0]
        for instance_addr in [node1, node2, items1, items2]:
            m = self.memory_handler.get_mapping_for_address(instance_addr)
            node = m.read_struct(instance_addr, self.ctypes_gen64.struct_Node)
            self.assertTrue(self.validator.is_valid(node))

        # should be invalid.
        items_mid = self.offsets['mid_list'][0]
        head_first = self.offsets['head_loop_first_item'][0]
        head_last = self.offsets['head_loop_last_item'][0]
        for instance_addr in [items_mid, head_first, head_last]:
            m = self.memory_handler.get_mapping_for_address(instance_addr)
            node = m.read_struct(instance_addr, self.ctypes_gen64.struct_Node)
            self.assertFalse(self.validator.is_valid(node))
Exemplo n.º 2
0
    def test_dynamic_constraints(self):

        # the constraints are imposed through code.
        dyna_validator = ctypes6.NodeDynamicValidator()
        module_constraints = constraints.ModuleConstraints()
        module_constraints.set_dynamic_constraints('struct_Node',
                                                   dyna_validator)
        self.validator = basicmodel.CTypesRecordConstraintValidator(
            self.memory_handler, module_constraints)

        # should be valid.
        node1 = self.offsets['test2'][0]
        for instance_addr in [node1]:
            m = self.memory_handler.get_mapping_for_address(instance_addr)
            node = m.read_struct(instance_addr, self.ctypes_gen64.struct_Node)
            self.assertTrue(self.validator.is_valid(node))

        # should be invalid.
        node2 = self.offsets['test3'][0]  # 0xdeadbabe
        items1 = self.offsets['mid_list'][0]
        items2 = self.offsets['end_list'][0]
        for instance_addr in [items1, items2, node2]:
            m = self.memory_handler.get_mapping_for_address(instance_addr)
            node = m.read_struct(instance_addr, self.ctypes_gen64.struct_Node)
            self.assertFalse(self.validator.is_valid(node))
Exemplo n.º 3
0
 def setUp(self):
     self.memory_handler = dump_loader.load('test/src/test-ctypes5.32.dump')
     self._load_offsets_values('test/src/test-ctypes5.32.dump')
     self.my_target = target.TargetPlatform.make_target_linux_32()
     self.my_ctypes = self.my_target.get_target_ctypes()
     self.my_utils = self.my_target.get_target_ctypes_utils()
     self.my_model = self.memory_handler.get_model()
     _constraints = constraints.ModuleConstraints()  # empty
     self.validator = basicmodel.CTypesRecordConstraintValidator(
         self.memory_handler, _constraints)
     self.ctypes_gen32 = self.my_model.import_module(
         "test.src.ctypes5_gen32")
Exemplo n.º 4
0
 def setUp(self):
     self.memory_handler = dump_loader.load('test/dumps/ssh/ssh.1/')
     self.my_target = self.memory_handler.get_target_platform()
     self.my_ctypes = self.my_target.get_target_ctypes()
     self.my_utils = self.my_target.get_target_ctypes_utils()
     self.my_model = self.memory_handler.get_model()
     _constraints = constraints.ModuleConstraints()  # empty
     self.validator = basicmodel.CTypesRecordConstraintValidator(
         self.memory_handler, _constraints)
     try:
         self.sslsnoop = self.my_model.import_module("sslsnoop")
     except ImportError:
         self.skipTest('sslsnoop not present')
     self.classname = 'sslsnoop.ctypes_openssh.session_state'
     self.known_offset = 0xb84ee318