본문 바로가기

PEB PEB란 프로세스 정보를 담고 있는 구조체 TEB.ProcessEnvironmentBlock 멤버가 PEB구조체의 주소 FS:[30] = TEB.ProcessEnvironmentBlock = address of PEB 어셈 코드1 mov eax, DWORD PTR FS:[30] 어셈 코드2 mov eax, DWORD PTR FS:[18] ; FS[18] = address of TEB mov eax, DWORD PTR DS:[EAX+30] ; DS[EAX+30] = address of PEB PEB 구조체 - 자세한 것은 WinDbg로 확인 주요 멤버 BeingDebugged -> IsDebuggerPresent 함수다 디버깅을 당하는지 판단하는 함수인데 이 함수가 이 멤버 정보를 참조한다. 위 그림에서 .. 더보기
TEB TEB TEB(Thread Environment Block)란 프로세스에서 실행되는 스레드에 대한 정보를 담고 있는 구조체 스레드 별로 구조체가 하나씩 할당 TEB구조체 FS세그먼트 레지스터는 현재 스레드의 TEB를 지시하는데 사용된다. FS세그먼트 레지스터는 실제 TEB 주소를 가지고 있는 Segment Descriptor Table 의 Index값을 가지고 있다. FS:[0x18] = TEB 시작 주소 FS:[0x18] = TEB.NtTib.Self = address of TIB = address of TEB = FS:0 FS:0의 의미는 FS 레지스터가 Indexing 하는 Segment Descriptor가 가리키는 Segment Memory의 시작 주소 NT_TIB 구조체 정의에서 018옵셋 떨.. 더보기
TLS TLS TLS(Thread Local Storage)란 스레드 별로 독립된 데이터 저장 공간 스레드 내에서 프로세스의 전역 데이터나 정적 데이터를 마치 지역 데이터처럼 독립적으로 취급하고 싶을 때 사용 AddressOfCallBacks 멤버가 TLS 콜백 함수 주소배열을 가리킴 프로세스가 시작될 때 시스템에서 이 배열에 저장된 함수를 하나씩 호출. 여러 개 등록 가능 EP코드보다 먼저 호출 되기 때문에 안티 디버깅 기법으로 사용 TLS 콜백은 스레드의 생성시점과 종료시점에 자동으로 호출 TLS Callback 함수 더보기