Это даже не первая, это нулевая часть. Потому что об этом антиотладочном трюке (если можно так сказать), знают не просто все, а больше чем все. Речь пойдёт сегодня о IsDebuggerPresent. Если кто-то даже просто подходил к отладчику, то и они знают об этом приёме. Эта функция живёт (экспортируется) в Kernel32.dll. Как уже понятно, эта функция позволяет определить, отлаживается приложение или нет. Если текущий процесс, запущен в контексте отладчика, то возвращается 1, а если нет, то 0. Просто вызвать эту функцию их любого участка вашего кода. И Microsoft всё сделает за вас:) Рассмотрим классический пример
Листинг 1.1
#include "stdafx.h"
#include
int _tmain(int argc, _TCHAR* argv[])
{
if(IsDebuggerPresent())
MessageBoxA(NULL,"Hello,hacker","Message",MB_OK);
else
MessageBoxA(NULL,"Hello,good people","Message",MB_OK);
return 0;
}
Всё просто, если попался дебаггер, то нашему взору предстаёт надпись «Hello,hacker», а если мы честно запускаем просто экзэшник, то вываливается табличка со словами « Hello,good people».
Этот трюк работает со многими отладчиками, но например Soft-ice, он не берёт. Оно и понятно, на Айсе сидят профессионалы, а против профов нет приёмов:)
Теперь о том как его обойти. Тут ещё всё элементарнее. Открываем допустим OllyDbg (Олечка) и загружаем подопытную программу. Затем жмём
Лисинг 1.2
7FFD8000 0000 ADD BYTE PTR DS:[EAX], AL
7FFD8002 0100 ADD DWORD PTR DS:[EAX], EAX
Единичка — это как раз то что нас засекли. Ну что ж,меняем единичку на ноль. Теперь жмём
Это было уж слишком просто, но дальше будем усложняться