Начнем с разделения
обфускатор и
защита байткода
-
обфускатор (типа yGuard) "путает" код. Т.е. было
Код:
public void f() {
_a = 10;
}
Стало
Код:
public void f() {
a = new F_Stub1().f_99().f_44();
a+= new F_Stub2().k_$aaa().k_ww();
}
Минусы налицо - снижение производительности, слабый thread-safe, сложности с диагностикой ошибок на конечном релизе.
Типа у вас вскочил NPE в методе s_$aa012q43 класса QClassQ123. Офигенно понятно
Тут как ни странно, все обфускаторы примерно на одном уровне.
-
защита байткода Сам код не меняется. Просто содержимое class-файла шифруется, выносится в другие места, вообще исполнение на сервере идет и т.д.
Тут софта мало, бесплатного не то что бы практически нет, а вообще нет.
И опять же, тут вступает критерий надежности.
Поясню. Разработанный мной CatsByteGuard имеет
приемлимую надежность. Т.е. для его обхода требуется очень хорошее знание JVM изнутри.
Есть решения с отличной криптостойкостью, они вообще не передают байткод клиенту, а исполняют все по RMI/CORBA. Т.е. у клиента - скелетоны, а серванты с кодом - на сервере разработчика.