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

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


person Xinus    schedule 29.03.2010    source источник
comment
У меня были коллеги, которые создали сильно запутанный код. Но это не входило в их намерения.   -  person Steve McLeod    schedule 29.03.2010
comment
@Mnementh: этого достаточно, чтобы сделать обратное проектирование непомерно дорогим для вашего конкретного приложения.   -  person Dmitry Leskov    schedule 08.04.2010
comment
@Robert Harvey: Не знаю, почему вы решили, что этот вопрос неконструктивен. Это связано с программированием, и, на мой взгляд, это такой же хороший вопрос, как и любые другие вопросы по программированию.   -  person Xinus    schedule 11.07.2013


Ответы (10)


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

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

person BalusC    schedule 29.03.2010
comment
@BalusC: Итак, какой инструмент вы используете для запутывания кода Java? вы запутываете свой java-код, не так ли? - person Thinhbk; 22.06.2012
comment
@Thinhbk Обфускация затрудняет получение полезных трассировок стека. - person Thorbjørn Ravn Andersen; 16.04.2015
comment
@ ThorbjørnRavnAndersen: согласен. ИМО, обфускация сделает трассировку стека практически бесполезной. В этом случае я использую некоторый трюк с сообщением журнала, который может помочь. - person Thinhbk; 17.04.2015
comment
@Thinhbk Proguard создает карту для перевода запутанных трассировок стека обратно в исходный код. В противном случае, как вы сказали, трассировка стека стала бы бесполезной (но кто все равно получает неперехваченные исключения... ;-)) - person Matthieu; 05.01.2016
comment
@Matthieu: Можно ли автоматически перевести трассировку стека в исходный код? Это было бы здорово и ново для меня. Я просто знаю, что перевод вручную может быть трудным, если кодовая база огромна. - person Thinhbk; 06.01.2016
comment
@Thinhbk кажется так - person Matthieu; 06.01.2016
comment
@Matthieu: Да, приятно знать этот полезный материал. - person Thinhbk; 06.01.2016
comment
@Matthieu Вам все еще нужны трассировки стека на случай чего-то неожиданного - пойманного или нет. - person Thorbjørn Ravn Andersen; 12.07.2017

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

person Thorbjørn Ravn Andersen    schedule 29.03.2010
comment
Сколько людей могут читать запутанный код и понимать логику? У меня много друзей-инженеров, и они не могут этого сделать. Только Джон Нэш может это сделать ;) - person kodmanyagha; 24.06.2017
comment
@kodmanyagha Если бы они были достаточно мотивированы, они бы научились этому. Это не сложно. - person Thorbjørn Ravn Andersen; 25.06.2017
comment
В математическом смысле можно работать без возможности обратного проектирования. Это то, что касается гомоморфного шифрования, но есть довольно много препятствий, которые необходимо решить, чтобы сделать его практически пригодным для компьютерного программного обеспечения, а не для SaaS. Мы движемся туда медленно. Основополагающие работы Джентри по полностью гомоморфному шифрованию и математическим головоломкам Амита Сахаи и др. сделал огромный скачок в этом направлении. Есть только один недостающий элемент (который я называю барьерной функцией), который сделал бы всю схему осуществимой. То, что невозможно сейчас, станет возможным в будущем. - person ogggre; 07.11.2019
comment
@kodmanyagha, если мотивация достаточно сильна, человек может читать и анализировать любой запутанный код. Кто-то даже написал программу, которая читает грамматик Java/Javasript и переименовывает все переменные в более читаемые имена, а затем перечитывает модифицированный исходник. Я не думаю, что обфускация действительно может защитить коды. - person Scott Chu; 20.02.2021

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

person Dmitry Leskov    schedule 08.04.2010
comment
Это то, что мне действительно нужно. Я хочу написать PHP-обфускатор для своих проектов. Логика везде одинаковая. Спасибо... - person kodmanyagha; 24.06.2017
comment
Классная и обширная статья об обфускации Java и коллекции программного обеспечения. - person m3nda; 19.11.2017

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

person andrew0007    schedule 29.03.2010
comment
+1 за то, что если вы запутаете свой код, может быть трудно отслеживать проблемы в ваших журналах. Как раз тогда, когда вы думали, что отладка достаточно сложна... - person Adam Paynter; 29.03.2010
comment
Хороший обфускатор, который изменяет имена и информацию о номерах строк, должен создавать журнал, с помощью которого можно обратить процесс вспять. Таким образом, по крайней мере, трассировка стека остается полезной для запутанных двоичных файлов. - person Joachim Sauer; 29.03.2010
comment
ProGuard создает такие обратные файлы для отладки. :-) - person Malax; 29.03.2010

Как сказано в другом месте здесь, proguard — это хорошо, но, возможно, неизвестно, что есть еще и третий — плагин party maven для этого здесь http://pyx4me.com/pyx4me-maven-plugins/proguard-maven-plugin/... Я использовал их оба вместе, и они очень хороши.

person James B    schedule 29.03.2010

Я использовал Allatori, и он отлично справился со своей задачей.

person thelost    schedule 29.03.2010

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

person Daniel Dolz    schedule 09.04.2010
comment
+1, чтобы вернуть вас к сети 0. Этот ответ не бесполезен. - person HaloWebMaster; 06.06.2013

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

person Anoop    schedule 29.03.2010

Нам гораздо больше повезло с шифрованием банок, чем с запутыванием. Мы используем Classguard.

person wfg4    schedule 29.03.2010
comment
Если вы не читали Взлом шифрования байт-кода Java (javaworld.com/javaworld/javaqa/2003-05/01-qa-0509-jcrypt.html) Владимира Рубцова, вы можете сделать это сейчас. - person Dmitry Leskov; 08.04.2010

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

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