能力值:
( LV4,RANK:40 )
2 楼
w7加载了可以直接删
能力值:
( LV4,RANK:50 )
3 楼
https://bbs.pediy.com/thread-136033.htm
能力值:
( LV5,RANK:60 )
4 楼
PUNICODE_STRING pusDriverPath = NULL; pusDriverPath = &((PKLDR_DATA_TABLE_ENTRY)pDriverObject->DriverSection)->FullDllName; DelDriverFile(pusDriverPath); NTSTATUS DelDriverFile(PUNICODE_STRING pUsDriverPath) { IO_STATUS_BLOCK IoStatusBlock; HANDLE FileHandle; OBJECT_ATTRIBUTES ObjectAttributes; InitializeObjectAttributes( &ObjectAttributes, pUsDriverPath, OBJ_KERNEL_HANDLE | OBJ_CASE_INSENSITIVE, 0, 0); NTSTATUS Status = IoCreateFileEx(&FileHandle, SYNCHRONIZE | DELETE, &ObjectAttributes, &IoStatusBlock, nullptr, FILE_ATTRIBUTE_NORMAL, FILE_SHARE_DELETE, FILE_OPEN, FILE_NON_DIRECTORY_FILE | FILE_SYNCHRONOUS_IO_NONALERT, nullptr, 0, CreateFileTypeNone, nullptr, IO_NO_PARAMETER_CHECKING, nullptr); if (!NT_SUCCESS(Status)) { return Status; } PFILE_OBJECT FileObject; Status = ObReferenceObjectByHandleWithTag(FileHandle, SYNCHRONIZE | DELETE, *IoFileObjectType, KernelMode, 'eliF', reinterpret_cast<PVOID*>(&FileObject), nullptr); if (!NT_SUCCESS(Status)) { ObCloseHandle(FileHandle, KernelMode); return Status; } const PSECTION_OBJECT_POINTERS SectionObjectPointer = FileObject->SectionObjectPointer; SectionObjectPointer->ImageSectionObject = nullptr; // call MmFlushImageSection, make think no backing image and let NTFS to release file lock CONST BOOLEAN ImageSectionFlushed = MmFlushImageSection(SectionObjectPointer, MmFlushForDelete); ObfDereferenceObject(FileObject); ObCloseHandle(FileHandle, KernelMode); if (ImageSectionFlushed) { // chicken fried rice Status = ZwDeleteFile(&ObjectAttributes); if (NT_SUCCESS(Status)) { return Status; } } return Status; }
能力值:
( LV2,RANK:10 )
5 楼
@放学打我不, 太感谢了,正是我需要的。 还有,有没有办法不在硬盘上释放sys映像,而通过内存方式加载驱动啊?就跟进程空间注入一样,手动virtualalloc writememory & symbol relocation 来模拟LoadLibrary。 btw, 大神你的资料是哪来的?我想系统性地学习一下软驱动。 (与物理设备无关)
能力值:
( LV8,RANK:130 )
6 楼
直接去写services注册表(当然你得有权限写才行)重启也可以加载,走IopInitializeBuiltinDriver 除了这些,你还可以利用Ring0的任意代码执行漏洞,把代码写入内核空间去执行
能力值:
( LV4,RANK:50 )
7 楼
blackbone
能力值:
( LV5,RANK:60 )
8 楼
切糕茶叶蛋
@放学打我不, 太感谢了,正是我需要的。
还有,有没有办法不在硬盘上释放sys映像,而通过内存方式加载驱动啊?就跟进程空间注入一样,手动virtualalloc writememory & ...
1.利用下capcom.sys 但是capcom.sys落盘了
2.写一个loader.sys loader里面使用wsk 从网络下载驱动文件不落盘 直接在内存中 然后你懂的 结果loader.sys落盘了
哎呀 好烦 都落盘了.
能力值:
( LV13,RANK:460 )
9 楼
原理:
加载后通过 PCHunter64ap.sys 的驱动对象,取得完整文件名称,然后调用 DelDriverFile() 删除磁盘上驱动文件。
DelDriverFile() 用 IoCreateFileEx() 打开 PCHunter64ap.sys 的驱动文件 -> ObReferenceObjectByHandleWithTag() 引用其 FileObject -> 取得 SectionObject 指针,并将 ImageSectionObject 置 NULL -> 让 MmFlushImageSection() 冲刷掉 ImageSection 释放文件锁 (可能类似禁用
PCHunter64ap.sys 映射文件)-> 解引 FileObject,关闭句柄 -> 一旦冲刷成功,通过 ZwDeleteFile() 删除文件。
最后于 2018-9-20 17:24
被shayi编辑
,原因:
能力值:
( LV12,RANK:280 )
10 楼
shayi
原理:
加载后通过 PCHunter64ap.sys 的驱动对象,取得完整文件名称,然后调用 DelDriverFile() 删除磁盘上驱动文件。
DelDriverFile() 用 IoC ...
赞
能力值:
( LV13,RANK:460 )
11 楼
能力值:
( LV5,RANK:60 )
12 楼
绕过NtLoadDriver win64上方法有点少吧 你可以用内核帮你load 调用FilterLoad 不过你的注册表要注意下 因为只加载minifilter驱动 原理就是发送一个ioctl到内核 然后内核帮你从内核调用zwloaddriver 卸载调用FilterUnload
能力值:
( LV2,RANK:10 )
13 楼
放学打我不
绕过NtLoadDriver win64上方法有点少吧
你可以用内核帮你load
调用FilterLoad 不过你的注册表要注意下 因为只加载minifilter驱动
原理就是发送一个ioctl ...
嗯,大致明白了,总之直接 Ring3 层发起的API是不行的。
总之要么先写个驱动进内核,一进内核态就权力无限自由发挥了,所以相当于自己在内核中加了一个内存 Loader。
要么借助已有的 capcom.sys等的跳板,原理同上。
能力值:
( LV2,RANK:10 )
14 楼
楼主用什么工具看的,居然能看见PCHunter64释放驱动的瞬间???
能力值:
( LV2,RANK:10 )
15 楼
最后于 2019-2-13 11:14
被bxb编辑
,原因: