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))
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))
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")
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
def test_config_constraints(self): # the constraints are imposed through config file. parser = constraints.ConstraintsConfigHandler() module_constraints = parser.read('test/src/ctypes6.constraints') self.validator = basicmodel.CTypesRecordConstraintValidator( self.memory_handler, module_constraints) # should be valid. node1 = self.offsets['test2'][0] node2 = self.offsets['test3'][0] # 0xdeadbabe for instance_addr in [node1, node2]: 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. items1 = self.offsets['mid_list'][0] items2 = self.offsets['end_list'][0] for instance_addr in [items1, items2]: 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))