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()
Пример #3
0
 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)
Пример #4
0
    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())
Пример #6
0
''' 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_ = [