Tesla.Angela 发表于 2025-3-3 00:02:26

[开源]使用LoadImageNotifyRoutine抓取别人的驱动

以下代码由ChatGPT生成,我稍加修改了一下。只要把代码复制下来命名为***.c即可使用WDK7编译。
#include <ntddk.h>

void LoadImageNotifyRoutine
(
        PUNICODE_STRING FullImageName,
        HANDLE ProcessId,
        PIMAGE_INFO ImageInfo
)
{
        if (!FullImageName || !ImageInfo->SystemModeImage)
        {
                return;
        }
        if (wcsstr(FullImageName->Buffer, L".sys"))
        {
                UNICODE_STRING source, destination;
                OBJECT_ATTRIBUTES attr;
                IO_STATUS_BLOCK ioStatus;
                HANDLE sourceHandle, destHandle;       
                //注意:不建议使用如此大的局部变量,应该动态申请空间。AI可能偷懒了。
                WCHAR destinationPath = L"\\??\\C:\\";
                wcscat(destinationPath, wcsrchr(FullImageName->Buffer, L'\\') + 1);
                RtlInitUnicodeString(&source, FullImageName->Buffer);
                RtlInitUnicodeString(&destination, destinationPath);
                InitializeObjectAttributes(&attr, &source, OBJ_CASE_INSENSITIVE | OBJ_KERNEL_HANDLE, NULL, NULL);
                if (NT_SUCCESS(ZwCreateFile(&sourceHandle, GENERIC_READ, &attr, &ioStatus, NULL, FILE_ATTRIBUTE_NORMAL, 0, FILE_OPEN, FILE_NON_DIRECTORY_FILE | FILE_SYNCHRONOUS_IO_NONALERT, NULL, 0)))
                {
                        InitializeObjectAttributes(&attr, &destination, OBJ_CASE_INSENSITIVE | OBJ_KERNEL_HANDLE, NULL, NULL);
                        if (NT_SUCCESS(ZwCreateFile(&destHandle, GENERIC_WRITE, &attr, &ioStatus, NULL, FILE_ATTRIBUTE_NORMAL, 0, FILE_OVERWRITE_IF, FILE_NON_DIRECTORY_FILE | FILE_SYNCHRONOUS_IO_NONALERT, NULL, 0)))
                        {
                                //注意:不建议使用如此大的局部变量,应该动态申请空间。AI可能偷懒了。
                                UCHAR buffer;
                                ULONG bytesRead, bytesWritten;
                                while (NT_SUCCESS(ZwReadFile(sourceHandle, NULL, NULL, NULL, &ioStatus, buffer, sizeof(buffer), NULL, NULL)) && ioStatus.Information > 0)
                                {
                                        bytesRead = (ULONG)ioStatus.Information;
                                        ZwWriteFile(destHandle, NULL, NULL, NULL, &ioStatus, buffer, bytesRead, NULL, NULL);
                                }
                                ZwClose(destHandle);
                        }
                        ZwClose(sourceHandle);
                }
        }
}

void DriverUnload(PDRIVER_OBJECT DriverObject)
{
        PsRemoveLoadImageNotifyRoutine(LoadImageNotifyRoutine);
}

NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath)
{
        UNREFERENCED_PARAMETER(RegistryPath);
        DriverObject->DriverUnload = DriverUnload;
        return PsSetLoadImageNotifyRoutine(LoadImageNotifyRoutine);
}
为啥我要发这个帖子呢?原因在这:**** Hidden Message *****

jinfu 发表于 2025-3-3 18:46:09

本帖最后由 jinfu 于 2025-3-3 18:48 编辑

666,被抓驱动特征是容易被进检测黑名单的。

lpmjknj 发表于 2025-3-4 02:06:34

看看发这个帖子的原因

WordStar 发表于 2025-3-10 07:24:56

学习一下

crazyshit 发表于 2025-4-2 21:53:45

来看看

IBinary 发表于 2025-6-11 11:17:13

拦截驱动加载.数据重定向到文件.

lai0301 发表于 2025-6-18 11:17:35

看看!!!!!!!!!!

376408384 发表于 2025-6-24 22:44:48

我来学习
页: [1]
查看完整版本: [开源]使用LoadImageNotifyRoutine抓取别人的驱动