윈도우에서 OpenProcess와 같은 winapi를 호출한 뒤 계속해서 타고 들어가면
ntdll.dll 내부에 있는 Nt...로 시작하는 함수를 호출하게 됩니다
Nt함수 내부에선 syscall을 통해서 커널모드로 진입하게 됩니다
ntdll은 시스템 서비스 루틴에 대한 스텁으로 볼 수 있습니다
그 외 지원 함수들도 있지만 이 글에서 언급하진 않습니다
ntdll가 네이티브 시스템을 위한 dll이라면
서브시스템을 위한 스텁을 가진 dll도 존재합니다
DC와 윈도우와 관련된 작업을 하게되면 검증이나 변환 과정을 거친 뒤에 win32u.dll에 있는 NtUser...함수로 이동하게 되고
syscall을 통해서 커널모드로 진입하게 됩니다
다음은 인자를 받지않는 GetForegroundWindow함수의 내용입니다
아무 처리를 할 것이 없으니 바로 NtUserGetForegroundWindow함수로 점프하는 모습을 볼 수 있습니다
다음은 NtUserGetForegroundWindow의 내용입니다
mov eax, 0000103C로 eax에 syscall 인덱스를 넣고 syscall을 하는 모습입니다
정리하면 다음과 같습니다
ntdll.dll은 네이티브 시스템 서비스 호출을 위한 디스패치 스텁으로 볼 수 있다
ntdll.dll에 win32 서브 시스템에 대한 서비스 호출은 포함되지 않는다
win32 서브 시스템에 대한 서비스 호출 win32u.dll에서 이루어진다
win32u.dll에는 ntdll.dll처럼 syscall 인덱스를 넣고 syscall을 호출하는 부분이 있다
끝
'날먹을 위한 몸부림 > 리버싱' 카테고리의 다른 글
ssdt index 뷰어 (0) | 2022.05.27 |
---|---|
ntdll.dll에서 SSDT Index 가져오기 (1) | 2022.05.26 |
HamsterHide 사용법 - 상세 설정 (9) | 2022.04.20 |
HamsterHide 사용법 - 간편 사용 (0) | 2022.04.20 |
HamsterHide v0.2.2 (4) | 2022.04.19 |