首页
社区
课程
招聘
[求助]求教蓝屏暗桩实现的资料?
发表于: 2014-12-23 09:18 8248

[求助]求教蓝屏暗桩实现的资料?

2014-12-23 09:18
8248
最近脱壳中碰到了几个蓝屏暗桩,想学习了解下这方面的知识,网上搜索了下,没有找到相关资料,请教各位:
蓝屏暗桩是如何实现的?
如果能给个资料或示例的链接就感激不尽。
在此先行谢过各位!

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (14)
雪    币: 6
活跃值: (1125)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
壳怎么会导致蓝屏,带驱动的壳已经很少见了
2014-12-23 10:15
0
雪    币: 11
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
r3蓝屏又不难。。。。
2014-12-23 13:00
0
雪    币: 2153
活跃值: (740)
能力值: ( 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;
}


2014-12-23 13:01
0
雪    币: 396
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
HMODULE hDll = GetModuleHandle(TEXT("ntdll.dll"));
那么是调用这个实现的?
查查去
2014-12-24 10:21
0
雪    币: 396
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
查到了,是这个ZwRaiseHardError实现的,但中间调用的代码绕了几圈,还要再细跟下,谢谢!
另,还有没有其他的实现方法?
2014-12-24 11:45
0
雪    币: 2153
活跃值: (740)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
7
蓝屏,即内核异常无法处理,r3程序异常不会蓝屏。
实现的思路只有两种:
1.应用程序把特殊的异常抛给内核,即我给你的代码。
2.内核自身异常,如溢出,非法地址,内存无效等。想触发很难,算是利用漏洞的一种。
如果你能构造特殊数据使内核模块产生异常,那就恭喜你了(当然自己写的模块产生蓝屏不算)
2014-12-24 18:37
0
雪    币: 7048
活跃值: (3527)
能力值: ( LV12,RANK:340 )
在线值:
发帖
回帖
粉丝
8
搞不好是OD的驱动导致的BSOD 0.0
2014-12-24 18:51
0
雪    币: 6
活跃值: (1125)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
反调试最后造一个蓝屏出来?感觉很屌,其实是个很不讨好的招
2014-12-24 20:57
0
雪    币: 11
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
我觉得还好……别人不好下断,如果不明白你的蓝屏原理……
2014-12-24 21:07
0
雪    币: 6
活跃值: (1125)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
双机调试果断断下
2014-12-24 21:37
0
雪    币: 6
活跃值: (1125)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
双机调试果断断下
2014-12-24 21:40
0
雪    币: 396
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
13
其实不光只是下断难,如果编程者在跳转上做了文章,你很难判断这些跳转那个是会蓝屏的。
我现在就碰到个蓝屏,用的是JMP EAX,而这个跳转所在的Call会根据EAX的不同值跳到不同的地址,蓝屏只是其中一个,真正判断是否启动ZwRaiseHardError的代码在别的很远的地方,这个就头痛了,你必须仔细跟很长时间。
再加上如果有几种可能触发蓝屏,那你就几乎没有招了。
2014-12-25 09:46
0
雪    币: 293
活跃值: (239)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
用r3蓝屏一般就够了.
2015-4-6 13:14
0
雪    币: 101
活跃值: (43)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
15
记得砍了winlogon就直接蓝了啊……
2015-4-10 11:32
0
游客
登录 | 注册 方可回帖
返回
//