Лучший обфускатор 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-кода.


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). Однако учтите, что если вы запутаете свой код, будет сложно отслеживать проблемы в ваших журналах.


6
+1 за «учтите, что если вы запутаете свой код, будет сложно отслеживать проблемы в ваших журналах». Просто когда вы подумали, что отладка достаточно сложна ...
Адам Пейнтер,

7
Хороший обфускатор, который изменяет имена и информацию о номерах строк, должен создавать журнал, с помощью которого можно отменить процесс. Таким образом, по крайней мере, трассировки стека остаются полезными для обфусцированных двоичных файлов.
Иоахим Зауэр

3
ProGuard создает такие обратные файлы для отладки. :-)
Malax



7

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


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

6

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



6

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


И еще одна альтернатива, которая также использует собственный код вместо defineClass, - это JarCrypt
Ренато

Статья о том, как взломать ClassGuard : setrst.blogspot.com/2010/04/classguard-unguarded.html . Я просто не знаю, работает ли это в последней версии.
Ренато
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.