System Service Dispatcher
ntdll.dll -->
eax, 인덱스
edx, 리턴값
int 2Eh
--> ntoskrnl.exe
ntdll.dll Zw* Nt* 함수가 있으면
ntoskrnl.exe Zw* Nt* 함수가 존재한다.
ntdll.dll 은 단순히 인터페이스이고, ntdll.Zw* ntdll.Nt* 함수가 같은 주소를 사용하는 동일함수이다.
ntoskrnl.exe 에 ntoskrnl.Nt* 함수가 진짜 함수 ...
Service Descriptor Tables (SST)
ntoskrnl , win32k 두개의 시스템 서비스 테이블을 가지고 있고
이는 각각 KiServiceTable, KiArgumentTable
W32pServiceTable , W32pArgumentTable 이라는 테이블을 가지고 있다.
이 테이블들은 각각 함수의 주소와 인자의 갯수를 가진 배열구조체 이다.
int 2Eh 는 바로 위 테이블을 참조해서 KiSystemService() 로 진입하고 쓰레드는
global SDT를 사용하지 않고 KeServiceDescriptorTable 을 사용하지 않고 자체의 포인터로
KiServiceTable 와 KiArgumentTable을 참조한다.
ntdll.dll 과 ntoskrnl.exe 가 가진 함수는
C runtime library ( memcpy , sprintf .. )
Extended runtime library ( Rtl* ...)
Floating-point emulator ( _eFLD .. )
그리고 기타 프리픽스에 따라
Ki : 커널 인터럽트 핸들러
Ke : 커널 루틴
Ldr : 이미지 로더
Ps : 프로세스 서포트
Nt : Native NT API
Hal : 하드웨어 추상레이어 함수 ...
자주사용되는 데이터 타입은
문자열의 경우 UNICODE_STRING 이고
Length, MaximumLength, Buffer ... 세가지로 이루어진 구조체인데
이를 다룰려면 RtlCreateUnicodeString , RtlInitUnicodeString , RtlCopyUnicodeString 등 함수를 사용해야됨...
Native API 에 접근하기 위해서는 ntdll.lib 을 사용하고
커스터마이징 헤더를 사용하면 됨...
참고는 Undocumented Windows 2000 Secrets, "The Windows 2000 Runtime Library" 편에서...
'게임 시큐리티' 카테고리의 다른 글
| NtQuerySystemInformation() 에 대한 정보 (0) | 2009/10/13 |
|---|---|
| Windows 커널 디버깅환경 만들기 (0) | 2009/10/13 |
| Windows 2000의 런타임 라이브러리에 관해... (0) | 2009/10/13 |
| 커널에서 프로세스와 쓰레드 확인 (0) | 2009/10/13 |
| 실시간으로 커널 디버깅하기 (0) | 2009/10/13 |
| VMWare로 리모트 디버깅하기 (0) | 2009/10/13 |