CreateMutex
까보면 다나와~
분류 전체보기 (216)

64비트인지 아닌지 확인하기x2




Private Const PROCESSOR_ARCHITECTURE_INTEL = 0
Private Const PROCESSOR_ARCHITECTURE_IA64 = 6
Private Const PROCESSOR_ARCHITECTURE_AMD64 = 9
Private Const PROCESSOR_ARCHITECTURE_UNKNOWN = &HFFFF


GetCurrentProcess -> IsWow64Process


return cmp 0 

0 이면 64bit아님


or


GetNativeSystemInfo

위의 그램을 보면 파라메터로 들어가는 push eax값이 lpSystemInfo로 해당 주소값에 ProcessorArchitecture 결과값이 저장된다. 따라서 cmp ax, 9와 같이 해당 주소의 값을 찾아와서 비교를 하면 64bit 여부를 알아낼 수 있다.

return cmp 9, 6 이면 64bit

0 이면 32bit




  Comments,     Trackbacks

명령줄에서 심볼로드

IDA에 Windbg로 live debugging 중인데 symbol없다.


이렇게 하자.


WINDBG> .sympath srv*d:\sym*http://msdl.microsoft.com/download/symbols


물론 .reload 해줘서 적용!

  Comments,     Trackbacks

근사한 집~

http://blog.naver.com/myirena/70141223657

'멋진 사진들' 카테고리의 다른 글

봄이 오고 있다~  (0) 2012.02.14
우연히 2일째 보는 사진 - Manarola, Cinque Terre  (0) 2012.01.11
새로 바꾼 배경화면  (0) 2011.12.07
내가 좋아하는 색감  (0) 2011.12.02
합성같은..  (0) 2011.11.30
  Comments,     Trackbacks

추천 포스팅

http://jslee402.blog.me/10123955282

'아리스리생각 > 죽기전에 가봐야 할 곳' 카테고리의 다른 글

동화속의 나라?? 독일  (0) 2012.11.13
중궁 왕망령?  (0) 2012.03.27
  Comments,     Trackbacks

Bootkit 심층분석

작년에 분석한건데 공유(&관리) 차원에서 포스팅해 보아요.




1) 드라이버의 설치

최초 웹을 통해 실행되는 Agent 파일에 의해 드라이버가 설치된다.

  

이후 Agent는 생성한 파일을 서비스에 등록하여 실행시키고 DeviceIoControl 함수를 통해 직접 통신을 한다.

  

이때 드라이버는 Parameter로 보내지는 Control Code를 기준으로 각각의 명령을 처리한다.

  

Control Code에 대한 분석은 밑에서 다시 자세히 보도록 하자.

 

2) Driver Entry 분석

먼저 Control Code 명령을 받기 위한 IRP_MJ_DEVICE_CONTROL Object를 생성한다.

  

이후 IoCreateFile 함수에 대한 SSDT 후킹을 한다. (SSDT Hook같은 경우 이미 많이 보아온 기법이라 자세하게 보지는 않았다.)

  

후킹이 완료되면 atapi DriverObject를 찾아서 DeviceTypeFILE_DEVICE_DISK” DeviceObject를 찾고 Attach Device"\\Device\\Harddisk0\\DR0"인 경우 그 값을 전역변수로 저장한다.

 

, “\Driver\atapi”를 통해 Attached Device“\\Device\\Harddisk0\\DR0”이고 DeviceTypeFILE_DEVICE_DISK”인 조건의 atapi DeviceObject를 찾는 것이다. 이는 Disk ReadWrite시 필요한 조건임을 추측 할 수 있다.

 

3) Read/Write Disk Control Code 분석

위에서 언급했듯 Control Code로 넘어온 값들은 다음과 같이 일정한 조건을 통해 다양한 명령을 수행하게 된다.

  

Parameter 222008, 222000인 경우 파일명을 버퍼에 저장하여 로컬에서 접근을 막도록 한다. SSDT와 관련된 내용으로 자세한 분석은 생략한다.

 

222014의 경우 실제 하드디스크의 특정 SectorWrite를 수행한다.


 

넘어오는 Parameter Agent에서 보낸 Data I/O manager를 통해 SystemBuffer에 포함된다. IRP 데이터의 입출력 처리 방식은 따로 언급하지 않겠다. 다만, SystemBuffer를 사용하는 방식은 IRP_BUFFERED_IO(0X10)이고 IRP + 8 byte offset에 위치한 Flags값으로 확인 가능하다.

 

