: Thread Local Storage Callback Function
: 스레스 생성 및 종료 시 호출, EP 코드보다 먼저 실행
: 스레드별로 독립된 데이터 저장 공간
: 스레드 내에서 프로세스의 전역(Global) 데이터나 정적(Static) 데이터를 마치 지역(Local) 데이터처럼 독립적으로 취급하고 싶을 때 사용
: TLS 기능을 사용하도록 프로그래밍하면, PE 헤더에 TLS Table 항목이 세팅됨
: IMAGE_OPTIONAL_HEADER의 IMAGE_DATA_DIRECTORY[9]에 IMAGE_TLS_DIRECTORY 생성됨
: 프로세스가 시작될 때 시스템에서 배열에 저장된 함수를 하나씩 호출
→ AddressOfCallbacks : TLS 콜백 함수 주소(VA 형태) 배열, 끝은 NULL로 표시
→ 프로그램에 TLS 콜백 함수 여러 개 등록 가능
: 프로세스의 스레드가 생성/종료될 때마다와 메인 스레드가 생성될 때 자동으로 호출되는 Callback Function
→ DllHandle : 모듈의 핸들, 로딩 주소
→ Reason : TLS 콜백 함수가 호출된 이유
: Thread Environment Block
: 프로세스에서 실행되는 스레드에 대한 정보를 담고 있는 구조체, 스레드별로 하나씩 할당, OS 별로 상이
: Windbg로 Binary를 여러 !teb, dt_teb를 하면 상세 정보 열람 가능
→ ProcessEnvironmentBlock : PEB(Process Environment Block) 구조체의 포인터, PEB는 프로세스 별로 하나만 생성
→ NtTib : _NT_TIB 구조체, Tib(Thread Information Block), SEH에 사용
→ ExceptionList : _EXCEPTION_REGISTRATION_RECORD 구조체 연결 리스트
→ Self : NT_TIB 구조체의 셀프 포인터, TEB 구조체 포인터
: OS에서 제공하는 API 사용
→ Ntdll.NtCurrentTeb()
: 현재 스레드의 TEB 구조체 주소 리턴
→ FS Segment Register
: 현재 스레드의 TEB 주소를 가지고있는 Segment Descriptor Table의 Index를 가지고있음
※Segment Descriptor Table : 커널 메모리에 존재, GDTR(Global Descriptor Table Register)에 주소 저장
: 32bit의 경우 4GB의 가상 메모리, 64bit의 경우 8TB의 가상 메모리 할당 & GS 레지스터
: 프로세스 정보를 담고 있는 구조체
: FS 세그먼트 셀렉터가 가리키는 세그먼트 메모리의 시작 주소에 위치
: TEB.ProcessEnvironmentBlock 멤버가 PEB 구조체의 주소, mov eax, DWORD PTR FS:[30]
: TEB 구조체는 FS Segment Selector가 가리키는 Segment Memory 시작 주소에 위치
→ BeingDebugged : 프로그램이 디버깅당하고 있는 지 여부를 판단하여 디버깅 확인되면 1(True), 아니면 0(False)
→ ImageBaseAddress : 프로세스의 ImageBase
→ GetModuleHandle() : ImageBase를 얻어내는 API, lpModuleName에 NULL을 입력한 후 호출하면 프로세스가 로딩된 ImageBase를 리턴
→ Ldr : _PEB_LDR_DATA 구조체의 포인터
→ 프로세스에 로딩된 DLL의 로딩 베이스 주소를 직접 구할 수 있는 방법 제공
→ _LIST_ENTRY : 양방향 연결 리스트 매커니즘 제공
→ ProcessHeap, NtGlobalFlag : 프로세스가 디버깅 중일 때 특정한 값
: Structured Exception Handler, Windows 운영 체제에서 제공하는 예외 처리 시스템
: 소스 코드에서 __try, __except, __finally 키워드로 구현 가능
: 체인 형태, _EXCEPTION_REGISTRATION_RECORD 구조체 연결 리스트의 형태로 구성
012 DLL Injection (0) | 2020.09.26 |
---|---|
011 Anti Debugging (0) | 2020.09.25 |
009 Packer (0) | 2020.09.20 |
008 IAT & EAT (0) | 2020.09.20 |
007 PE File Format (0) | 2020.09.20 |