您當前位置:
首頁 >
php開源 >
php教程 > VC++信息安全編程(13)Windows2000/xp/vista/7磁盤扇區讀寫技術
VC++信息安全編程(13)Windows2000/xp/vista/7磁盤扇區讀寫技術
來源:程序員人生 發布時間:2015-06-05 08:56:25 閱讀次數:3365次
有些時候,我們讀取磁盤文件,會被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
第%d扇區
", cBuf, (int)(i / 512) + m_uFrom);
- if ((i % 16) == 15)
- sprintf(cBuf, "%s
", cBuf);
- else if ((i % 16) == 7)
- sprintf(cBuf, "%s- ", cBuf);
- }
- SetDlgItemText(IDC_DATA, cBuf);
- delete[] bBuf;
- delete[] cBuf;
- }
-
- void CSectorEdit2000Dlg::OnCleardata()
- {
- UpdateData(TRUE);
-
- char cTemp[1];
- memcpy(cTemp, m_DrvListBoxSResult.Left(1), 1);
- UINT uDiskID = cTemp[0] - 64;
- if (uDiskID > 2)
- {
- if (MessageBox("要清算的是硬盤分區,請確認是不是繼續?", "提示", MB_YESNO | MB_ICONWARNING) != 6)
- return;
- if (uDiskID == 3)
- {
- if (MessageBox("要清算的是系統分區,請再次確認是不是繼續?", "提示", MB_YESNO | MB_ICONWARNING) != 6)
- return;
- }
- }
-
- unsigned char bBuf[512];
-
- UINT i = 0;
- BOOL bRet = TRUE;
- while (m_bAllDisk)
- {
- memset(bBuf, 0xFF, sizeof(bBuf));
- bRet = WriteSectors(uDiskID, i, 1, bBuf);
- memset(bBuf, 0, sizeof(bBuf));
- bRet = WriteSectors(uDiskID, i, 1, bBuf);
-
- if (bRet == FALSE)
- {
- if (i == 0)
- MessageBox("所選磁盤分區不存在!", "毛病", MB_OK | MB_ICONERROR);
- else
- MessageBox("磁盤數據擦除終了!", "毛病", MB_OK | MB_ICONERROR);
- return;
- }
- i++;
- }
-
- if (m_bAllDisk == FALSE)
- {
- for (DWORD i = m_uFrom; i <= m_uTo; i++)
- {
- memset(bBuf, 0xFF, sizeof(bBuf));
- bRet = WriteSectors(uDiskID, i, 1, bBuf);
- memset(bBuf, 0, sizeof(bBuf));
- bRet = WriteSectors(uDiskID, i, 1, bBuf);
- if (bRet == FALSE)
- {
- if (i == 0)
- MessageBox("所選磁盤分區不存在!", "毛病", MB_OK | MB_ICONERROR);
- else
- MessageBox("磁盤數據擦除終了!", "提示", MB_OK | MB_ICONINFORMATION);
- return;
- }
- }
- }
- }
-
-
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
------分隔線----------------------------
------分隔線----------------------------