def setUp(self): model.reset() types.reload_ctypes(4, 4, 8) self.memdumpname = 'test/src/test-ctypes7.32.dump' self.classname = 'test.src.ctypes7.struct_Node' self._load_offsets_values(self.memdumpname) self.address = self.offsets['test1'][0] # 0x8f40008 # load layout in x32 from test.src import ctypes7 from test.src import ctypes7_gen32 model.copyGeneratedClasses(ctypes7_gen32, ctypes7) model.registerModule(ctypes7) # apply constraints ctypes7.populate()
def setUp(self): model.reset() types.reload_ctypes(8, 8, 16) self.memdumpname = 'test/src/test-ctypes7.64.dump' self.classname = 'test.src.ctypes7.struct_Node' self._load_offsets_values(self.memdumpname) self.address = self.offsets['test1'][0] # 0x000000001b1e010 # load layout in x64 from test.src import ctypes7 from test.src import ctypes7_gen64 model.copyGeneratedClasses(ctypes7_gen64, ctypes7) model.registerModule(ctypes7) # apply constraints ctypes7.populate()
def setUp(self): model.reset() self.mappings = dump_loader.load('test/src/test-ctypes6.32.dump') self.memdumpname = 'test/src/test-ctypes6.32.dump' self._load_offsets_values(self.memdumpname) sys.path.append('test/src/') from test.src import ctypes6 from test.src import ctypes6_gen32 model.copyGeneratedClasses(ctypes6_gen32, ctypes6) model.registerModule(ctypes6) # apply constraints ctypes6.populate(self.mappings.config) self.offset = self.offsets['test1'][0] self.m = self.mappings.get_mapping_for_address(self.offset) self.usual = self.m.readStruct(self.offset, ctypes6.struct_usual)
def test_registerModule(self): from haystack import model model.reset() try: from test.structures import good from test.structures import good_gen from test.structures import bad_gen # copy bad_gen in good model.copyGeneratedClasses(bad_gen, good) model.copyGeneratedClasses(good_gen, good) self.assertIn('Struct1', good.__dict__) self.assertIn('Struct2', good.__dict__) self.assertNotIn('Struct1_py', good.__dict__) self.assertNotIn('expectedValues', good.Struct1.__dict__) except ImportError as e: self.fail(e) try: from test.structures import bad # test if module has members self.assertEquals(bad.BLOCK_SIZE, 16) self.assertIn('Struct1', bad.__dict__) self.assertIn('expectedValues', bad.Struct1.__dict__) # same Struct1 object is imported in bad and good self.assertIn('expectedValues', good.Struct1.__dict__) self.assertNotIn('expectedValues', good.Struct2.__dict__) except ImportError as e: self.fail(e) # test if register works (creates POPO) model.registerModule(bad) self.assertIn('Struct1_py', bad.__dict__) self.assertIn('expectedValues', bad.Struct1.__dict__) # POPO is not create in good self.assertNotIn('Struct1_py', good.__dict__) self.assertIn('expectedValues', good.Struct1.__dict__) self.assertNotIn('expectedValues', good.Struct2.__dict__) model.registerModule(good) # creates POPO for the rest self.assertIn('Struct2_py', good.__dict__) self.assertIn('expectedValues', good.Struct1.__dict__) # expectedValues is in a function self.assertNotIn('expectedValues', good.Struct2.__dict__) # add an expectedValues good.populate() self.assertIn('expectedValues', good.Struct1.__dict__) self.assertIn('expectedValues', good.Struct2.__dict__)
def setUp(self): model.reset() types.reload_ctypes(8, 8, 16) class MyConfig: def get_word_size(self): return 8 self.memdumpname = 'test/src/test-ctypes6.64.dump' self.node_structname = 'test.src.ctypes6.struct_Node' self.usual_structname = 'test.src.ctypes6.struct_usual' self._load_offsets_values(self.memdumpname) self.address1 = self.offsets['test1'][0] # struct_usual self.address2 = self.offsets['test2'][0] # struct_Node self.address3 = self.offsets['test3'][0] # struct_Node # load layout in x64 from test.src import ctypes6 from test.src import ctypes6_gen64 model.copyGeneratedClasses(ctypes6_gen64, ctypes6) model.registerModule(ctypes6) # apply constraints ctypes6.populate(MyConfig())
''' insure ctypes basic types are subverted ''' from haystack import model from haystack.model import is_valid_address,is_valid_address_value,getaddress,array2bytes,bytes2array from haystack.model import LoadableMembers,RangeValue,NotNull,CString from haystack.reverse.win32 import winheap_generated as gen log=logging.getLogger('winheap') # ============== Internal type defs ============== ################ START copy generated classes ########################## # copy generated classes (gen.*) to this module as wrapper model.copyGeneratedClasses(gen, sys.modules[__name__]) # register all classes (gen.*, locally defines, and local duplicates) to haystack # create plain old python object from ctypes.Structure's, to picke them model.registerModule(sys.modules[__name__]) ################ END copy generated classes ########################## ############# Start expectedValues and methods overrides ################# ## fix partial declaration _HEAP_LOCK._fields_ = [