Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #57, АВГУСТ 2005 г.

Борьба с отладчиком

Mario555

Спецвыпуск: Хакер, номер #057, стр. 057-084-4


Вот необычная проверка времени. Ее суть не в измерении времени выполнения кода, а в том, что при загрузке программы в отладчик мы тратим много времени (по процессорным меркам), даже перед нажатием RUN в отладчике. Протектор, используя NtQueryInformationProcess с InfoClass = ProcessTimes, получает время, когда процесс был создан. Потом через GetSystemTimeAsFileTime получает текущее системное время, далее следует вычитание из одного другого и сравнение с заданным допустимым интервалом времени, который выбран относительно большим, поэтому ложных срабатываний на медленных процессорах не будет, но в то же время этот интервал меньше, чем время, за которое ты успеешь запустить программу в дебаггере.

Еще один способ обнаружить отладчик – искать по тем изменениям, которые происходят в программе при запуске под ним (но не являются четко документированными признаками отладки, как, например, байт BeingDebugged в PEB). Я бы вообще промолчал о них (так как доподлинно неизвестно, надежны они или нет), если бы не их применение в ExeCryptor, который порядочно распространился в последнее время. Там проверяется значение NtGlobalFlag из PEB: без отладчика оно равно нулю, с отладчиком и по умолчанию в XP SP1 оно равно 70h, и DWORD по смещению + 10h в ProcessHeap (взятом из PEB) - без отладчика там ноль, с отладчиком по умолчанию в XP SP1 там 40000060h.

Назад на стр. 057-084-3  Содержание  Вперед на стр. 057-084-5