반응형
이번시간에는 INT 2E로 Interrupt Descriptor Table(이하 IDT) 통한 커널진입에 대해 알아보겠습니다. 일단 전체적인 그림을 한번 보겠습니다.
보시다 시피 굉장히 복잡한 구조를 가지고 있습니다. 일단 순서 대로 설명을 진행하겠습니다.
※ INT 2E를 이용한 유저레벨에서 커널레벨 NativeAPI호출과정
① 커널진입 이전에 Service 번호를 EAX에 저장, 유저레벨스택프레임 포인터를 EDX에 저장합니다.
② 명령어 INT 2E를 이용하여 인터럽트를 발생시킵니다.
IDT의 인덱스2E를 확인하면 KiSystemService의 주소가 보이는 것을 볼 수 있습니다.
③ ntosknl내부에 있는 KiSystemService()루틴에 진입합니다.
④ 미리 저장된 서비스번호 EAX를 System Service Descriptor Table(이하 SSDT)의 Index로 함수주소를 가져옵니다.
edi는 현재 SSDT가 주소가 저장되어 있으며 edi+eax*4로 주소(Ntclose())를 찾는 것을 볼 수 있습니다.
⑤최종적으로 획득한 Ntclose()함수를 호출합니다.
반응형
'Security > Windows System' 카테고리의 다른 글
DeviceObject이란?(1) (0) | 2017.07.30 |
---|---|
커널진입(INT 2E,SYSENTER)-전체적인흐름 (0) | 2017.06.23 |
ASLR(Address Space Layout Randomization) 끄기 /비활성화 (0) | 2017.06.20 |
Segmentation과 Paging(3) - 페이징 (1) | 2017.06.18 |
Segmentation과 Paging(2) - 세그먼테이션 (0) | 2017.06.15 |
댓글