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

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

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

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


НЕСКОЛЬКО ЛЕТ НАЗАД, КОГДА КИБЕРВОЙНЫ КАЗАЛИСЬ ОКОНЧЕННЫМИ И ХАКЕРЫ ПОЛОМАЛИ ВСЕ И ВСЯ, ПРОГРАММИСТЫ НЕОЖИДАННО ПРИМЕНИЛИ МОЩНОЕ ОРУЖИЕ ОБФУСКАЦИИ, СОЗДАННОЕ ХАКЕРАМИ И ТЕПЕРЬ НАПРАВЛЕННОЕ ПРОТИВ НИХ ЖЕ. АДЕКВАТНЫХ МЕТОДИК ПРОТИВОСТОЯНИЯ НА СЕГОДНЯШНИЙ ДЕНЬ НЕ СУЩЕСТВУЕТ, НО ПЕРВЫЕ ШАГИ В ЭТОМ НАПРАВЛЕНИИ УЖЕ СДЕЛАНЫ

Мини-статья

[обфускацией] (от английского obfuscation — буквально «запутывание») называется совокупность методик и средств, направленных на затруднение анализа программного кода. Существуют различные типы обфускаторов: одни занимаются интерпретируемыми языками типа Perl или PHP и «корежат» исходные тексты (удаляют комментарии, дают переменным бессмысленные имена, шифруют строковые константы и т.д.), другие «перемалывают» байт-код виртуальных машин Java и .NET, что технически сделать намного труднее. Более развитые обфускаторы вламываются непосредственно в машинный код, «разбавляя» его мусорными инструкциями и выполняя целый ряд структурных (реже математических) преобразований, изменяющих программу до неузнаваемости.

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

Дизассемблеры еще не научились [удалять «мусор»] в автоматическом режиме, а проанализировать мегабайты кода вручную нереально. Нужны передовые методики реконструкции потока управления, расплавляющие «замусоренный» код и разделяющие его на «полезные» и «бесполезные» фракции. Их нет даже на уровне «теоретического понимания». Хотя кое-какие идеи на этот счет имеются (например наложение маршрута трассировки на графы зависимостей по данным), до практической реализации еще далеко.

[методы обфускации] активно используются продвинутыми упаковщиками типа Armadillo (ныне переименован в Software Passport, можно скачать его с сайта http://siliconrealms.com/armadillo.shtml), eXtreme Protector (разработчики живут на www.oreans.com/xprotector) и т.д. Большинство протекторов «запутывают» только свой собственный распаковщик, опасаясь вмешиваться в код защищаемой программы, так как это чревато неожиданным появлением глюков в самых различных местах. Какому программисту понравится такая защита? Тем не менее, обфускация процедур проверки серийного номера (ключевого файла) встречается достаточно часто. Обычно она реализуется в полуавтоматическом режиме, когда создатель защиты тем или иным образом взаимодействует с обфускатором. Например, пишет скрипт, который обфускатор транслирует в замусоренный машинный код, изображая из себя «неэффективный» компилятор.

Обфускация конкретно досаждает хакерам, препятствуя реконструкции алгоритмов и быстрому взлому защит, но эти проблемы меркнут перед ситуацией в антивирусной индустрии. Чтобы взломать программу, анализировать ее алгоритм в общем-то необязательно. Зато обнаружить зловредный код (он же malware) без этого уже не удастся!

Содержание  Вперед на стр. 066-008-2