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

ОБФУСКАЦИЯ И ЕЕ ПРЕОДОЛЕНИЕ

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

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


Правда, есть одно «но». Компиляторы оптимизируют обращения к памяти с большой осторожностью, поэтому «ложные» расшифровщики не будут оптимизированы компилятором, несмотря на их очевидную «нулевую эффективность». Ты должен выполнить эту часть работы самостоятельно или же… просто смириться с тем, что из листинга вычищен не весь мусор.

[за основу] лучше всего взять компилятор gcc, поскольку его исходные тексты открыты. Разумеется, просто взять и «оптимизировать» протокол трассера не получится — он «написан» на языке ассемблера. Можно написать сравнительно простой транслятор, превращающий дизассемблерный протокол трассера в программу на С (и тогда можно будет оптимизировать ее любым компилятором, а не только gcc), но лучше оттранслировать протокол трассера в промежуточный язык gcc (описанный в документации), пропустив его через «гнутый» оптимизатор. В этом случае получаешь возможность сообщить оптимизатору некоторую дополнительную информацию о структуре программы, выловленную трассером. Эффективность «чистки» кода от этого только повыситься. Короче говоря, трассер (и программы-фильтры) будет работать в связке с оптимизатором.

Там уже и до метадо-декомпилятора недалеко, тем более что работы в этом направлении ведутся не только в хакерских, но и «академических» кругах. Так что анализ «запутанного» кода — не такая уж сложная задача.

Кстати, процедуры, обработанные обфускатором, значительно отличаются от всех остальных и могут быть найдены простым статистическим анализом процентного содержания различных машинных команд. У «запутанных» процедур оно будет уж очень специфичным. Такие процедуры, как правило, до неприличия длинны. Логично, что если код процедуры запутан кем-то, то не просто так. Здесь явно прячется защитный механизм! Процедура проверки регистрационного номера или что-то типа того. Обфускация в этом случае идет только на пользу хакеру.

[существуют различные способы] анализа алгоритмов работы устройств, «схема» которых недоступна. «Запутанную» программу можно рассматривать как «черный ящик» со входом и выходом, абстрагируясь от машинного кода и выполняя анализ на гораздо более высоком уровне.

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

Назад на стр. 066-008-6  Содержание  Вперед на стр. 066-008-8