我正在寻找不同的编码方法来查找rootkit,我在这里提出了一个问题,实际上,提到一种检测它们的方法是使用windows API扫描文件,然后使用直接文件系统,看看是否有任何差异(对于某些类型的rootkit)。
这让我提出疑问:你如何编写代码来直接访问文件系统?这需要什么样的函数调用?这可以用C ++完成,还是需要进行汇编?
任何答案或指导都很可爱!
谢谢你, -Stefan Z
答案 0 :(得分:4)
直接读取内容非常容易......
(编辑:您甚至可以在不使用特定于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的很多内容都没有记录,但是some parts of it are documented。有趣的研究。
答案 1 :(得分:1)
使用正确的权限,您可以打开磁盘以作为块设备进行读取。您可以在设备的对象管理器路径上调用createfile(请参阅sysinternals中的winobj工具),例如\。\ Devices \ HardDrive0。
从那里你必须通过解释从磁盘读取的字节来手动读取文件系统。这不是一件容易的事,因为你必须有一个自定义的fat32或ntfs或者其他的实现。
这是我能想到的唯一方法。您可能很幸运使用ntfs的fuse实现作为读取数据的基础。