ИНИЦИАЛИЗАЦИЯ ЗАЩИТЫ
Перед тем как выводить какое либо приветствие на экран, таск проверяет флаг NtGlobalFlag из структуры PEB:
mov eax, dword ptr fs:[30] - загружает в регистр EAX указатель на PEB структуру
test byte ptr ds:[eax+68],70 - провряет флаг NtGlobalFlag по смещениею PEB+0x68 для 32-разрядной или PEB+0xBC дя 64-разрядной / Если флаг равен 0x70(FLG_HEAP_ENABLE_TAIL_CHECK (0x10)
+ FLG_HEAP_ENABLE_FREE_CHECK (0x20)
+ FLG_HEAP_VALIDATE_PARAMETERS (0x40)) - процесс создан из под отладчика.
jne debug_detected
Обойти это можно как изменением PEB структуры, так и просто пропатчить jne на NOP
Далее идет следующий трюк, создается поток с проверкой где в цикле вызывается функция IsDebuggerPresent:
Обойти можно разными путями, начиная от проNOPить создание потока, изменить пролог функции с push на ret или просто изменить логику внутри патчем cmp или jne\je
Далее идет последний трюк, который так же будет выполняться в отдельном потоке как и предыдущий:
Используются следующие функции:
CreateToolhelp32Snapshot - Делает снимок процессов
Process32Next - Получает информацию о следующем процессе
Process32First - Получает информацию о первом процессе
Я думаю многие уже догадались в чем заключается данный трюк, а если нет, вот подсказка:
В цикле, как и в предыдущем трюке, будут искаться процессы, которые указаны выше, при детекте которых таск будет закрываться.
АЛГОРИТМ
Разбирать алгоритм нет никакого смысла(и желания), ибо сгенерированный ключ по имени палится в регистре перед сравнением.