위의 그림에서 볼 수 있듯이 SystemBuffer(밑의 80D50DF8) + 8 byte offset 위치에 있는 값이 악성코드가 디스크에 쓰는 값이고(밑의 빨간 네모 박스), Sector 번호 및 Sector Counter값이 같이 인자로 넘어온다.

 


그렇다면 해당 인자를 통해 어떠한 방식으로 물리 디스크에 데이터를 삽입할까?

 

악성코드가 물리 디스크에 데이터를 Read/Write하는 방식은 다음과 같다.

(1) 임의 메모리에 ScsiRequestBlock(이하 SRB) 구조체를 생성 및 셋팅

(2) ATAPI DeviceObject Index를 통해 해당 Device의 비동기적 IRP 생성

(3) 생성한 IRP 셋팅 – StackMajorFunction, SRB 포인터 등을 설정

(4) ATAPI Device에 붙은 Atapi.sys (Driver)IRP_MJ_INTERNAL_DEVICE_CONTROL를 호출하여 디스크 접근

 

다음은 소스코드이다.

 


위의 코드 중 특별히 확인해야 할 부분은 IRP Stack에 들어가는 MajorFunction 3(IRP_MJ_READ)인경우 Command Descriptor Block(CDB) 구조체의 OpCode Read이고 아닐 경우 Write라는 것이다.

CDB에는 실제 물리 디스크에 어느 위치를 사용할 지 정의할 수 있고 따라서 SRB구조체의 CDB는 디스크 위치를 찾아가는 중요 포인트가 된다.

 

다음은 MBR Sector를 수정하는 SRB이다.

 

노란색으로 나타낸 부분이 CDB 부분이며 주황색으로 표시된 부분이 CDB[5]으로 Logical Block Address(LBA)을 나타낸다. LBA Sector를 나타내는 번호이고 위의 그림상으로 00 이므로 0번째 Sector가 된다. 0번째 Sector Disk MBR이 위치하는 곳이다. CDB[7] Sector Counter로 몇 개의 Sector를 사용할지 나타낸다. 위의 그림상에서는 01이므로 한 개의 Sector를 사용한다는 뜻이다. (보통의 경우 1 Sector 512byte로 만약 쓰고자 하는 데이터가 그 이상이 될 때는 사용할 Sector를 더 많이 지정해 줘야한다.)

 

CDB는 사용하는 목적에 따라서 여러가지 구조로 정의 할 수 있는데 악성코드에 의해 만들어지는 것은 10 Size 2A(write)로 정의되었다.

  

CDB(10) Write의 구조

 

SRB가 셋팅되면 IRP를 생성하고, Stack SRB의 구조체를 Parameter로 설정한다.

 

Stack의 첫번째 0FIRP_MJ_INTERNAL_DEVICE_CONTROL(Major Function)을 나타내며 80D7A858 SRB의 포인터가 된다. IRP_MJ_INTERNAL_DEVICE_CONTROL SCSI Request를 요청할 때 SRB 포인터를 Parameter로 설정한다.

 

이후 IofCallDriver 함수를 통해 atapi driver에게 IRP를 넘기게 되고 Stack에 담겨진 SRB 데이터를 읽어 물리 디스크에 직접 접근하게 된다.

 

 

 

디스크에 Write를 완료하면 Agent 222020 ControlCode를 호출하게 되는데 이는 atapi driverIRP_MJ_INTERNAL_DEVICE_CONTROL함수를 후킹하게 된다.

  

더 이상 해당 SCSI I/O Request를 수행 할 수 없게 되는 것이다.

  


디스크에 삽입된 데이터를 분석하면 Anti AV, OnlinegameHack Tool, DownLoader 등이 있으며, 부팅시 변조된 MBR 코드에 의해 자동으로 실행되어 진다.

  Comments,     Trackbacks

Active Setup이란

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Active Setup\Installed Components


위에 있는게 레지스트리 경로이고 다음은 관련된 설명이다.


Active Setup is a mechanism for executing commands once per user early during logon. Active Setup is used by some operating system components like Internet Explorer to set up an initial configuration for new users logging on for the first time. Active Setup is also used in some corporation’s software distribution systems to create an initial customized user environment. To understand why such a mechanism is necessary we need to take a step back.


중략..


Active Setup runs before the shell is started, i.e. before the Desktop appears. Commands started by Active Setup run synchronously, blocking the logon while they are executing. Active Setup is executed before any Run or RunOnce registry entries are evaluated because Run(Once) is handled by the shell, Explorer.exe, which is started only after Active Setup is finished.



