Антиотладочные приёмы. Часть 0. Детсад.

Это даже не первая, это нулевая часть. Потому что об этом антиотладочном трюке (если можно так сказать), знают не просто все, а больше чем все. Речь пойдёт сегодня о 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

Единичка — это как раз то что нас засекли. Ну что ж,меняем единичку на ноль. Теперь жмём и видим, что на это раз нам более приветливы «Hello,good people».

Это было уж слишком просто, но дальше будем усложняться

Комментарии (3) на “Антиотладочные приёмы. Часть 0. Детсад.”

  1. http://rel» rel=»nofollow»> Спасибо,…

    Хотя новость уже читал…

Добавить комментарий