принцип действия типичного wmf-эксплоитов
Для анализа хорошо подходит WMF Exploit Checker
от Ильфака Гуильфанова, исходный код которого можно утянуть по адресу http://castlecops.com/downloads-file-500-details-WMF_exploit_checker_source_code.html, а откомпилированный бинарник двоичный файл http://castlecops.com/downloads-file-495-details-WMF_Vulnerability_Checker.html. На самом деле это никакой не checker, а самый настоящий эксплоит, внедряющий в wmf-файл машинный код, котоый , пытающийся вывести на экран выводит "Your system is vulnerable to WMF exploits!"
через MessageBoxA.
Распаковав zip-архив с исходными текстами,
мы найдем семь файлов следующего содержания:
q tell.asm: shell-код, подготовленный к внедрению;
q wmf_checker_hexblog.cpp: создает wmf-файл, внедряет туда shell-код и проигрывает его;
q wmfdata.cpp: откомилированный tell.asm с готовым wmf-заголовком;
q wmfhdr.wmf: wmf-заголовок с escape-последовательностью и функций SetAbortProc;
q различные командные файлы для компиляции;
Фактически, wmfdata.cpp представляет собой готовый wmf-файл с shell-кодом, который можно "скормить" Internet Exporer'у, IrfanView'у или любой другой программе подобного типа, только предварительно сначала необходимо нужно преобразовать cpp в bin, поскольку у Ильфака двоичные данные представлены в виде массива типа uchar:
static uchar array[] = {
0x01,0x00,0x09,0x00,0x00,0x03,0xED,0x00,0x00,0x00,0x06,0x00,0x3D,0x00,0x00,0x00,