12
March

Шифраторы байт-кода (Java Obfuscators)

Posted in: Java technologies, J2SE, Полезные программы |

Код Java-программ преобразуется в байт-код после компиляции. Естественно возможен и обратный процесс. Существует огромное количество декомпиляторов, которые могут извлечь исходный код приложения в довольно хорошем качестве. Все это ставит под угрозу интеллектуальную собственность автора программы (алгоритмов).
Шифратор (obfuscator) - это программа, которая в большей или меньшей мере изменяет байт-код (или исходный код) Java приложения.

Все шифраторы (obfuscators) классифицируются в зависимости от технологий шифрования, которые они поддерживают. Существует три основных способа шифровки.

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

Второй вид шифраторов изменяет ход выполнения программы (flow obfuscation). Чаще всего при этом “страдают” конструкции выбора (if, switch) и циклов (for, while). Байт код стараются изменить так, чтобы он не имел прямых аналогов в языке Java, что значительно усложняет работу взломщиков.

Наконец, третий вид шифраторов изменяет структуры данных (structural obfuscators). Добиться этого можно изменением принципов наследования. Например, в иерархии можно создать несколько промежуточных классов. Популярным является разбиение классов на несколько частей. Разбиение на части можно применить и для массивов. В добавок можно кодировать символы строковых констант и переменных.

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

1 Comment »

RSS feed for comments on this post. TrackBack URI



March 30, 2006 #

Но второй и третий способы сильно усложняют диагностику проблем при получении багрепорта от пользователя.

Leave a comment

XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>