Борьба с отладчиком 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. |