자료는 많은데 다들 설명이없어.
mov eax,dword ptr fs:[18h]
mov eax,dword ptr ds:[eax+30h]
movzx eax,byte ptr ds:[eax+2h]
위 코드에서 fs:[18h]는 _TEB자체를 의미하는데 그 이유는 다음과 같다.
kd> dt _TEB
nt!_TEB
+0x000 NtTib : _NT_TIB
+0x01c EnvironmentPointer : Ptr32 Void
+0x020 ClientId : _CLIENT_ID
+0x028 ActiveRpcHandle : Ptr32 Void
+0x02c ThreadLocalStoragePointer : Ptr32 Void
+0x030 ProcessEnvironmentBlock : Ptr32 _PEB
.
.
.
kd> dt _NT_TIB
nt!_NT_TIB
+0x000 ExceptionList : Ptr32 _EXCEPTION_REGISTRATION_RECORD
+0x004 StackBase : Ptr32 Void
+0x008 StackLimit : Ptr32 Void
+0x00c SubSystemTib : Ptr32 Void
+0x010 FiberData : Ptr32 Void
+0x010 Version : Uint4B
+0x014 ArbitraryUserPointer : Ptr32 Void
+0x018 Self : Ptr32 _NT_TIB
fs:[18h] => _TEB._NT_TIB.Self를 의미하므로 결국 fs:[0]의 의미가 된다.
그래서 다음 라인
mov eax,dword ptr [eax+30h]
는 _TEB + 30h 인 process environment block, 즉 _PEB를 의미한다.
그냥 이렇게 쓰자.
mov eax, fs:[30h]
mov eax, [eax+2]
이렇게 해서 eax가 1인지 아닌지만 보면될걸 가지고
'Reversing' 카테고리의 다른 글
ANTI D3D9 hooking (0) | 2012.05.17 |
---|---|
[ANTI-Reversing] ANTI_DLL Injection (0) | 2012.04.24 |
PEB구조체 시작 주소 MS Windows 버전별 (0) | 2012.04.24 |
PEB 구조체 (0) | 2012.04.24 |
TEB 구조체 (0) | 2012.04.24 |