본문 바로가기
Security/Windows System

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

by Winduck 2017. 6. 23.
반응형

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




반응형

댓글