더 자세한 설명은 아래 사이트에서 확인!.. 정말 잘 나와있네요.

http://www.sepago.de/helge/2010/04/22/active-setup-explained/



  Comments,     Trackbacks

hosts파일 변조 악성코드의 배짱(?)

MoveFileExA

lpExistingFileName "C:\WINDOWS\system32\drivers\etc\5Uiue"

lpNewFileName (null)

dwFlags "MOVEFILE_DELAY_UNTIL_REBOOT"


최근 주말에 유포되는 악성코드에서 사용하는 행위.

별거 아닌거 같지만 여러 이유가 있는 거 같군. ㅎ

  Comments,     Trackbacks

User-mode Inline Patch를 위한 함수 주소 찾는 방법

*NGRBOT에서 사용하는 방법

 

다음은 패치하는 코드.(Native 함수 LdrEnumerateLoadedModules를 통해 모든 모듈에 CallBack함수를 실행, CallBack 함수 및 _Inline_Patch_Routine에서 Inline Patch 행위를 한다.)

 

주소 찾는 방식.(메모리상 Header, Export Table 정보를 이용한다.)

 

'유용한 지식 자료들 > 악성코드 기법' 카테고리의 다른 글

64비트인지 아닌지 확인하기x2  (0) 2012.11.05
hosts파일 변조 악성코드의 배짱(?)  (0) 2012.08.22
ntdll.bsearch  (2) 2012.08.01
Security Service Disable  (0) 2012.06.25
keylogging 기법  (0) 2011.05.24
  Comments,     Trackbacks

PEB structure
kd> !strct _PEB
struct _PEB (sizeof=488)
+000 byte InheritedAddressSpace
+001 byte ReadImageFileExecOptions
+002 byte BeingDebugged
+003 byte SpareBool
+004 void *Mutant
+008 void *ImageBaseAddress
+00c struct _PEB_LDR_DATA *Ldr
+010 struct _RTL_USER_PROCESS_PARAMETERS *ProcessParameters
+014 void *SubSystemData
+018 void *ProcessHeap
+01c void *FastPebLock
+020 void *FastPebLockRoutine
+024 void *FastPebUnlockRoutine
+028 uint32 EnvironmentUpdateCount
+02c void *KernelCallbackTable
+030 uint32 SystemReserved[2]
+038 struct _PEB_FREE_BLOCK *FreeList
+03c uint32 TlsExpansionCounter
+040 void *TlsBitmap
+044 uint32 TlsBitmapBits[2]
+04c void *ReadOnlySharedMemoryBase
+050 void *ReadOnlySharedMemoryHeap
+054 void **ReadOnlyStaticServerData
+058 void *AnsiCodePageData
+05c void *OemCodePageData
+060 void *UnicodeCaseTableData
+064 uint32 NumberOfProcessors
+068 uint32 NtGlobalFlag
+070 union _LARGE_INTEGER CriticalSectionTimeout
+070 uint32 LowPart
+074 int32 HighPart
+070 struct __unnamed3 u
+070 uint32 LowPart
+074 int32 HighPart
+070 int64 QuadPart
+078 uint32 HeapSegmentReserve
+07c uint32 HeapSegmentCommit
+080 uint32 HeapDeCommitTotalFreeThreshold
+084 uint32 HeapDeCommitFreeBlockThreshold
+088 uint32 NumberOfHeaps
+08c uint32 MaximumNumberOfHeaps
+090 void **ProcessHeaps
+094 void *GdiSharedHandleTable
+098 void *ProcessStarterHelper
+09c uint32 GdiDCAttributeList
+0a0 void *LoaderLock
+0a4 uint32 OSMajorVersion
+0a8 uint32 OSMinorVersion
+0ac uint16 OSBuildNumber
+0ae uint16 OSCSDVersion
+0b0 uint32 OSPlatformId
+0b4 uint32 ImageSubsystem
+0b8 uint32 ImageSubsystemMajorVersion
+0bc uint32 ImageSubsystemMinorVersion
+0c0 uint32 ImageProcessAffinityMask
+0c4 uint32 GdiHandleBuffer[34]
+14c function *PostProcessInitRoutine
+150 void *TlsExpansionBitmap
+154 uint32 TlsExpansionBitmapBits[32]
+1d4 uint32 SessionId
+1d8 void *AppCompatInfo
+1dc struct _UNICODE_STRING CSDVersion
+1dc uint16 Length
+1de uint16 MaximumLength
+1e0 uint16 *Buffer





