[英]Direct File System Function Calls on Windows
我當時正在尋找使用不同的編碼方法來查找rootkit的方法,實際上,我在這里遇到了一個問題,提到檢測它們的一種方法是使用Windows API掃描文件,然后使用直接文件系統,然后查看是否存在任何差異(針對某些類型的rootkit)。
這使我想到一個問題:如何編寫代碼直接訪問文件系統? 為此需要什么樣的函數調用? 這是可以在C ++中完成的事情,還是我需要進行匯編?
任何答案或指導將是可愛的!
謝謝-Stefan Z
直接閱讀東西很容易...
( 編輯:您甚至可以在不使用Windows特定頭文件的情況下執行此操作-參見下文。)
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
FILE *volume = fopen("\\\\.\\C:", "r");
if (volume)
{
long long offset = 0; // Sector-aligned offset
setbuf(volume, NULL); // Disable buffering
if (_fseeki64(volume, offset, SEEK_SET) == 0)
{
char buf[1024]; // Multiple of sector size
size_t cb = fread(buf, sizeof(*buf), _countof(buf), volume);
// Process the data
}
fclose(volume);
}
return 0;
}
困難的部分是弄清楚閱讀什么 ,以及如何解釋它。
關於NTFS的很多文獻均未記載 ,但其中的某些部分已有文獻記載 。 祝您研究愉快。
擁有正確的權限,您可以打開磁盤以作為塊設備讀取。 您在設備的對象管理器路徑上調用createfile(請參見sysinternals的winobj工具),例如\\。\\ Devices \\ HardDrive0。
從那里,您必須通過解釋從磁盤讀取的字節來手動讀取文件系統。 這不是一件容易的事,因為您必須具有fat32或ntfs或其他任何自定義實現。
這是我可以想到的唯一方法。 使用ntfs的fuse實施作為讀取數據的基礎可能會很幸運。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.