|
Package Libs ::
Module debugtypes
|
|
1
2
3 """
4 (c) Immunity, Inc. 2004-2007
5
6
7 U{Immunity Inc.<http://www.immunityinc.com>}
8
9
10 """
11
12 __version__ = '1.0'
13
14 import debugger
15 import struct
16
17
18
19
20
21
22
23
24
25
26
27
28
29
32 self.handle = handle
33 self.type = 0
34 self.access = 0
35 self.data1 = 0
36 self.data2 = 0
37 self.refcount = 0
38 self.htype = ""
39 self.username = ""
40 self.nativename = ""
41
43 self.type = mem[0]
44 self.access = mem[1]
45 self.data1 = mem[2]
46 self.data2 = mem[3]
47 self.refcount = mem[4]
48 self.htype = mem[5]
49 self.username = mem[6]
50 self.nativename = mem[7]
51
54
57
60
63
66
69
72
75
77 return self.nativename
78
81 self.address = addr
82 self.section = ""
83 self.type = ""
84 self.name = ""
85 self.comment = ""
86 self.module = ""
87
89 self.module = tup[0].strip()
90 self.module = self.module.lower()
91
92 self.section = tup[1]
93 self.type = tup[2]
94 self.name = tup[3]
95 self.comment = tup[4]
96
99
102
105
108
111
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
149 - def __init__(self, name, baseaddress, size, entrypoint):
150 """
151 Module Information
152
153 @type name: STRING
154 @param name: Name of the module
155
156 @type baseaddress: DWORD
157 @param baseaddress: Base Address of the Module
158
159 @type size: DWORD
160 @param size: Size of the Module
161
162 @type entrypoint: DWORD
163 @param entrypoint: Entry Point
164 """
165
166
167
168
169
170
171
172 self.name = name.lower()
173 self.baseaddress = baseaddress
174 self.size = size
175 self.entrypoint = entrypoint
176 self.modDict = None
177 self.symbols = []
178 self.XREFto = {}
179 self.XREFfrom = {}
180
182 """
183 Get the all the functions from Module
184
185 @rtype: LIST of DWORD
186 @return: A List of the address of all function
187 """
188 return debugger.Getallfunctions(self.baseaddress)
189
190 - def _xrefs(self, address, XREF, debugger_callback):
191 code = self.getCodebase()
192 codesize = self.getCodesize()
193
194
195 if address >= code and address <= (code+codesize):
196 return []
197
198
199 if not XREF:
200 XREF = debugger_callback(address)
201
202
203 try:
204 return XREF[address]
205 except KeyError:
206 return []
207
209 """
210 Get the Xreference to the given address
211
212 @type address: DWORD
213 @param address: Address in the Module to get Xref to
214
215 @rtype: LIST of DWORD
216 @return: List of Address
217 """
218 return self._xrefs(address, self.XREFto, debugger.Getxref_to)
219
221 """
222 Get the Xreference from the given address
223
224 @type address: DWORD
225 @param address: Address in the Module to get Xref from
226
227 @rtype: LIST of DWORD
228 @return: List of Address
229 """
230 return self._xrefs(address, self.XREFfrom, debugger.Getxref_from)
231
233 """
234 Get the Base Address
235
236 @rtype: DWORD
237 @return: Base Address
238 """
239 return self.baseaddress
240
242 return debugger.Getreferencedstrings(self.entrypoint)
243
245 self.modDict = mod_dict
246
248 self.symbols = symbol
249
251 """
252 Analize the Current Module
253 """
254 return debugger.Analysecode(self.baseaddress)
255
256 - def get(self, name):
257 name = name.lower()
258 if not self.modDict.has_key(name):
259 return None
260 return self.modDict[name][0]
261
264
266 """
267 Get Base from module
268
269 @rtype: DWORD
270 @return: Base from the module
271 """
272 try:
273 return self.modDict['base'][0]
274 except KeyError:
275 return None
276
278 """
279 Get Size from module
280 """
281 try:
282 return self.modDict['size'][0]
283 except KeyError:
284 return None
285
287 """
288 Get Type from module
289 """
290 try:
291 return self.modDict['type'][0]
292 except KeyError:
293 return None
294
296 """
297 Get Codebase from module
298 """
299 try:
300 return self.modDict['codebase'][0]
301 except KeyError:
302 return None
303
305 """
306 Get Codesize from module
307
308 @rtype: DWORD
309 @return: Code Size
310 """
311 try:
312 return self.modDict['codesize'][0]
313 except KeyError:
314 return None
315
317 """
318 Get Resbase from module
319
320 @rtype: DWORD
321 @return: Res Base
322
323 """
324 try:
325 return self.modDict['resbase'][0]
326 except KeyError:
327 return None
328
330 """
331 Get Ressize from module
332
333 @rtype: DWORD
334 @return: Res Size
335 """
336 try:
337 return self.modDict['ressize'][0]
338 except KeyError:
339 return None
340
341 - def getEntry(self):
342 """
343 Get Entry from module
344
345 @rtype: DWORD
346 @return: Entry
347 """
348 try:
349 return self.modDict['entry'][0]
350 except KeyError:
351 return None
352
354 """
355 Get Database from module
356
357 @rtype: DWORD
358 @return: Database
359 """
360 try:
361 return self.modDict['database'][0]
362 except KeyError:
363 return None
364
366 """
367 Get Idatatable from module
368 """
369 try:
370 return self.modDict['idatatable'][0]
371 except KeyError:
372 return None
373
375 """Get Idatabase from module"""
376 try:
377 return self.modDict['idatabase'][0]
378 except KeyError:
379 return None
380
382 """
383 Get Edatatable from module
384 """
385 try:
386 return self.modDict['edatatable'][0]
387 except KeyError:
388 return None
389
391 """
392 Get Edatasize from module
393 """
394 try:
395 return self.modDict['edatasize'][0]
396 except KeyError:
397 return None
398
400 """
401 Get Reloctable from module
402 """
403 try:
404 return self.modDict['reloctable'][0]
405 except KeyError:
406 return None
407
409 """
410 Get Relocsize from module
411 """
412 try:
413 return self.modDict['relocsize'][0]
414 except KeyError:
415 return None
416
418 """
419 Get Name from module
420 """
421 try:
422 return self.name
423 except KeyError:
424 return None
425
427 """
428 Get Path from module
429 """
430 try:
431 return self.modDict['path'][0]
432 except KeyError:
433 return None
434
436 """
437 Get Nsect from module
438 """
439 try:
440 return self.modDict['nsect'][0]
441 except KeyError:
442 return None
443
445 """
446 Get Headersize from module
447 """
448 try:
449 return self.modDict['headersize'][0]
450 except KeyError:
451 return None
452
454 """
455 Get Fixupbase from module
456 """
457 try:
458 return self.modDict['fixupbase'][0]
459 except KeyError:
460 return None
461
463 """
464 Get Codedec from module
465 """
466 try:
467 return self.modDict['codedec'][0]
468 except KeyError:
469 return None
470
472 """
473 Get Codecrc from module
474 """
475 try:
476 return self.modDict['codecrc'][0]
477 except KeyError:
478 return None
479
481 """
482 Get Hittrace from module
483 """
484 try:
485 return self.modDict['hittrace'][0]
486 except KeyError:
487 return None
488
490 """
491 Get Datadec from module
492 """
493 try:
494 return self.modDict['datadec'][0]
495 except KeyError:
496 return None
497
499 """
500 Get Globaltypes from module
501 """
502 try:
503 return self.modDict['globaltypes'][0]
504 except KeyError:
505 return None
506
507 - def getMainentry(self):
508 """
509 Get Mainentry from module
510 """
511 try:
512 return self.modDict['mainentry'][0]
513 except KeyError:
514 return None
515
516 - def getRealsfxentry(self):
517 """
518 Get Realsfxentry from module
519 """
520 try:
521 return self.modDict['realsfxentry'][0]
522 except KeyError:
523 return None
524
526 """
527 Get Origcodesize from module
528 """
529 try:
530 return self.modDict['origcodesize'][0]
531 except KeyError:
532 return None
533
535 """
536 Get Sfxbase from module
537 """
538 try:
539 return self.modDict['sfxbase'][0]
540 except KeyError:
541 return None
542
544 """
545 Get Sfxsize from module
546 """
547 try:
548 return self.modDict['sfxsize'][0]
549 except KeyError:
550 return None
551
553 """
554 Get Issystemdll from module
555 """
556 try:
557 return self.modDict['issystemdll'][0]
558 except KeyError:
559 return None
560
562 """
563 Get Version from module
564 """
565 try:
566 return self.modDict['version'][0]
567 except KeyError:
568 return None
569
571 """
572 Check if module was analysed
573 """
574
575 return debugger.IsAnalysed(self.baseaddress)
576
578 """
579 get jump list from analysed module
580 """
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595 try:
596 return self.modDict['jumplist'][0]
597 except KeyError:
598 return None
599
600
603 self.address = 0
604 self.stack = 0
605 self.procedure = ""
606 self.calledfrom = 0
607 self.frame = 0
608
609 self.stackdump1 = 0
610 self.stackdump2 = 0
611 self.stackdump3 = 0
612
614 self.address = s[0]
615 self.stack = s[1]
616 self.procedure = str(s[2])
617 self.calledfrom = s[3]
618 self.frame = s[4]
619 self.stackdump1 = s[5]
620 self.stackdump2 = s[6]
621 self.stackdump3 = s[7]
622
623
625 return (self.stackdump1,self.stackdump2,self.stackdump3)
626
629
632
634 return self.procedure
635
638
640 return self.calledfrom
641
642
644 - def __init__(self,imm,title,col_titles):
645 """
646 Create a GUI Window Table
647
648 @type imm: Debugger Object
649 @param imm: Debugger
650
651 @type title: STRING
652 @param title: Title for the Window
653
654 @type col_titles: LIST of STRINGs
655 @param col_titles: List of the Column's Name
656 """
657 self.imm = imm
658 self.instance=self.createTable(title,col_titles)
659
661 title1=""
662 title2=""
663 title3=""
664 title4=""
665 title5=""
666 if len(col_titles) > 5:
667 maxcol=5
668 else:
669 maxcol=len(col_titles)
670 try:
671 title1=col_titles[0]
672 except:
673 pass
674 try:
675 title2=col_titles[1]
676 except:
677 pass
678 try:
679 title3=col_titles[2]
680 except:
681 pass
682 try:
683 title4=col_titles[3]
684 except:
685 pass
686 try:
687 title5=col_titles[4]
688 except:
689 pass
690 return debugger.Createtable(title,maxcol,title1,title2,title3,title4,title5)
691
692
693 - def Log(self, data, address=0, focus = False):
694 """
695 Add a message into a column
696
697 @type data: STRING
698 @param data: Message for the column
699
700 @type address: DWORD
701 @param address: (Optional, Default: 0) Address related to the message
702
703 @type focus: BOOLEAN
704 @param focus: (Optional, Default: False) Whether or not give focus to the window
705 """
706 return debugger.Addtotable(self.instance,address,"0x%08x" % address, data,"","","")
707
708
710 return debugger.IsValidHandle(self.instance)
711
712
713 - def add(self,address,data):
714 """
715 Add Data to the Window
716
717 @type address: DWORD
718 @param address: Address related to the Data
719
720 @type data: LIST OF STRING
721 @param data: Data to add on the different columns
722 """
723 col1=""
724 col2=""
725 col3=""
726 col4=""
727 col5=""
728 if not address:
729 address=0x0
730 try:
731 col1=data[0]
732 except:
733 pass
734 try:
735 col2=data[1]
736 except:
737 pass
738 try:
739 col3=data[2]
740 except:
741 pass
742 try:
743 col4=data[3]
744 except:
745 pass
746 try:
747 col5=data[4]
748 except:
749 pass
750 return debugger.Addtotable(self.instance,address,col1,col2,col3,col4,col5)
751
752
753 MemoryProtection = { 0x10 : "PAGE_EXECUTE", 0x20 : "PAGE_EXECUTE_READ", 0x40: "PAGE_EXECUTE_READWRITE",\
754 0x80 : "PAGE_EXECUTE_WRITECOPY", 0x01: "PAGE_NOACCESS", 0x02: "PAGE_READONLY",\
755 0x04 : "PAGE_READWRITE", 0x08: "PAGE_WRITECOPY" }
756
758 - def __init__(self, baseaddress, imm):
759 """
760 Memory Page Information
761
762 @type baseaddress: DWORD
763 @param baseaddress: Base Address of the Memory Page
764
765 @type imm: Debugger OBJECT
766 @param imm: Debugger
767 """
768 self.baseaddress = baseaddress
769 self.imm = imm
770 self.size = 0
771 self.type = 0
772 self.owner = 0
773 self.initaccess = 0
774 self.access = 0
775 self.threadid = 0
776 self.section = ""
777 self.mem = ""
778
779 - def _getfromtuple(self, mem):
780 requery = debugger.VmQuery(self.baseaddress)
781 self.size = mem[0]
782 self.type = mem[1]
783 self.owner = mem[2]
784 self.initaccess = requery[4]
785 self.access = requery[3]
786 self.threadid = mem[5]
787 self.section = mem[6]
788
789 - def getBaseAddress(self):
790 return self.baseaddress
791
794
796 """
797 Get Type of Memory Page
798
799 @rtype: DWORD
800 @return: Type of Page
801 """
802 return self.type
803
804 - def getOwner(self):
805 """
806 Get the Owner of the Memory Page
807
808 @rtype: STRING
809 @return: Owner of the Page
810 """
811
812 mod = self.imm.findModule(self.owner)
813 if not mod:
814 return "0x%08x" % self.owner
815 else:
816 return mod[0]
817
818 - def _getflags(self, page):
819 try:
820 return PageFlags[page]
821 except KeyError:
822 return " "
823
824 - def getInitAccess(self,human=0):
825 """
826 Get the Intial Access Flag of the Memory Page
827
828 @type human: Human Readable String Flag
829 @param human: Boolean
830
831 @rtype: DWORD
832 @return: Initial Access Flag
833
834
835 """
836 if human == 0:
837 return self.initaccess
838 else:
839 return MemoryProtection[self.initaccess & 0xFF]
840
841 - def getAccess(self,human=0):
842 """
843 Get the Access Flag of the Memory Page
844
845 @type human: Human Readable String Flag
846 @param human: Boolean
847
848 @rtype: DWORD
849 @return: Access Flag
850 """
851 if human == 0:
852 return self.access
853 else:
854 return MemoryProtection[self.access & 0xFF]
855
856
857
858 - def getThreadID(self):
859 """
860 Get the ID of the Thread
861
862 @rtype: DWORD
863 @return: Thread ID
864 """
865 return self.threadid
866
867 - def getMemory(self):
868 """
869 Get the Memory of the Page
870
871 @rtype: BUFFER
872 @return: Page Memory
873 """
874 if not self.mem:
875 self.mem = self.imm.readMemory(self.baseaddress, self.size)
876 return self.mem
877
878 - def getBaseAddress(self):
879 """
880 Get the Base Address of the Memory Page
881
882 @rtype: DWORD
883 @return: Base Address
884 """
885 return self.baseaddress
886
887 - def getSection(self):
888 """
889 Get the Section from the Memory Page
890
891 @rtype: STRING
892 @return: Section
893 """
894 return self.section
895
896 - def search(self, buf):
897 """
898 Search string in this memory page.
899
900 @param buf: Buffer to search for
901 @return: A list of address where the string was found on this memory page
902 """
903
904 self.getMemory()
905 if not self.mem:
906 return []
907 ndx = 0
908 find = []
909 buf_size = len(buf)
910 while 1:
911 f = self.mem[ndx:].find( buf )
912 if f == -1 : break
913 find.append( ndx + f + self.baseaddress )
914 ndx += f + buf_size
915 return find
916
917
918
919
922 """
923 Process Environment Block
924
925 @type imm: Debugger OBJECT
926 @param imm: Debugger
927 """
928
929
930 self.base = imm.getPEBaddress()
931
932 try:
933 self.PEB = imm.readMemory(self.base, 488)
934 except:
935 error = "can't read PEB struct"
936 raise Exception, error
937
938 """
939 0:000> !kdex2x86.strct PEB
940 Loaded kdex2x86 extension DLL
941 struct _PEB (sizeof=488)
942 +000 byte InheritedAddressSpace
943 +001 byte ReadImageFileExecOptions
944 +002 byte BeingDebugged
945 +003 byte SpareBool
946 +004 void *Mutant
947 +008 void *ImageBaseAddress
948 +00c struct _PEB_LDR_DATA *Ldr
949 +010 struct _RTL_USER_PROCESS_PARAMETERS *ProcessParameters
950 +014 void *SubSystemData
951 +018 void *ProcessHeap
952 +01c void *FastPebLock
953 +020 void *FastPebLockRoutine
954 +024 void *FastPebUnlockRoutine
955 +028 uint32 EnvironmentUpdateCount
956 +02c void *KernelCallbackTable
957 +030 uint32 SystemReserved[2]
958 +038 struct _PEB_FREE_BLOCK *FreeList
959 +03c uint32 TlsExpansionCounter
960 +040 void *TlsBitmap
961 +044 uint32 TlsBitmapBits[2]
962 +04c void *ReadOnlySharedMemoryBase
963 +050 void *ReadOnlySharedMemoryHeap
964 +054 void **ReadOnlyStaticServerData
965 +058 void *AnsiCodePageData
966 +05c void *OemCodePageData
967 +060 void *UnicodeCaseTableData
968 +064 uint32 NumberOfProcessors
969 +068 uint32 NtGlobalFlag
970 +070 union _LARGE_INTEGER CriticalSectionTimeout
971 +070 uint32 LowPart
972 +074 int32 HighPart
973 +070 struct __unnamed3 u
974 +070 uint32 LowPart
975 +074 int32 HighPart
976 +070 int64 QuadPart
977 +078 uint32 HeapSegmentReserve
978 +07c uint32 HeapSegmentCommit
979 +080 uint32 HeapDeCommitTotalFreeThreshold
980 +084 uint32 HeapDeCommitFreeBlockThreshold
981 +088 uint32 NumberOfHeaps
982 +08c uint32 MaximumNumberOfHeaps
983 +090 void **ProcessHeaps
984 +094 void *GdiSharedHandleTable
985 +098 void *ProcessStarterHelper
986 +09c uint32 GdiDCAttributeList
987 +0a0 void *LoaderLock
988 +0a4 uint32 OSMajorVersion
989 +0a8 uint32 OSMinorVersion
990 +0ac uint16 OSBuildNumber
991 +0ae uint16 OSCSDVersion
992 +0b0 uint32 OSPlatformId
993 +0b4 uint32 ImageSubsystem
994 +0b8 uint32 ImageSubsystemMajorVersion
995 +0bc uint32 ImageSubsystemMinorVersion
996 +0c0 uint32 ImageProcessAffinityMask
997 +0c4 uint32 GdiHandleBuffer[34]
998 +14c function *PostProcessInitRoutine
999 +150 void *TlsExpansionBitmap
1000 +154 uint32 TlsExpansionBitmapBits[32]
1001 +1d4 uint32 SessionId
1002 +1d8 void *AppCompatInfo
1003 +1dc struct _UNICODE_STRING CSDVersion
1004 +1dc uint16 Length
1005 +1de uint16 MaximumLength
1006 +1e0 uint16 *Buffer
1007 """
1008
1009 index = 0x000
1010 self.InheritedAddressSpace = struct.unpack("B",self.PEB[index])[0]
1011 index = 0x001
1012 self.ReadImageFileExecOptions = struct.unpack("B",self.PEB[index])[0]
1013 index = 0x002
1014 self.BeingDebugged = struct.unpack("B",self.PEB[index])[0]
1015 index = 0x003
1016 self.SpareBool = struct.unpack("B",self.PEB[index])[0]
1017 index = 0x004
1018 self.Mutant = struct.unpack("<L",self.PEB[index:index+4])[0]
1019 index = 0x008
1020 self.ImageBaseAddress = struct.unpack("<L",self.PEB[index:index+4])[0]
1021 index = 0x00c
1022 self.Ldr = struct.unpack("<L",self.PEB[index:index+4])[0]
1023 index = 0x010
1024 self.ProcessParameters = struct.unpack("<L",self.PEB[index:index+4])[0]
1025 index = 0x014
1026 self.SubSystemData = struct.unpack("<L",self.PEB[index:index+4])[0]
1027 index = 0x018
1028 self.ProcessHeap = struct.unpack("<L",self.PEB[index:index+4])[0]
1029 index = 0x01c
1030 self.FastPebLock = struct.unpack("<L",self.PEB[index:index+4])[0]
1031 index = 0x020
1032 self.FastPebLockRoutine = struct.unpack("<L",self.PEB[index:index+4])[0]
1033 index = 0x024
1034 self.FastPebUnlockRoutine = struct.unpack("<L",self.PEB[index:index+4])[0]
1035 index = 0x028
1036 self.EnviromentUpdateCount = struct.unpack("<L",self.PEB[index:index+4])[0]
1037 index = 0x02c
1038 self.KernelCallbackTable = struct.unpack("<L",self.PEB[index:index+4])[0]
1039 index = 0x030
1040 self.SystemReserved = []
1041 for i in range(0,2):
1042 self.SystemReserved.append(struct.unpack("<L",self.PEB[index:index+4])[0])
1043 index += 4
1044 index = 0x038
1045 self.FreeList = struct.unpack("<L",self.PEB[index:index+4])[0]
1046 index = 0x03c
1047 self.TlsExpansionCounter = struct.unpack("<L",self.PEB[index:index+4])[0]
1048 index = 0x040
1049 self.TlsBitmap = struct.unpack("<L",self.PEB[index:index+4])[0]
1050 index = 0x044
1051 self.TlsBitmapBits = []
1052 for i in range(0,2):
1053 self.TlsBitmapBits.append(struct.unpack("<L",self.PEB[index:index+4])[0])
1054 index += 4
1055 index = 0x04c
1056 self.ReadOnlySharedMemoryBase = struct.unpack("<L",self.PEB[index:index+4])[0]
1057 index = 0x050
1058 self.ReadOnlySharedMemoryheap = struct.unpack("<L",self.PEB[index:index+4])[0]
1059 index = 0x054
1060 self.ReadOnlyStaticServerData = struct.unpack("<L",self.PEB[index:index+4])[0]
1061 index = 0x058
1062 self.AnsiCodePageData = struct.unpack("<L",self.PEB[index:index+4])[0]
1063 index = 0x05c
1064 self.OemCodePageData = struct.unpack("<L",self.PEB[index:index+4])[0]
1065 index = 0x060
1066 self.UnicodeCaseTableData = struct.unpack("<L",self.PEB[index:index+4])[0]
1067 index = 0x064
1068 self.NumberOfProcessors = struct.unpack("<L",self.PEB[index:index+4])[0]
1069 index = 0x068
1070 self.NtGlobalFlag = struct.unpack("<L",self.PEB[index:index+4])[0]
1071
1072
1073
1074 index = 0x070
1075 self.CriticalSectionTimeout_LowPart = struct.unpack("<L",self.PEB[index:index+4])[0]
1076 index = 0x074
1077 self.CriticalSectionTimeout_HighPart = struct.unpack("<L",self.PEB[index:index+4])[0]
1078 index = 0x078
1079 self.HeapSegmentReserve = struct.unpack("<L",self.PEB[index:index+4])[0]
1080 index = 0x07c
1081 self.HeapSegmentCommit = struct.unpack("<L",self.PEB[index:index+4])[0]
1082 index = 0x080
1083 self.HeapDeCommitTotalFreeThreshold = struct.unpack("<L",self.PEB[index:index+4])[0]
1084 index = 0x084
1085 self.HeapDeCommitFreeBlockThreshold = struct.unpack("<L",self.PEB[index:index+4])[0]
1086 index = 0x088
1087 self.NumberOfHeaps = struct.unpack("<L",self.PEB[index:index+4])[0]
1088 index = 0x08c
1089 self.MaximumNumberOfHeaps = struct.unpack("<L",self.PEB[index:index+4])[0]
1090 index = 0x090
1091 self.ProcessHeaps = struct.unpack("<L",self.PEB[index:index+4])[0]
1092 index = 0x094
1093 self.GdiSharedHandleTable = struct.unpack("<L",self.PEB[index:index+4])[0]
1094 index = 0x098
1095 self.ProcessStarterHelper = struct.unpack("<L",self.PEB[index:index+4])[0]
1096 index = 0x09c
1097 self.GdiDCAttributeList = struct.unpack("<L",self.PEB[index:index+4])[0]
1098 index = 0x0a0
1099 self.LoaderLock = struct.unpack("<L",self.PEB[index:index+4])[0]
1100 index = 0x0a4
1101 self.OSMajorVersion = struct.unpack("<L",self.PEB[index:index+4])[0]
1102 index = 0x0a8
1103 self.OSMinorVersion = struct.unpack("<L",self.PEB[index:index+4])[0]
1104 index = 0x0ac
1105 self.OSBuildNumber = struct.unpack("<H",self.PEB[index:index+2])[0]
1106 index = 0x0ae
1107 self.OSCSDVersion = struct.unpack("<H",self.PEB[index:index+2])[0]
1108 index = 0x0b0
1109 self.OSPlatformId = struct.unpack("<L",self.PEB[index:index+4])[0]
1110 index = 0x0b4
1111 self.ImageSubsystem = struct.unpack("<L",self.PEB[index:index+4])[0]
1112 index = 0x0b8
1113 self.ImageSubsystemMajorVersion = struct.unpack("<L",self.PEB[index:index+4])[0]
1114 index = 0x0bc
1115 self.ImageSubsystemMinorVersion = struct.unpack("<L",self.PEB[index:index+4])[0]
1116 index = 0x0c0
1117 self.ImageProcessAffinityMask = struct.unpack("<L",self.PEB[index:index+4])[0]
1118 index = 0x0c4
1119
1120 self.GdiHandleBuffer = []
1121 for i in range(0,34):
1122 self.GdiHandleBuffer.append(struct.unpack("<L",self.PEB[index:index+4])[0])
1123 index += 4
1124 index = 0x14c
1125 self.PostProcessInitRoutine = struct.unpack("<L",self.PEB[index:index+4])[0]
1126 index = 0x150
1127 self.TlsExpansionBitmap = struct.unpack("<L",self.PEB[index:index+4])[0]
1128 index = 0x154
1129
1130 self.TlsExpansionBitmapBits = []
1131 for i in range(0,32):
1132 self.TlsExpansionBitmapBits.append(struct.unpack("<L",self.PEB[index:index+4])[0])
1133 index += 4
1134 index = 0x1d4
1135 self.SessionId = struct.unpack("<L",self.PEB[index:index+4])[0]
1136 index = 0x1d8
1137 self.AppCompatInfo = struct.unpack("<L",self.PEB[index:index+4])[0]
1138 index = 0x1dc
1139
1140 self.CSDVersion_Length = struct.unpack("<H",self.PEB[index:index+2])[0]
1141 index += 2
1142 self.CSDVersion_MaximumLength = struct.unpack("<H",self.PEB[index:index+2])[0]
1143 index += 2
1144 self.CSDVersion_Buffer = struct.unpack("<H",self.PEB[index:index+2])[0]
1145 index += 2
1146