본문 바로가기
Security/Reversing

Zw API와 Nt API의 차이

by Winduck 2017. 5. 11.
반응형

Zw와 Nt API차이는 뭘까? 알아보았습니다.

두개의 차이점은 유저모드와 커널모드에서 함수의 형태가 다른 것을 볼 수 있었습니다.


실제코드를 확인하기 위해 ZwCreateProcess코드와 NtCreateProcess코드를 확인해보았습니다.


유저모드 호출시!

차이를 알아보기 위해 실제 호출되는 함수의 내부를 보았습니다.


ZwCreateProcess

 NtCreateProcess


유저레벨에서 호출시 EAX에 서비스 넘버인 0x4F를 입력하고 DEX에 스택포인터를 저장하여 KiSystemService의 Routine을 타게 됩니다. 

자세히보니 호출된 함수의 주소가 같습니다.

즉! 유저레벨에서 ZwCreateProcess와 NtCreateProcess 호출시 같은 함수가 호출되는 것을 볼 수 있습니다.


커널모드 호출시! 


 ZwCreateProcess

 NtCreateProcess


커널레벨 호출시 두개의 함수는 다른 함수를 호출하게 됩니다.

ZwCreateProcess호출시! 유저모드와 동일하게 KiSystemService Routine을 타고

NtCreateProcess호출시! KiSystemService Routine을 타지 않고 직접적으로 system call로 점프뛰게 된다.

(NtCreateProcessEx내부 트레이싱 결과 : PspCreateProcess로 점프)


종합해보면 유저모드에서 Zw와 Nt API는 같은 함수를 호출하게되며 KiSystemService Routine을 타게되고

 커널모드에서 호출시 Zw는 유저모드와 같게 KiSystemService Routine을 Nt함수는 systemcall로 직접 점프뛴다....

솔직히 아직 아리까리합니다...추후 내용추가하며 진행해볼 예정입니다.




반응형

댓글