DInvoke - 시스템 콜
DInvoke와 시스템 콜
DInvoke와 시스템콜 함수에 관련해서는 다음 페이지에 서술한다.
theWover와 FuzzySecurity가 만든 DInvoke 라이브러리에는 시스템콜을 도와주는 함수 - GetSyscallStub
이 있다.
GetSyscallStub
은 다음과 같이 실행된다.
ntdll.dll
라이브러리를 찾아 현재 프로세스에 수동으로 맵핑 한다. 이는 EDR 솔루션이 이미 후킹을 해놓은ntdll.dll
을 무시하고 온-디스크에 있는 후킹되어 있지 않은, 새로운ntdll.dll
을 구하기 위해서다.새로운
ntdll.dll
에서 원하는 NativeAPI 함수를 찾은 뒤, 0x50 만큼 해당 메모리를 "긁어"서 현재 프로세스의 메모리 어딘가에 저장한다. 이 "긁어"온 메모리는 어셈블리어로 되어 있는 시스템 콜 stub다.시스템 콜을 실행할 때 C#의 함수 포인터인 Delegate를 설정한 뒤, Delegate가 #2번에서 긁어온 NativeAPI 함수 stub을 가르키도록 설정한다.
이 함수포인터를 실행하면 함수 포인터는 "긁어"온 NativeAPI 함수 Stub를 실행한다. 어셈블리어가 실행되며
ntdll.dll, kernel32.dll
을 거치지 않고 곧바로 시스템 콜이 실행된다.
실습
TODO - https://github.com/ChoiSG/sNanoDumpInject
레퍼런스
Last updated