Security/Windows System

커널진입(INT 2E,SYSENTER)-INT 2E(IDT : Interrupt Descriptor Table)편

Winduck 2017. 6. 23. 19:43
반응형

이번시간에는 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()함수를 호출합니다.




반응형