|
ЗАЩИТА JAVA-АППЛЕТОВ Андрей Каролик Xakep, номер #053, стр. 053-066-1 (andrusha@sl.ru) Практическое пособие с картинками ;) В предыдущей статье я наглядно продемонстрировал, как непринужденно поиметь любой вражеский ява-апплет. Вместо того чтобы платить незнакомому дяде за чистый (без защиты) исходник, ты с помощью подручных средств (к примеру, NMI's Java Code Viewer) декомпилируешь байт-код и выковыриваешь защиту ручками. Потом компилируешь обратно и используешь в свое удовольствие. Все довольно просто, быстро и бесплатно. Возникает логичный вопрос: получается, что самый последний ламер, скачав декомпилятор из инета, сможет без труда поломать и твой апплет, который по-своему уникален и на который ты убил кучу свободного времени? Да, это, конечно, так, но при желании ты можешь свести чужие попытки взлома на нет. Для этого тебе понадобится обфускатор (obfuscator). Это не ругательное слово :). Что это такое, где надыбать и как этим пользоваться, я тебе сейчас расскажу. КТО ТАКИЕ ОБФУСКАТОРЫ? Java получила довольно широкое распространение, апплеты - уже не редкость в инете. При этом исходный код транслируется не в машинный, а в язык виртуальной машины Java (JVM). Это дает определенные преимущества: независимость от архитектуры (переносимость), динамическая компоновка и небольшой размер получаемого байт-кода. Но есть и другая сторона медали: байт-код несет в себе достаточно информации, с помощью которой получить исходник на языке Java не представляет большого труда. Для этого существуют различные декомпиляторы, делающие программы на Java практически беззащитными перед желающими заглянуть поглубже. Тут и приходят на помощь обфускаторы - программы для защиты байт-кода от взлома. Само значение "obfuscate" дословно с пингвинского переводится как запутывать, озадачивать, сбивать с толку, ставить в тупик. А под обфускацией понимается преобразование кода с целью максимально затруднить его анализ и модификацию. Суть работы любого обфускатора апплетов - с помощью определенного алгоритма внести в байт-код изменения, значительно затрудняющие корректную декомпиляцию, сохранив при этом работоспособность самой программы. После декомпиляции байт-кода с защитой будет проще застрелиться, чем разобраться в получившихся "исходниках" :). РАЗНОВИДНОСТИ ЗАЩИТЫ Сколько обфускаторов - столько и алгоритмов защиты. Но все их можно условно разделить на три категории по способу модификации байт-кода: изменение структуры программы, изменение потока управления и изменение структуры данных. Наиболее эффективны изменение потока управления и изменение структуры данных, особенно если в качестве защиты используется тандем этих алгоритмов. ЗАЩИТА: ИЗМЕНЕНИЕ СТРУКТУРЫ ПРОГРАММЫ Это самая распространенная и относительно простая по сути защита, которую реализуют все без исключения обфускаторы. Удаляется отладочная информация (ее рожает отладчик при компиляции) и комментарии, а исходные имена методов и переменных заменяются бессмысленной (случайной) короткой последовательностью символов. Это делает код менее информативным. Кроме того, в результате чистки размер байт-кода уменьшается в 1,5-2 раза, поэтому такая обфускация часто используется и как один из способов оптимизации кода. |