Windows Internal 7th edition 136P 실습한 것을 작성하였습니다. 대부분은 책의 내용을 기반으로 작성되었습니다.

Self-Study 목적으로 포스팅하였으며, 해당책은 Windows Internal, 커널, Windbg 공부에 도움될 것으로 보입니다.


Windows Internals 7/e Vol.1 [마이크로소프트 윈도우 커널 공식 가이드]

http://acornpub.co.kr/book/windows-internals7-vol1 


Open Windbg


File - Open Executable


System32 폴더에서 notepad.exe - Open


Notepad 실행되고, Debugger 최초 Breakpoint 지점에서 멈춥니다. 이미지 로더를 나타내는 Ldr 시작하는 일부 함수도 있습니다.


Notepad 메인 함수는 아직 실행되지 않았기 때문에, Notepad 윈도우는 보이지 않습니다.

Ntdll.dll 내의 NtCreateFile Breakpoint 설정합니다. (Debugger 대소문자를 구분하지 않습니다.)

bp ntdll!ntcreatefile


g(go) 명령을 입력하거나 F5 눌러 Notepad 계속 실행하게 한다. Debugger 즉시 멈추며 다음과 같은 출력을 보입니다.

 

책에서는 "ZwCreateFile이란 이름의 함수가 보인다. ZwCreateFile NtCreateFile User Mode에서 동일한 심볼을 가리킨다" 라고 설명되어 있습니다.

 

저는 ZwCreateFile = NtCreateFile 이라는 것으로 이해했습니다. 아래의 기술자료에서 instead of 설명되어 있습니다.

NtCreateFile function

https://docs.microsoft.com/en-us/windows-hardware/drivers/ddi/content/ntifs/nf-ntifs-ntcreatefile


u(unassembled) 명령을 입력하면 다음과 같은 명령어를 있습니다.

 

책에서 이부분은 다음과 같이 설명되어 있습니다.

EAX 레지스터는 시스템 서비스 번호( 경우 16진수 55) 설정되어 있다.

값은 해당 OS에서의 시스템 서비스 번호다.

syscall명령어는 프로세서를 커널 모드로 전환하게끔 하는 명령어로서, 여기서 EAX NTCreateFile Excutive Service 선택하는 사용된다. 또한 SharedUserData 내의 오프셋 0X308에서 플래그(1) 검사한다는 점도 주목하자(추가설명은 4)

플래그가 설정되어 있다면 int 2Eh 명령어를 사용해 실행은 다른 경로로 이뤄진다.


----------------------------------------------------------------------------------------------------------------------------------------------------------------------

IUM Application IumDll.dll 불리는 Ntdll.dll 유사한 다른 바이너리를 이용할 있음을 '가상화 기반의 보안 아키텍쳐 개요' 절에서 설명되어 있습니다. 라이브러리는 시스템 호출을 포함하지만 이들의 인덱스는 다르다.


Windbg -File -Open Crash Dump


System32 폴더로 이동 -All Files 변경 iumdll.dll 선택 - Open


u iumdll!IumCrypto 

 

책에서 다음과 같이 설명되어 있습니다.

시스템 호출 인덱스의 상위비트가 설정되어 있고 SharedUserData 검사가 이뤄지지 않음에 주목하자.

안전한 시스템 호출로 불리는 syscall 이런 유형의 시스템 호출에서 사용되는 명령어다.


+ Recent posts