с wm av такой вариант находил
Код
program Project2;
{$APPTYPE CONSOLE}
uses
Windows;
procedure TrueEntryPoint;
begin
MessageBoxW(0, 'Hello World', '', MB_OK);
end;
procedure AntiEmul;
var
lpSystemTime: _SYSTEMTIME;
asm
push 0
popfd
lea eax, lpSystemTime
push eax
call GetSystemTime
pushfd
pop eax
add eax, offset TrueEntryPoint
sub eax, $00000246
call eax
end;
begin
AntiEmul;
end.
в TrueEntryPoint нужный код.
когда происходит эмуляция апи - результат в eax, а он не учитывает регистр флагов
так же есть вариант опять поиграться с апи и вызвать функцию с "необычными" под эмулятором и реальной средой значения будут разные.
в Sality использовался многократный вызов FreeLibrary с несуществующими хендлами библиотек.
например так
Код
FreeLibrary(h1);
FreeLibrary(h2);
FreeLibrary(h3);
после анализировались полученные занчения.
еще вариант с апи вызывать функцию, но ограничить размер приемника. в реальной среде будет ошибка по эмулятором ав будет все ок.
и наконец классика - шифруем участки кода. ключ берем из "необычных" мест, которые в эмуляторе обычно забиваются ерундой. в результате ав никгда не расшифрует в витруалке код программы