1. greki_hoy

    greki_hoy Member

    Joined:
    4 Mar 2010
    Messages:
    326
    Likes Received:
    57
    Reputations:
    41
    изврат конечно но может кому то интересно будет
    есть такой антируткит 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\""
    
    все теперь можно уничтожать любой занятый файл через стандартное меню без запуска
    оболочки гмера
    [​IMG]
    проверял только на xp
    скомпиленные файлы http://slil.ru/31388654
     
    3 people like this.
  2. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,021
    Likes Received:
    1,189
    Reputations:
    327
    G-MOR ))) но за идею +
     
Loading...