изврат конечно но может кому то интересно будет есть такой антируткит GMER я юзаю в нем фишку удаление залоченых файлов в том числе открытых другими процессами dll и exe модулей можно встроить в контекстное меню файлов команду kill а запросы передавать "гмеровскому" драйверу для этого надо запустить "фейкового гмера" чтобы он запустил драйвер (это надо сделать только один раз) лучше сразу взять копию "гмера" и назвать ее "killer_driver.exe" он еще понадобится и так вот код самой утилиты назовем ее "killer.exe" Code: #include <windows.h> #include <ntdll.h> #include <shlwapi.h> #include <process.h> static void Killer(PWSTR File) { HANDLE hGmer; UNICODE_STRING GmerDevice; UNICODE_STRING KilledFile; OBJECT_ATTRIBUTES ObjectAttributes; IO_STATUS_BLOCK IoStatusBlock; NTSTATUS Status; if (!PathFileExistsW(File)) return; RtlInitUnicodeString(&GmerDevice, L"\\Device\\aujasnkj"); RtlDosPathNameToNtPathName_U(File, &KilledFile, NULL, NULL); InitializeObjectAttributes(&ObjectAttributes, &GmerDevice, 0, NULL, NULL); Status = NtCreateFile(&hGmer, FILE_GENERIC_READ | FILE_GENERIC_WRITE, &ObjectAttributes, &IoStatusBlock, NULL, 0, FILE_SHARE_READ | FILE_SHARE_WRITE, FILE_OPEN_IF, 0, NULL, 0); if (NT_ERROR(Status)) { int r = _spawnl(_P_WAIT, "c:\\windows\\system32\\killer_driver.exe", " ", 0); if (r < 0) FatalAppExit(0, "_spawnl"); Status = NtCreateFile(&hGmer, FILE_GENERIC_READ | FILE_GENERIC_WRITE, &ObjectAttributes, &IoStatusBlock, NULL, 0, FILE_SHARE_READ | FILE_SHARE_WRITE, FILE_OPEN_IF, 0, NULL, 0); if (NT_ERROR(Status)) FatalAppExit(0, "NtCreateFile"); } Status = NtDeviceIoControlFile(hGmer, NULL, NULL, NULL, &IoStatusBlock, 0, KilledFile.Buffer, KilledFile.Length + 2, 0, 0); if (NT_ERROR(Status)) FatalAppExit(0, "NtDeviceIoControlFile"); RtlFreeUnicodeString(&KilledFile); } void entry() { int argc; LPWSTR *argv = CommandLineToArgvW(GetCommandLineW(), &argc); if (argc < 2) FatalAppExit(0, "Not enough argc"); Killer(argv[1]); } когда в меню выберут командум kill мы получим имя файла который нужно уничтожить дальше проверим загружен ли уже драйвер если нет попросим "гмера" загрузить теперь пишем dll которую надо внедрить в таблицу импорта "фейкового гмера" она его будет хукать и убивать сразу после инита драйвера назовем ее "killer_driver.dll" Code: #include <windows.h> #include <ntdll.h> #include "splice.h" #define SPLICE_CURRENT_MODULE ntdll SPLICE_API(VOID NTAPI, NtDeviceIoControlFile, HANDLE FileHandle, HANDLE Event, PIO_APC_ROUTINE ApcRoutine, PVOID ApcContext, PIO_STATUS_BLOCK IoStatusBlock, ULONG IoControlCode, PVOID InputBuffer, IN ULONG InputBufferLength, OUT PVOID OutputBuffer OPTIONAL, IN ULONG OutputBufferLength) { SPLICE_CALL(NtDeviceIoControlFile, FileHandle, Event, ApcRoutine, ApcContext, IoStatusBlock, IoControlCode, InputBuffer, InputBufferLength, OutputBuffer, OutputBufferLength); ExitProcess(0xDEAD); } extern "C" __declspec(dllexport) void lock() { } она ставит хук и ждет пока "гмер" загрузит драйвер вызовет NtDeviceIoControlFile передает вызов настоящей функции а после "гасит свет" (в этот момент наш ожидающий killer.exe вызвавший _spawnl проснется последующие вызовы будут обращатся сразу к драйверу без дерганья "фейкового гмера") теперь добавляем эту dll с помощью lord pe в таблицу импорта "фейкового гмера" в итоге у нас получаются три файла killer.exe сама утилита killer_driver.dll будет юзатся "фейковым гмером" killer_driver.exe сам "фейковый гмер" который запускается для загрузки драйвера их нужно скопировать в system32 теперь пишем reg файл для добавления меню kill к файлам всех типов Code: Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\*\shell\kill] @="" [HKEY_CLASSES_ROOT\*\shell\kill\command] @="killer.exe \"%1\"" все теперь можно уничтожать любой занятый файл через стандартное меню без запуска оболочки гмера проверял только на xp скомпиленные файлы http://slil.ru/31388654