Шесть грехов malware-писателей


Грех5 — недокументированные возможности


Использование недокументированных возможностей оправдано тогда и _только_ тогда, когда без них обойтись _невозможно_ или же создатель малвари на 100% уверен, что на всех целевых операционных системах эти возможности реализованы одинаково, что вовсе не факт. Даже установка очередного пакета обновления приводит к значительным изменениям в поведении оси.

Вот только один пример. При запуске exe-файла, доступ к нему блокируется и если он вдруг захочет себя удалить, без посторонней помощи ему это ни за что не сделать, поскольку удаление становится возможным только после снятия блокировки, то есть после завершения процесса. Конечно, можно создать bat-файл, но только это некрасиво (хоть и надежно), а можно воспользоваться недокументированной особенностью Windows 9x/NT, позволяющей освобождать страничный образ файла, снимая тем самым с него блокировку. В 9x это делается функцией FreeLibrary, в NT и W2k – UnmapViewOfFile. Правда, выполнение кода в освобожденной секции становится невозможным и любая попытка обращения к принадлежащей ей памяти возбуждает исключение. А нам еще DeleteFile

и ExitProcess

выполнить надо! Как быть?! Приходится разрывая себе задницу напополам, "заряжать" стек.

Конкретная реализация показана ниже. Попробуйте разобраться как _это_ вообще работает и почему (ведь с первого взгляда не должно) и только потом обращайтесь к разгадке (только чур, не подглядывать!).

 

module = GetModuleHandle(0);

GetModuleFileName(module, buf, MAX_PATH);

 

if(0x80000000 & GetVersion())

{

       // для Win9x

       fnFreeOrUnmap = FreeLibrary;

}

       else

{

       // для WinNT

       fnFreeOrUnmap = UnmapViewOfFile;

       CloseHandle((HANDLE)4);

}

 

__asm

{

       lea    eax, buf

       push   0

       push   0

       push   eax

       push   ExitProcess

       push   module

       push   DeleteFile

       push   fnFreeOrUnmap

       ret

}

Листинг 2 код, удаляющий текущий процесс

Начнем раскрутить головоломку с конца.


- Начало -  - Назад -  - Вперед -



Книжный магазин