Лучший обфускатор Java? [закрыто]

107

Я разрабатываю программное обеспечение для обеспечения безопасности и хочу скрыть свой Java-код, чтобы его невозможно было реконструировать. Какой самый надежный обфускатор java?

Ксинус
источник
10
@Xinus «невозможно перепроектировать» - вряд ли, лучше всего попробовали и потерпели неудачу
ant
212
У меня были коллеги, которые создали сильно запутанный код. Но это не было их намерением.
Steve McLeod,
7
It was once said that if you had an infinate amount of monkeys on typewiters and an infinate amount of time, they would write all of the great works of Shakespeare.- Дилберт
муравей
7
Избежать реверс-инжиниринга невозможно.
Mnementh
11
@Mnementh: этого достаточно, чтобы сделать реверс-инжиниринг непомерно дорогим для вашего конкретного приложения.
Дмитрий Лесков

Ответы:

99

Во- первых, вы действительно должны иметь в виду , что это никогда невозможно перепроектировать что - то. Все можно взломать. Умный разработчик, использующий умную IDE, уже может зайти достаточно далеко.

Что ж, вы можете найти здесь список. ProGuard довольно хорош. Я сам использовал его, но только для «минимизации» Java-кода.

BalusC
источник
1
@BalusC: Итак, какой инструмент вы используете для обфускации кода Java? вы запутываете свой Java-код, не так ли?
Thinhbk
@Thinhbk Обфускация затрудняет получение полезных трассировок стека.
Торбьёрн Равн Андерсен
@ ThorbjørnRavnAndersen: Согласен. ИМО, обфускация сделает трассировку стека в основном бесполезной. В этом случае я использую какой-то трюк с сообщением журнала, который может помочь.
Thinhbk
2
@Thinhbk Proguard генерирует карту для перевода запутанных трассировок стека обратно в исходный код. В противном случае, как вы сказали, трассировки стека станут бесполезными (но кто все равно получит неперехваченные исключения ... ;-))
Матье
@Matthieu: Можно ли автоматически преобразовать трассировку стека в исходный код? Это было бы здорово и ново для меня. Я просто знаю, что переводить обратно вручную может быть сложно, если база кода огромна.
Thinhbk 06
33

Если компьютер может запустить его, человек, имеющий соответствующую мотивацию, сможет его перепроектировать.

Торбьёрн Равн Андерсен
источник
3
Сколько людей могут прочитать запутанный код и понять логику? У меня много друзей-инженеров, и они не могут этого сделать. Только Джон Нэш может это сделать;)
кодманьяга
5
@kodmanyagha Если бы они были достаточно мотивированы, они бы этому научились. Это не сложно.
Thorbjørn Ravn Andersen
1
С математической точки зрения, можно запускать без возможности реконструирования. Это и есть гомоморфное шифрование, но есть немало препятствий, которые необходимо решить, чтобы сделать его практически применимым в компьютерном программном обеспечении в отличие от SaaS. Мы продвигаемся туда медленно. Основные работы Джентри о полностью гомоморфном шифровании и «математических головоломках» Амита Сахаи и др. сделал огромный скачок в этом направлении. Есть только один недостающий элемент (который я называю «барьерной функцией»), который сделает всю схему осуществимой. То, что невозможно сейчас, станет возможным в будущем.
ogggre
30

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

Дмитрий Лесков
источник
1
Это то, что мне действительно нужно. Я хочу написать обфускатор PHP для своих проектов. Логика везде одинакова. Спасибо ...
kodmanyagha
1
Классная и обширная статья об обфускации Java и сборе программного обеспечения.
m3nda
15

Считаю, что Proguard - лучший. Также возможно интегрировать его с вашей IDE (например, NetBeans). Однако учтите, что если вы запутаете свой код, будет сложно отслеживать проблемы в ваших журналах.

andrew0007
источник
6
+1 за «учтите, что если вы запутаете свой код, будет сложно отслеживать проблемы в ваших журналах». Просто когда вы подумали, что отладка достаточно сложна ...
Адам Пейнтер,
7
Хороший обфускатор, который изменяет имена и информацию о номерах строк, должен создавать журнал, с помощью которого можно отменить процесс. Таким образом, по крайней мере, трассировки стека остаются полезными для обфусцированных двоичных файлов.
Иоахим Зауэр
3
ProGuard создает такие обратные файлы для отладки. :-)
Malax
7

Это правда, что всегда можно перепроектировать какой-то код, так же как невозможно защитить дом таким образом, чтобы никто не мог украсть из него. Но это не мешает мне запереть дверь. На самом деле я не в мире java, я использую BitHelmet для .net.

Даниэль Дольц
источник
7
+1, чтобы вернуть вас в сеть 0. Этот ответ не лишен помощи.
HaloWebMaster 05
6

Раньше я работал с Klassmaster в моей предыдущей компании, и он работает очень хорошо и может довольно хорошо интегрироваться с системами сборки (поддержка maven отличная). Но это не бесплатно.

Anoop
источник
6

Я не знаю точно, безопасно ли это решение, но о решении ClassGuard интересно прочитать статью и комментарий по адресу: http://www.javaworld.com/community/?q=node/1604#comment -12296

Ренато
источник
И еще одна альтернатива, которая также использует собственный код вместо defineClass, - это JarCrypt
Ренато
Статья о том, как взломать ClassGuard : setrst.blogspot.com/2010/04/classguard-unguarded.html . Я просто не знаю, работает ли это в последней версии.
Ренато