能力值:
( LV2,RANK:10 )
|
-
-
2 楼
壳怎么会导致蓝屏,带驱动的壳已经很少见了
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
r3蓝屏又不难。。。。
|
能力值:
( LV7,RANK:100 )
|
-
-
4 楼
// BSOD.cpp : 定义控制台应用程序的入口点。
//
#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;
}
|
能力值:
( LV3,RANK:20 )
|
-
-
5 楼
HMODULE hDll = GetModuleHandle(TEXT("ntdll.dll"));
那么是调用这个实现的?
查查去
|
能力值:
( LV3,RANK:20 )
|
-
-
6 楼
查到了,是这个ZwRaiseHardError实现的,但中间调用的代码绕了几圈,还要再细跟下,谢谢!
另,还有没有其他的实现方法?
|
能力值:
( LV7,RANK:100 )
|
-
-
7 楼
蓝屏,即内核异常无法处理,r3程序异常不会蓝屏。
实现的思路只有两种:
1.应用程序把特殊的异常抛给内核,即我给你的代码。
2.内核自身异常,如溢出,非法地址,内存无效等。想触发很难,算是利用漏洞的一种。
如果你能构造特殊数据使内核模块产生异常,那就恭喜你了(当然自己写的模块产生蓝屏不算)
|
能力值:
( LV12,RANK:340 )
|
-
-
8 楼
搞不好是OD的驱动导致的BSOD 0.0
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
反调试最后造一个蓝屏出来?感觉很屌,其实是个很不讨好的招
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
我觉得还好……别人不好下断,如果不明白你的蓝屏原理……
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
双机调试果断断下
|
能力值:
( LV2,RANK:10 )
|
-
-
12 楼
双机调试果断断下
|
能力值:
( LV3,RANK:20 )
|
-
-
13 楼
其实不光只是下断难,如果编程者在跳转上做了文章,你很难判断这些跳转那个是会蓝屏的。
我现在就碰到个蓝屏,用的是JMP EAX,而这个跳转所在的Call会根据EAX的不同值跳到不同的地址,蓝屏只是其中一个,真正判断是否启动ZwRaiseHardError的代码在别的很远的地方,这个就头痛了,你必须仔细跟很长时间。
再加上如果有几种可能触发蓝屏,那你就几乎没有招了。
|
能力值:
( LV2,RANK:10 )
|
-
-
14 楼
用r3蓝屏一般就够了.
|
能力值:
( LV4,RANK:50 )
|
-
-
15 楼
记得砍了winlogon就直接蓝了啊……
|
|
|