ii4gsp
Find kernel32.dll Address 본문
TEB(Thread Environment Block)
TEB는 현재 실행되고 있는 쓰레드에 대한 정보를 담고 있는 구조체다.
특수한 레지스터인 FS 레지스터에 이러한 TEB의 주소가 저장되어 있으며 프로세스 내부적으로 TEB에 접근하고자 할 때 FS 레지스터를 사용할 수 있다.
쓰레드와 관련된 수 많은 정보들이 저장되어 있고, (윈도우 10 64비트 기준) 0x60 offset을 참조하여 PEB의 주소를 알 수 있다.
FS 레지스터를 이용하여 TEB에 접근 하여 PEB의 정확한 주소값을 알 수 있다.
PEB(Process Environment Block)
실행 중인 프로세스에 대한 정보를 담아두는 구조체이다.
프로세스에 로드된 PE Image(EXE, DLL 등)에 대한 정보도 기록되어 있다.
(윈도우 10 64비트 기준) 0x18 주소에는 Ldr 값이 저장되어 있고 이것은 _PEB_LDR_DATA를 가리키는 포인터이다.
_PEB_LDR_DATA
PEB_LDR_DATA 구조체 안에 포함된 (윈도우 10 64비트 기준) 0x20에 위치한 InMemoryOrderModuleList에는 프로세스의 PE Image들의 데이터가 저장된 LDR_DATA_TABLE_ENTRY 구조체의 더블링크드 리스트 시작 주소가 저장되어있다.
InMemoryOrderModuleList가 있는 주소의 (64비트 기준) 0x10 즉, 16만큼 주소를 빼줘야 정상적인 값이 나온다. 32비트에서는 8만큼 주소를 빼줘야 한다.
_LDR_DATA_TABLE_ENTRY
_LDR_DATA_TABLE_ENTRY 구조체는 로드된 모듈에 대한 다양한 정보들을 저장하고있다.
(윈도우 10 64비트 기준) 0x30 주소에 DllBase, 즉 모듈의 주소 값이 저장되어 있다.
InMemoryOrderLinks의 FLINK를 따라가 보면 첫 번째 로드된 라이브러리인 ntdll.dll 파일의 정보가 들어있는 두 번째 _LDR_DATA_TABLE_ENTRY 구조체를 볼 수 있고, FLINK를 한번 더 따라가 보면 두 번째 로드된 라이브러리 kernel32.dll 파일의 정보가 들어있는 _LDR_DATA_TABLE_ENTRY 구조체를 볼 수 있다.
0x30 부분을 보면 kernel32.dll의 주소값을 알 수 있다.
kernel32.dll의 주소값은 0x00007ff802e00000 이다.
'시스템 해킹 > Technique' 카테고리의 다른 글
Info Leak (0) | 2020.04.22 |
---|---|
DLL Injection (0) | 2020.04.16 |
GOT Overwrite 기법 (0) | 2020.01.22 |
RTL (Return-to-libc) 기법 (2) | 2020.01.22 |
FPO (Frame Pointer Overflow) 기법 (0) | 2020.01.21 |