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

Мануальная терапия

Крис Касперски ака мыщъх

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


Проверим, сумеем ли мы взломать это? Дизассемблер легко обнаруживает условный переход, определяющий правильность ввода пароля (в моем случае он расположен по адресу 4020A1h). Меняем jz xxx на jmp short xxx. Программа видит, что контрольная сумма изменилась, и уже не срабатывает. Запускаем SoftIce и устанавливаем точку останова по адресу 4020A1h.

Черт возьми, она не срабатывает! Ну не срабатывает и все, хоть ты тресни! Хакер до отупения может перебирать все отладчики один за другим, но от этого ничего не изменится, даже если запустить программу под эмулятором. Вот так прием!

Несколько полезных советов

В нашем случае охраняемый условный переход располагался в первых 1000h байтах от начала секции .text, поэтому этот трюк и сработал. Но ведь так бывает не всегда, правда? Допустим, защитный механизм расположен по адресу 403069h, что тогда?

Сначала нам необходимо определить относительный виртуальный адрес защитного механизма. Берем 403069h, вычитаем базовый адрес загрузки PE-файла (HTE показывает его в поле image base в разделе "optional header: NT fields", и в нашем случае он равен 400000h), получаем 3069h. Округляем по величине выравнивания File Alignment в меньшую сторону. Получаем 3000h. Это и есть та величина, которую необходимо записать в поле "offset" секции .tls. Тогда в защитную зону попадают все байты, расположенные между адресами 3000h и 4000h.

А если нужно проконтролировать более 1000h байт? Проще всего изменить кратность выравнивания секций (у MS Link за это отвечает ключ /ALING, например /ALING:16384 дает нам 4000h байт). Правда, и размер потребляемой памяти при этом возрастает. Но кто запрещает нам создать несколько подложных секций по 1000h байт каждая? Кончено, слишком большое количество секций обязательно вызовет у хакера подозрения, и он сможет сообразить, что к чему.

В принципе, можно создать секцию данных, разместить в ней статический массив заданного размера и отобразить поверх этого массива контролируемый код, однако тут все не так просто. Гнусный MS link и некоторые другие линкеры насильно комбинируют нестандартные секции с основной секцией данных и никак не дают обойти это ограничение. Имеются и другие проблемы, но не будет углубляться во все посторонние тонкости, а удовлетворимся тем, что есть.

Как это ломают?

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

Вернемся к нашему примеру demo.protected.exe. Загрузим программу в SoftIce и установим точку останова не на 4020A1h, а на 4010A1h. Она сработает! Хакер может обнаружить этот адрес даже не заглядывая в таблицу секций. Достаточно посмотреть, какие команды расположены в окрестностях модифицируемой ячейки, и отыскать их в дизассемблерном листинге. Они повторяются! А все потому что IDA Pro (и другие правильные дизассемблеры) эмулируют загрузку файла, что разоблачает защитный механизм с головой.

Назад на стр. 057-080-4  Содержание  Вперед на стр. 057-080-6