Win10查看MBR
偶然想起,MBR是BIOS自检后执行的程序,存在于磁盘的第一个扇区。
具体的参见百度词条即可。
https://baike.baidu.com/item/主引导记录/7612638?fromtitle=mbr&fromid=10473976&fr=aladdin
想着读取一下,再使用IDA分析看看。
代码:来源于网上,必须编译链接后,右键管理员运行。
#include<iostream>
#include<string.h>
#include<windows.h>
using namespace std;
HANDLE GetDiskHandle(int iDiskNo)
{
char szDriverBuffer[128];
memset(szDriverBuffer,0,128);
//格式化设备文件名称
sprintf(szDriverBuffer,"\\\\.\\PhysicalDrive%d",iDiskNo);
HANDLE m_hDevice = NULL;
//CreateFile获取到设备句柄
m_hDevice = CreateFileA(
szDriverBuffer,// 设备名称,这里指第一块硬盘,多个硬盘的自己修改就好了
GENERIC_READ, // 指定读访问方式
FILE_SHARE_READ | FILE_SHARE_WRITE, // 共享模式为读|写,0表示不能共享
NULL, // NULL表示该句柄不能被子程序继承
OPEN_EXISTING, // 打开已经存在的文件,文件不存在则函数调用失败
NULL, // 指定文件属性
NULL);
if (m_hDevice==INVALID_HANDLE_VALUE)
{
m_hDevice = NULL;
//无效
return INVALID_HANDLE_VALUE;
}
//设备句柄
return m_hDevice;
}
//通过磁盘的句柄,给定读取的位置,获取到扇区512字节数据返回
//readpos:扇区的逻辑地址
//lpOutBuffer512:用于返回读取的数据
BOOL ReadSectorData( HANDLE& hDevice,UINT64 redpos,unsigned char * lpOutBuffer512 )
{
memset(lpOutBuffer512,0,512);
LARGE_INTEGER li;
li.QuadPart = redpos*0x200;//0x200 = 512,求出扇区的 字节地址,通过设置读取的地址和长度进行read
SetFilePointer(hDevice,li.LowPart,&li.HighPart,FILE_BEGIN);
DWORD DCount=0; //计数
BOOL bResult=ReadFile(hDevice, lpOutBuffer512,512, &DCount, NULL);
return bResult;
}
//当然了,其实简单的fopen也是可以的,反正本质都一样,上面的是真繁琐。
void test()
{
FILE* fp = fopen("\\\\.\\PhysicalDrive0","rb");
if(!fp)
{
cout<<"cannot open"<<endl;
return;
}
char buff[512];
memset(buff,0,512);
fread(buff,1,512,fp);
for(int i=0;i<16;i++)
{
printf("%X ",buff[i]);
}
fclose(fp);
MessageBox(NULL,"tt","tt",MB_OK);
}
int main()
{
HANDLE handle = GetDiskHandle(0);
cout<<handle<<endl;
unsigned char buff[512];
ReadSectorData(handle,0,buff);
FILE* fp = fopen("MBR","wb");
fwrite(buff,1,512,fp);
fclose(fp);
CloseHandle(handle);
}
没怎么分析,IDA已经给出很多注释了,只是大致看了看确实是0:7C00h;
分析后面硬盘分区表,发现第一个竟然不是0x80。查了查,才发现,win10用的UEFI加载。
之所以能读取到类似与MBR的东西,只是因为兼容性罢了,称作protect MBR.
不过还是可以在虚拟机里面运行程序,就可以发现硬盘分区表的第一个字节确实是0x80,也就是属于活动状态了。
关于系统启动其他一些相关概念,可参考博客:https://blog.csdn.net/weixin_44966641/article/details/120374312