簡體   English   中英

Windows上的直接文件系統功能調用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM