有些时候,我们读取磁盘文件,会被hook.我们读到的可能并非实际的文件。
我们直接读取磁盘扇区获取数据。
实现磁盘数据的读写,不依赖WindowsAPI。
void CSectorEdit2000Dlg::OnView()
{
UpdateData(TRUE);
if (m_uTo < m_uFrom)
return;
char cTemp[1];
memcpy(cTemp, m_DrvListBoxSResult.Left(1), 1);
UINT uDiskID = cTemp[0] - 64;
DWORD dwSectorNum = m_uTo - m_uFrom + 1;
if (dwSectorNum > 100)
return;
unsigned char* bBuf = new unsigned char[dwSectorNum * 512];
if (ReadSectors(uDiskID, m_uFrom, (UINT)dwSectorNum, bBuf) == FALSE)
{
MessageBox("所选磁盘分区不存在!", "错误", MB_OK | MB_ICONERROR);
return;
}
char* cBuf = new char[dwSectorNum * 5120];
memset(cBuf, 0, sizeof(cBuf));
for (DWORD i = 0; i < dwSectorNum * 512; i++)
{
sprintf(cBuf, "%s%02X ", cBuf, bBuf[i]);
if ((i % 512) == 511)
sprintf(cBuf, "%s\r\n第%d扇区\r\n", cBuf, (int)(i / 512) + m_uFrom);
if ((i % 16) == 15)
sprintf(cBuf, "%s\r\n", cBuf);
else if ((i % 16) == 7)
sprintf(cBuf, "%s- ", cBuf)

在面临文件读取可能被hook的情况下,通过直接读取磁盘扇区可以获取原始数据。本文介绍如何在VC++环境下,不依赖Windows API实现Windows 2000/xp/vista/7系统的磁盘数据读写操作。
最低0.47元/天 解锁文章
3205

被折叠的 条评论
为什么被折叠?



