-
블루스크린 출력 함수프로그래밍/C# + Unity 2019. 3. 22. 23:14728x90
소스 코드
[DllImport("ntdll.dll", SetLastError = true)]//bluescreen private static extern int NtSetInformationProcess(IntPtr hProcess, int processInformationClass, ref int processInformation, int processInformationLength); public void Callbulescreen() { int isCritical = 1; int BreakOnTermination = 0x1D; Process.EnterDebugMode(); NtSetInformationProcess(Process.GetCurrentProcess().Handle, BreakOnTermination, ref isCritical, sizeof(int)); }
설명
이 코드는 C#에서 Windows 운영 체제의 ntdll.dll 라이브러리의 NtSetInformationProcess 함수를 호출하여 시스템 레벨의 작업을 수행하는 기능을 제공한다.
- DllImport를 사용하여 ntdll.dll에서 NtSetInformationProcess 함수를 가져옵니다. 이 함수는 Windows 내부에서 사용되는 함수로, 일반적으로 직접 호출되지 않는 함수이다. 여기서 SetLastError 플래그가 true로 설정되어 있고 오류가 발생할 경우 GetLastError 함수를 사용하여 오류 코드를 가져온다.
- NtSetInformationProcess 함수는 IntPtr hProcess, int processInformationClass, ref int processInformation, int processInformationLength 네 개의 매개변수를 가진다.
- hProcess: 프로세스 핸들을 나타내는 포인터
- processInformationClass: 설정하려는 프로세스 정보의 종류
- processInformation: 설정할 프로세스 정보에 대한 데이터
- processInformationLength: 프로세스 정보 데이터의 길이
- Callbulescreen 메서드는 먼저 isCritical 변수를 1로 설정한다. 이 변수는 프로세스를 임계 상태로 설정하는 데 사용된다.
- BreakOnTermination 변수는 프로세스 종료 시 디버깅을 중단할지 여부를 지정하는데 사용된다. 여기서는 0x1D라는 특정한 값으로 설정되는데, 이 값은 Windows 내부적으로 프로세스를 종료할 때 디버깅을 중단하도록 지정하는 상수이다.
- Process.EnterDebugMode()를 호출하여 현재 프로세스를 디버깅 모드로 설정한다.
- NtSetInformationProcess 함수를 호출하여 현재 프로세스의 정보를 설정한다. 여기서는 프로세스가 임계 상태로 설정하고 프로세스가 종료될 때도 디버깅이 중단도록 설정된다.
결론
위의 코드는 프로세스의 종료 시 디버깅을 중단하도록 설정하는 기능을 제공한다. 이는 해당 프로세스에 디버깅 모드로 진입하려고 함에도 디버깅할 수 없어 블루스크린이 발생한다.
728x90댓글