карта памяти "Блокнота", отображенная утилитой PE-TOOLS
Для дальнейший экспериментов нам понадобится программа, создающая пару потоков — "честным" и "нечестным" путем. Исходный код (с опущенной обработкой ошибок и других исключительных ситуаций) может выглядеть так:
#include <stdio.h>
#include <windows.h>
// код потока, который ничего не делает, а только мотает цикл
thread(){while(1);}
main()
{
void *p; // переменная многоцелевого назначения
// создаем "честный" поток
CreateThread(0,0,(void*)&thread,0x999,0,&p);
// создаем "нечестный" поток так, как это делает malware:
// выделяем блок памяти из кучи, копируем туда код потока
// и вызываем CreateThread
p = VirtualAlloc(0, 0x1000, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
memcpy(p,thread,0x1000);CreateThread(0,0,p,0x666,0,&p);
// ждем нажатия на ENTER
gets(&p);
}