首页
社区
课程
招聘
[求助]请问R3下如何会导致c000021a蓝屏
发表于: 2014-3-22 19:08 6025

[求助]请问R3下如何会导致c000021a蓝屏

2014-3-22 19:08
6025
调试程序的时候总是被检测到然后蓝屏,蓝屏代码如下:
stop c000021a unknown hard error
unknown hard error
请问在R3层造成此蓝屏代码是什么方式导致的呢?求科普。。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 35
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
用NtRaiseHardError
声明:

http://undocumented.ntinternals.net/UserMode/Undocumented%20Functions/Error/NtRaiseHardError.html

ResponseOption传OptionShutdownSystem,ErrorStatus传错误码0xc000021a,Parameters传4个参数(不知道具体干什么,但有几个好像是指针),然后就蓝屏了,另外NtRaiseHardError需要关机权限

关于它的原理可以逆向SMSS以及参考WRK,网上也有相关例子
2014-3-22 21:19
0
雪    币: 2153
活跃值: (740)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
3
R3能造成蓝屏吗?NT技术何在?
个人感觉应该是通过某种方式引起内核抛出异常,比如内核通讯
绝不是简简单单的一个R3 API能做到的
2014-3-22 22:38
0
雪    币: 19
活跃值: (1086)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
QueueUserAPC
2014-3-22 23:05
0
雪    币: 608
活跃值: (648)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
2楼说的那么清楚了,还在这瞎猜
2014-3-23 21:56
0
雪    币: 2153
活跃值: (740)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
6
经过测试,此代码可以造成蓝屏
#include "stdafx.h"
#include <Windows.h>

typedef enum _HARDERROR_RESPONSE_OPTION {
	OptionAbortRetryIgnore,
	OptionOk,
	OptionOkCancel,
	OptionRetryCancel,
	OptionYesNo,
	OptionYesNoCancel,
	OptionShutdownSystem,
	OptionOkNoWait,
	OptionCancelTryContinue
} HARDERROR_RESPONSE_OPTION;
typedef LONG (WINAPI *pfnZwRaiseHardError)(LONG ErrorStatus, ULONG NumberOfParameters, ULONG UnicodeStringParameterMask, PULONG_PTR Parameters, HARDERROR_RESPONSE_OPTION ValidResponseOptions, PULONG Response);
typedef struct _UNICODE_STRING {
	USHORT Length;
	USHORT MaximumLength;
	PWCH   Buffer;
} UNICODE_STRING;

BOOL DebugPrivilege(LPCTSTR PName, BOOL bEnable)
{
	BOOL              bResult = TRUE;
	HANDLE            hToken;
	TOKEN_PRIVILEGES  TokenPrivileges;

	if (!OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY|TOKEN_ADJUST_PRIVILEGES, &hToken))
	{
		bResult = FALSE;
		return bResult;
	}
	TokenPrivileges.PrivilegeCount = 1;
	TokenPrivileges.Privileges[0].Attributes = bEnable ? SE_PRIVILEGE_ENABLED : 0;
	LookupPrivilegeValue(NULL, PName, &TokenPrivileges.Privileges[0].Luid);
	AdjustTokenPrivileges(hToken, FALSE, &TokenPrivileges, sizeof(TOKEN_PRIVILEGES), NULL, NULL);
	if (GetLastError() != ERROR_SUCCESS)
	{
		bResult = FALSE;
	}
	CloseHandle(hToken);
	return bResult;	
}

int _tmain(int argc, _TCHAR* argv[])
{
	UNICODE_STRING str = {8, 10, L"test"}; 
	ULONG x, args[] = {0x12345678, 0x87654321, (ULONG)&str};
	HMODULE hDll = GetModuleHandle(TEXT("ntdll.dll"));
	pfnZwRaiseHardError ZwRaiseHardError = (pfnZwRaiseHardError)GetProcAddress(hDll, "ZwRaiseHardError");

	DebugPrivilege(SE_SHUTDOWN_NAME, TRUE);
	ZwRaiseHardError(0xC000021A, 3, 4, args, OptionShutdownSystem, &x);
	return 0;
}
2014-3-24 22:26
0
雪    币: 201
活跃值: (68)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
3Q,应当是这个造成的
2014-3-25 21:50
0
游客
登录 | 注册 方可回帖
返回
//