TEB(Thread Environment Block)

-> 프로세스에서 실행되는 스레드에 대한 정보를 담고 있는 구조체

-> 스레드 별로 TEB 구조체가 하나씩 할당된다.

-> OS 별로 모양이 조금씩 달라진다.


중요멤버

-> ProcessEnvironmentBlock : PEB 구조체 포인터 (프로세스 별로 하나씩 생성)

-> NtTib : _NT_TIB 구조체(Thread information Block)


_NT_TIB 구조체

-> ExceptionList : _EXCEPTION_REGISTRATION_RECORD 구조체 연결 리스트를 가르키고 있다.(SEH에 사용됨)

-> Self : _NT_TIB 구조체의 셀프 포인터 (TEB의 첫번째 멤버가 _NT_TIB 구조체 이기 때문에 Self는 TEB 구조체 포인터이다.)


TEB 접근 방법

-> 유저모드로 접근하는 법(WinDbg 커널 모드 디버깅을 이용해 TEB 구조체에 접근하면 쉽다.)

-> OS 에서 제공하는 API 사용!    (Ntdll.NtCurrentTeb() API 사용)


Ntdll.NtCurrentTeb() API 

-> 현재 스레드의 TEB 구조체 주소를 리턴하는 함수


FS 세그먼트 레지스터

-> FS레지스터는 직접 TEB 주소를 가리키는 것이 아니라 실제 TEB 주소를 가지고 있는 Segment Descriptor Table의 Index를 가지고 있다.

-> FS:[0] : SEH의 시작주소

-> FS:[0x18] : TEB의 시작주소

-> FS:[0x30] : PEB의 시작주소

-> FS:0 : TEB의 시작주소

'Reversing(리버싱 핵심 원리) > 고급 리버싱' 카테고리의 다른 글

PEB (Process Environment Block)  (0) 2018.09.06
TLS 콜백 함수  (0) 2018.09.04

+ Recent posts