ВЗЛОМ JAVA-АППЛЕТОВ Андрей Каролик Xakep, номер #052, стр. 052-064-5 if(i == Integer.parseInt(stringtokenizer.nextToken().trim())) // сравнение заданного и сгенерированного ключей return false; // если ключи одинаковые, то защита отключается return true; // если ключи разные, то защита срабатывает } // конец метода Снимается защита элементарно. Нужно удалить все содержимое метода isDemoVersion() и при любом обращении к этому методу передавать логическое значение false (ложь). Остальными методами ложное значение isDemoVersion() воспринимается как сигнал для отключения защиты, что тебе и требовалось :). private final boolean isDemoVersion() { return false; } При этом больше в коде ничего править не обязательно, но можно почистить от мусора, который теперь выполняться не будет в принципе. К примеру, рекламный текст, появляющийся при срабатывании защиты, определяется переменной freeText. Он только утяжеляет код, так как никогда не будет использоваться, поэтому можешь смело его почикать. Дальше ты можешь изменять исходник по своим нуждам, сколько душе угодно. Главное, не перестарайся :). После всех манипуляций опять компилируешь (Ctrl+Shift+F9), и новый фриварный(!) апплет готов. По-моему, проще не бывает, и на фига платить 30 зеленых :). ЦЕЛЬ НУМЕР ДВА Вторым я решил ломануть какой-нибудь симпатичный апплет на http://javaboutique.internet.com. Приглянулся мне Shifter (http://javaboutique.internet.com/Shifter/index.html). Это пазл, работающий по принципу игры "Кубик Рубика". То есть перетаскиваются не отдельные квадратики (как в пятнашках), а взаимно смещаются целиковые строки или столбцы. Сперва пазл кажется очень легким, но когда начинаешь собирать, то понимаешь, что все не так просто. Самое прикольное, что разбивать предварительно картинку не надо, апплет это делает сам. Впечатление портит назойливая ссылка на сайт автора, ею и займемся. В ПРОЦЕССЕ Скачиваешь бинарник, на этот раз он заархивирован в архиве Shifter.jar. Сначала с помощью NMI's Java Code Viewer разархивируешь (File -> Extract Jar Archive), а потом декомпилируешь. Получаются три файла: основной класс (Shifter.java) и два класса-обработчика манипуляций с мышкой (Shifter$MouseMotionEventHandler.java и Shifter$MouseEventHandler.java). Создаешь в JBuilder проект Shifter.jpx и в нем три класса: Shifter.java, Shifter$MouseMotionEventHandler.java и Shifter$MouseEventHandler.java, копируя в них содержимое соответствующих декомпилированных файлов. Ничего не меняя в коде, запускаешь на компиляцию (Ctrl+Shift+F9), чтобы проверить на наличие ошибок, которые могли появиться при декомпиляции. ОТЛОВ ОШИБОК ДЕКОМПИЛЯЦИИ Ошибка всего одна. В методе run() зачем-то прописываются два совершенно нелогичных и бесполезных выражения: Shifter = this и Shifter 1 = this. Удали их или закомментируй. НЕЙТРАЛИЗАЦИЯ ЗАЩИТЫ В этом примере защита демо-версии реализована в виде статической вставки ссылки на сайт автора. Покопавшись в трех классах, видим, что защита прописана в Shifter$MouseEventHandler.java в методе mousePressed() и в Shifter.java в методе paint(), разберем подробнее: |