========kernel32.dll???================

1. fs레지스터 => teb 를 가르키고 있다.

2. teb+0x30 위치에 peb 구조체를 가르키는 offset이 위치해 있다.

3. peb+0x0c의 위치에 PEB_LDR_DATA 구조체를 가르키는 포인터가 있다.

4. PEB_LDR_DATA+0x1c에 InInitializationOnderModuleList에 있고,
그 곳의 1번째가 ntdll.dll 2번째가 kernel32.dll 주소이다. **

InInitializationOnderModuleList 구조체 정보

0x000 Flink : LIST_ENTRY
0x004 Blink : LIST_ENTRY
0x008 DllBase : Ptr32
0x00C EntryPoint : Ptr32
0x010 SizeOfImage : Uint4B
0x014 FullDllName : UNICODE_STRING
0x014 (0x000) Length : Uint2B
0x016 (0x002) MaximumLength : Uint2B
0x018 (0x004) Buffer : Ptr32
0x01C BaseDllName : UNICODE_STRING
0x01C (0x000) Length : Uint2B
0x01E (0x002) MaximumLength : Uint2B
0x020 (0x004) Buffer : Ptr32


============find function=====================

5. kernel32.dll base address + 0x3c

6. exports directory offset =kernel32.dll base address+PE header offset+120(0x78)

7. exports directory table=kernel32.dll base address+exports directory offset

8. name pointers table =exports directory table+32

9. name pointers table (함수 이름이나 hash사용)

10. exports directory table+36
ordinals table 함수의 주소를 가르킨다. ordinals table의 서수의 순서에 근거하여 함수의 주소를 찾아낸다.


============heap overflow 에서 peb 이용방법================

FastPebLockRoutine 이 함수를 덮어쓴다 (undocumented 오프셋 위치는 PEB + 0x20
메모리:0x7ffdf020 0x7ffdf024)

(정의)Address of fast-locking routine for PEB. Definition of routine is:

typedef void (*PPEBLOCKROUTINE)(

PVOID PebLock

);

Peb->FastPebLockRoutine =>&RtlEnterCriticalSection (0xC0000005) overwrite
잘못된 메모리참조

=====================================================================================
undocumented peb source code

#define LDRP_STATIC_LINK 0x00000002 // dll은 과정까지 정적 링크한다
#define LDRP_IMAGE_DLL 0x00000004
#define LDRP_LOAD_IN_PROGRESS 0x00001000 //모듈 로드
#define LDRP_UNLOAD_IN_PROGRESS 0x00002000 //모듈 언로드
#define LDRP_ENTRY_PROCESSED 0x00004000 //
#define LDRP_ENTRY_INSERTED 0x00008000
#define LDRP_CURRENT_LOAD 0x00010000
#define LDRP_FAILED_BUILTIN_LOAD 0x00020000
#define LDRP_DONT_CALL_FOR_THREAD 0x00040000
#define LDRP_PROCESS_ATTACH_CALLED 0x00080000 // (DllMain)
#define LDRP_DEBUG_SYMBOLS_LOADED 0x00100000
#define LDRP_IMAGE_NOT_AT_BASE 0x00200000
#define LDRP_WX86_IGNORE_MACHINETYPE 0x00400000 // 사용한다! kdex2x86.strct _PEB_LDR_DATA

다음은 peb를 이용해 현재의 디렉토리 정보 얻을때 사용할 수 있는 peb에 속해있는 구조체------------
_RTL_USER_PROCESS_PARAMETERS (peb + 0x10)

typedef struct _RTL_USER_PROCESS_PARAMETERS
{
ULONG MaximumLength; // 00h
ULONG Length; // 04h
ULONG Flags; // 08h
ULONG DebugFlags; // 0Ch
PVOID ConsoleHandle; // 10h
ULONG ConsoleFlags; // 14h
HANDLE InputHandle; // 18h
HANDLE OutputHandle; // 1Ch
HANDLE ErrorHandle; // 20h
CURDIR CurrentDirectory; // 24h ********현재의 디렉토리 정보 ************
UNICODE_STRING DllPath; // 30h
UNICODE_STRING ImagePathName; // 38h
UNICODE_STRING CommandLine; // 40h
PWSTR Environment; // 48h
ULONG StartingX; // 4Ch
ULONG StartingY; // 50h
ULONG CountX; // 54h
ULONG CountY; // 58h
ULONG CountCharsX; // 5Ch
ULONG CountCharsY; // 60h
ULONG FillAttribute; // 64h
ULONG WindowFlags; // 68h
ULONG ShowWindowFlags; // 6Ch
UNICODE_STRING WindowTitle; // 70h
UNICODE_STRING DesktopInfo; // 78h
UNICODE_STRING ShellInfo; // 80h
UNICODE_STRING RuntimeInfo; // 88h
RTL_DRIVE_LETTER_CURDIR DLCurrentDirectory[0x20]; // 90h
} RTL_USER_PROCESS_PARAMETERS, *PRTL_USER_PROCESS_PARAMETERS;

