날먹을 위한 몸부림/Driver

사기꾼을 위한 햄날먹 드라이버 개발 - 6

프로그래밍하는 지팡이 2023. 2. 6. 15:53

이번에는 커널모드 스레드를 만드는 방법

 

PsCreateSystemThread를 사용해서 커널모드에서 돌아가는 스레드를 만들 수 있음

https://learn.microsoft.com/en-us/windows-hardware/drivers/ddi/wdm/nf-wdm-pscreatesystemthread

 

PsCreateSystemThread function (wdm.h) - Windows drivers

The PsCreateSystemThread routine creates a system thread that executes in kernel mode and returns a handle for the thread.

learn.microsoft.com

 

스레드가 속할 프로세스를 선택할 수 있음

유저모드의 주소공간에 연결될 스레드를 만들거나

시스템 프로세스에 속한 스레드를 만들 수 있음

 

 

시스템 프로세스에 속한 스레드를 만들기 위해서는 ProcessHandle에 NULL을  넘겨줌

특정 프로세스에 속한 스레드를 만들고 싶다면 ProcessHandle에 NtCurrentProcess 매크로를 이용해서 현재 프로세스를 넘겨줌

 

PsCreateSystemThread함수의 호출자가 시스템 컨텍스트에서 실행되고 있지 않는다면

ObjectAttributes에 OBJ_KERNEL_HANDLE특성을 설정해야함

그렇지 않으면 드라이버가 실행중인 프로세스의 컨텍스트에서 해당 스레드 핸들을 엑세스 할 수 있음

 

시스템 프로세스에 속한 스레드는 시스템으 종료되거나 PsTerminateSystemThread를 호출할 때까지 계속해서 실행됨

종료시에는 호출해주자

 

스레드의 핸들을 더 이상 사용되지 않는다면 ZwClose함수로 닫아줌


 

빌드하고 vm에서 실행하면 다음과 같은 결과를 볼 수 있음