Метафизика wmf файлов

неофициальный hotfix отсекает всех известных червей, ломящихся в META_ESCAPE


Инсталлятор

копирует крошечную (всего 3 Кбайта) динамическую библиотеку wmfhotfix.dll в системный каталог Windows и модифицирует следующую ветку реестра HKLM\Software\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs, проецируя DLL на все процессы, загружающие USER32.DLL. По окончании установки нам поступает традиционное предложение перезагрузиться, то мы посылаем его на фиг. Ключ AppInit_DLLs

начинает действовать и без этого, проецируя wmfhotfix.dll на адресное пространство всех запускаемых приложений. Ранее запущенные приложения останутся неотпаченными, поэтому их следует закрыть.

Оттуда, из DllMain, он загружает GDI32.DLL, определяет адрес функции Escape и, предварительно присвоив нужные атрибуты PAGE_EXECUTE_READWRITE вызовом VirtualProtect, дописывает к ее началу крохотный thunk, анализирующий аргументы и, если func == SETABORTPROC, возвращающий xor eax, eax/pop ebp/retn 14h.

gdi32 = LoadLibrary(gdi32_dll_name);

ptr = (BYTE *)GetProcAddress(gdi32, "Escape");

static int __stdcall thunk(HDC, int func,int param1, void *restparams, DWORD)

{

       if ( func != 9 ) // SetAbort

       {

              __asm

              {

                     sub esp, spdelta

                     jmp dword ptr after_thunk //handle everything except SetAbort

              }

       }

       return 0; // fail

}



Содержание раздела