Старые антиотладочные приемы на новый лад


   Армен Меружанович Саркисян лотерея столото S8        

универсальный антиотладочный прием распознающий трассировку под большинством отладчиков


Данный прием позволяет обнаруживать soft-ice и многие другие отладчики, причем, на пассивную отладку он не реагирует (и это хорошо!). Пользователь нашей программы может запускать soft-ice и отлаживать остальные программы, но... как только он попытается загрузить в отладчик нашу она тут же подаст сигнал. Тоже самое произойдет, если хакер присоединит отладчик к уже запушенному процессу или ворвется в середину программы путем установки точек останова на API-функции. Естественно, антиотладочный код должен выполняться не до, а после загрузки отладчика. То есть, размещать его в самом начале защищаемой программы не стоит. Лучше — многократно дублировать в различных местах.

Прелесть данного приема в том, что его достаточно трудно распознать при взломе. Явные проверки отсутствуют и команда jmp under_debugger выглядит невинной овечкой. При ее выполнении без отладчика возбуждается исключение, перехватываемое обработчиком и выполнение программы идет уже совсем по другому пути (обработчик подменяет указатель команд, хотя, впрочем, он мог бы этого и не делать — в отличии от прерываний из которых в ms-dos нужно было выходить как можно скорее, чтобы не развалить систему, обработчик структурного исключения в принципе может вмещать в себя весь код программы целиком и химичить с контекстом совершенно необязательно — зачем лишний раз привлекать внимание хакера?). Под отладчиком же команда jmp under_debugger выполняется "как есть" и хакер может очень долго ковыряться в подложной ветке under_debugger не понимая, что здесь вообще происходит и откуда это взялось?! Чтобы оттянуть взлом, лучше не говорить сразу, что отладчик обнаружен, а подсунуть какой-нибудь зашифрованный код или что-то еще.

Главное, чтобы команды popf и jmp under_debugger не были разделены никакими другими инструкциями! Иначе защита не сработает! Трассировочное исключение генерируется сразу же после выполнения первой команды, расположенной после popf, и если ею окажется, например, nop, то jmp'у никаких исключений уже не достанется.

Содержание  Назад  Вперед





Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий