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

защита игр от взлома

КРИС КАСПЕРСКИ АКА МЫЩЪХ

Спецвыпуск: Хакер, номер #064, стр. 064-066-12


Боремся с отладчиком

Распространенный миф гласит, что штурмовать отладчик уровня soft-ice можно только из ядра, а надежно обуть его с приказного уровня невозможно. Неправда. В частности, эффективная отладка форт-программ (как и другого p-кода) под soft-ice невозможна. Отладчик просто вращается внутри форт-машины, наматывая мили на кардан, хакер матерится, выкуривает одну сигарету за другой, но не может предложить ничего конструктивного, кроме как написать декомпилятор, на что требуется время, которого никогда нет.

антиотладка

К слову, использовать антиотладочные приемы следует с большой осторожностью, лучше не использовать их вообще. То, что работает под 9x, часто не работает под NT, и наоборот. Обращение к недокументированным структурам операционной системы ставит программу в зависимость от левой пятки Microsoft, привязывая ее к текущей версии Windows. Кроме того, многие антиотладочные приемы, опубликованные в различных статьях, на проверку оказываются сплошной фикцией. Отладчик работает нормально и не ведется на них, зато глюки прилетают косяками.

Следует помнить и о существовании такой штуки, как IceExt — специальной примочки для soft-ice, которая скрывает его от многих защитных механизмов. Всегда проверяй все применяемые идеи на вшивость, и не только под soft-ice+IceExt, но и в альтернативных отладчиках типа OllyDbg. Совершенно недопустимо отказываться от работы в присутствии пассивного отладчика. Аргумент «soft-ice держат на компьютере только хакеры» идет лесом на хутор. Туда же посылаются и разработчики. Необходимо противодействовать лишь активной отладке. Нейтрализации точек останова обычно бывает вполне достаточно. Не нужно мешать отладчику, главное — сделать этот процесс максимально неэффективным.

вероятностное поведение программы

Пусть вызовы защитных функций следуют из разных мест с той или иной вероятностью, определяемой либо оператором типа rand(), либо действиями пользователя. Например, если сумма последних шести символов, набранных пользователем, равна 69h, происходит «внеплановый» вызов защитного кода. Если программа при каждом прогоне ведет себя слегка по-разному, реконструкция ее алгоритма чрезвычайно усложняется.

взлом по следам, взлом без следов

Основная ошибка большинства создателей защит заключается в том, что они дают хакеру понять, что защита распознала попытку взлома. Ни в коем случае не делать так! Пусть хакер сам догадывается, перелопачивая тонны машинного кода. Ах, если бы мы только могли не выводить диалоговое окно с надписью «неверный серийный номер/инвалидный ключ» — тогда хакеру остается только поставить точку останова и посмотреть на код, который выводит его, а защитный механизм сразу же будет пойман за хвост! Приходится идти в обход: вместо немедленного выполнения какого-либо действия программист создает список отложенных процедур (просто массив указателей на функции) и проверяет его в цикле выборки сообщений или во время простоя системы из отдельного потока. Один поток проверяет регистрационные данные и кладет сюда указатель на функцию, которую нужно осуществить вместе с другими функциями, выполняемыми программой. Цепь разомкнулась! Простая трассировка топит отладчик в цикле выборки сообщений, и хакеру приходится разбираться со всеми этими списками, очередями и т.д., что в отладчике сделать очень непросто. Для реконструкции алгоритма требуется помощь дизассемблера...

Назад на стр. 064-066-11  Содержание  Вперед на стр. 064-066-13