vxmag-ex)
mov eax, dword ptr fs:[30h] ; goto PEB
mov eax, dword ptr [eax+10h] ; goto RTL_USER_PROCESS_PARAMETERS
add eax, 24h ; goto CurrentDirectory
mov eax, dword ptr [eax+4] ; gimme unicode_buffer


typedef struct _PEB_LDR_DATA {

unsigned int Length ; // 0x00
int Initialized ; // 0x04
PVOID SsHandle ; // 0x08
LIST_ENTRY InLoadOrderModuleList ; // 0x0c
LIST_ENTRY InMemoryOrderModuleList ; // 0x14
LIST_ENTRY InInitializationOrderModuleList ;// 0x1c

} PEB_LDR_DATA, *PPEB_LDR_DATA ; // Windows 2000 SourceCode의 속에 LDR DATA TABLE ENTRY의 정의가 없다, 그러나 그것은 가장 중요한 구조이다.

typedef struct _LDR_DATA_TABLE_ENTRY // offset
{

LIST_ENTRY InLoadOrderLinks; // 0x00
LIST_ENTRY InMemoryOrderLinks; // 0x08
LIST_ENTRY InInitializationOrderLinks; // 0x10
ULONG DllBase; // 0x18
ULONG EntryPoint; // 0x1C
ULONG SizeOfImage; // 0x20
UNICODE_STRING FullDllName; // 0x24
UNICODE_STRING BaseDllName; // 0x2C
ULONG Flags; // 0x34
SHORT LoadCount; // 0x38
WORD Fill; // 0x3A
LIST_ENTRY HashLinks ; // 0x3C
ULONG TimeDateStamp; // 0x44
} LDR_DATA_TABLE_ENTRY, *PLDR_DATA_TABLE_ENTRY; // 0x48 bytes


#define LDRP_HASH_TABLE_SIZE 32
#define LDRP_HASH_MASK (LDRP_HASH_TABLE_SIZE-1)
#define LDRP_COMPUTE_HASH_INDEX(ch) (((ch) - 'a') & LDRP_HASH_MASK) // 사용한다! kdex2x86.strct PEB

PEB2를 바꾼다
typedef struct _PEB2 { BYTE Reserved[12] ; PPEB_LDR_DATA Ldr ; // 0x0C
} PEB2, *PPEB2 ;

** PEB의 필드 debug **

kd> !strct _PEB

--------------------------------------------------

 

http://leony.egloos.com/369899

  Comments,     Trackbacks

TEB structure

TEB structure 

03.
// Instead of using the Tls fields, use the Win32 TLS APIs
04.//     TlsAlloc, TlsGetValue, TlsSetValue, TlsFree
05.//
06.// Instead of using the ReservedForOle field, use the COM API
07.//     CoGetContextToken
08.//
09.typedef struct _TEB {
10.    union {
11.        struct {
12.            BYTE Reserved1[1952];
13.            PVOID Reserved2[412];
14.            PVOID TlsSlots[64];
15.            BYTE Reserved3[8];
16.            PVOID Reserved4[26];
17.            PVOID ReservedForOle;  // Windows 2000 only
18.            PVOID Reserved5[4];
19.            PVOID TlsExpansionSlots;
20.        };
21.        struct {
22.            NT_TIB          Tib;                        /* 000 */
23.            PVOID           EnvironmentPointer;         /* 01c */
24.            CLIENT_ID       ClientId;                   /* 020 */
25.            PVOID           ActiveRpcHandle;            /* 028 */
26.            PVOID           ThreadLocalStoragePointer;  /* 02c */
27.            PPEB            Peb;                        /* 030 */
28.            ULONG           LastErrorValue;             /* 034 */
29.            ULONG           CountOfOwnedCriticalSections;/* 038 */
30.            PVOID           CsrClientThread;            /* 03c */
31.            PVOID           Win32ThreadInfo;            /* 040 */
32.            ULONG           Win32ClientInfo[31];        /* 044 used for user32 private data in Wine */
33.            PVOID           WOW32Reserved;              /* 0c0 */
34.            ULONG           CurrentLocale;              /* 0c4 */
35.            ULONG           FpSoftwareStatusRegister;   /* 0c8 */
36.            PVOID           SystemReserved1[54];        /* 0cc used for kernel32 private data in Wine */
37.            LONG            ExceptionCode;              /* 1a4 */
38.            ACTIVATION_CONTEXT_STACK ActivationContextStack; /* 1a8 */
39.            BYTE            SpareBytes1[24];            /* 1bc used for ntdll private data in Wine */
40.            PVOID           SystemReserved2[10];        /* 1d4 used for ntdll private data in Wine */
41.            GDI_TEB_BATCH   GdiTebBatch;                /* 1fc used for vm86 private data in Wine */
42.            ULONG           gdiRgn;                     /* 6dc */
43.            ULONG           gdiPen;                     /* 6e0 */
44.            ULONG           gdiBrush;                   /* 6e4 */
45.            CLIENT_ID       RealClientId;               /* 6e8 */
46.            HANDLE          GdiCachedProcessHandle;     /* 6f0 */
47.            ULONG           GdiClientPID;               /* 6f4 */
48.            ULONG           GdiClientTID;               /* 6f8 */
49.            PVOID           GdiThreadLocaleInfo;        /* 6fc */
50.            PVOID           UserReserved[5];            /* 700 */
51.            PVOID           glDispachTable[280];        /* 714 */
52.            ULONG           glReserved1[26];            /* b74 */
53.            PVOID           glReserved2;                /* bdc */
54.            PVOID           glSectionInfo;              /* be0 */
55.            PVOID           glSection;                  /* be4 */
56.            PVOID           glTable;                    /* be8 */
57.            PVOID           glCurrentRC;                /* bec */
58.            PVOID           glContext;                  /* bf0 */
59.            ULONG           LastStatusValue;            /* bf4 */
60.            UNICODE_STRING  StaticUnicodeString;        /* bf8 used by advapi32 */
61.            WCHAR           StaticUnicodeBuffer[261];   /* c00 used by advapi32 */
62.            PVOID           DeallocationStack;          /* e0c */
63.            PVOID           TlsSlots_[64];              /* e10 */
64.            LIST_ENTRY      TlsLinks;                   /* f10 */
65.            PVOID           Vdm;                        /* f18 */
66.            PVOID           ReservedForNtRpc;           /* f1c */
67.            PVOID           DbgSsReserved[2];           /* f20 */
68.            ULONG           HardErrorDisabled;          /* f28 */
69.            PVOID           Instrumentation[16];        /* f2c */
70.            PVOID           WinSockData;                /* f6c */
71.            ULONG           GdiBatchCount;              /* f70 */
72.            ULONG           Spare2;                     /* f74 */
73.            ULONG           Spare3;                     /* f78 */
74.            ULONG           Spare4;                     /* f7c */
75.            PVOID           ReservedForOle_;            /* f80 */
76.            ULONG           WaitingOnLoaderLock;        /* f84 */
77.            PVOID           Reserved5_[3];              /* f88 */
78.            PVOID          *TlsExpansionSlots_;         /* f94 */
79.            ULONG           ImpersonationLocale;        /* f98 */
80.            ULONG           IsImpersonating;            /* f9c */
81.            PVOID           NlsCache;                   /* fa0 */
82.            PVOID           ShimData;                   /* fa4 */
83.            ULONG           HeapVirtualAffinity;        /* fa8 */
84.            PVOID           CurrentTransactionHandle;   /* fac */
85.            PVOID           ActiveFrame;                /* fb0 */
86.            PVOID          *FlsSlots;                   /* fb4 */
87.                        struct _TEB    *self;
88.        };
89.    };
90.} TEB;
91.typedef TEB *PTEB;

'유용한 지식 자료들 > 기타' 카테고리의 다른 글

윈도우 버전 정보 (GetVersion)  (0) 2012.12.07
PEB structure  (0) 2012.08.09
Win32 Thread Information Block (TIB), TEB  (0) 2012.08.08
64비트 인지 아닌지 확인하기  (0) 2012.07.18
Clustering VS Classification  (0) 2012.06.27
  Comments,     Trackbacks