Контрразведка с soft-ice в руках

       

карта памяти "Блокнота", отображенная утилитой 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);

}



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