Кращий обфускатор Java? [зачинено]


107

Я розробляю програмне забезпечення для безпеки і хочу придушити свій Java-код, тому інженеру для зворотного зв'язку стане неможливо. Який найнадійніший java obfuscator?


10
@Xinus "стати неможливим змінити інженера" ​​- навряд чи, найкращі спробували і не вдалося
мураха

212
У мене були деякі колеги, які створили якийсь сильно затуманений код. Але це був не їхній намір.
Стів Маклеод

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
Не можна уникнути зворотної інженерії.
Менмент

11
@Mnementh: досить зробити зворотну інженерію надмірно дорогою для конкретного додатка.
Дмитро Лесков

Відповіді:


99

По-перше, вам дійсно потрібно пам’ятати, що ніколи неможливо щось перетворити на інженер. Все рубиться. Розумний розробник, що використовує смарт-IDE, вже може отримати досить далеко.

Ну, ви можете знайти тут список. ProGuard досить непоганий. Я сам це використовував, але лише для "мінімізації" Java-коду.


1
@BalusC: Отже, який інструмент ви використовуєте для придушення коду Java? ви примушуєте код Java, чи не так?
Thinhbk

@Thinhbk Obfuscation ускладнює отримання корисних слідів стека.
Thorbjørn Ravn Andersen

@ ThorbjørnRavnAndersen: Погоджуюсь. IMO, обфускування зробить сліди стека в основному марними. У такому випадку я використовую деякий трюк з журналом msg, який може допомогти.
Thinhbk

2
@Thinhbk Proguard створює карту для перекладу затхлих стеків стека назад у вихідний код. Інакше, як ви сказали, сліди стека стають марними (але хто все-таки отримує незвичні винятки ... ;-))
Матьє

@Matthieu: Чи можна автоматично перевести стек стека, підкріплений до вихідного коду? Було б чудово, і нове для мене. Я просто знаю, що перекласти назад вручну може бути складно, якщо база коду величезна.
Thinhbk

33

Якщо комп'ютер може керувати ним, людина, що має належну мотивацію, може реінжинірирувати його.


3
Скільки людей можуть прочитати заплутаний код і зрозуміти логіку? У мене є багато друга інженера, і вони не можуть цього зробити. Це може зробити тільки Джон Неш;)
kodmanyagha

5
@kodmanyagha Якби вони були досить мотивовані, вони б це навчилися. Це не важко.
Thorbjørn Ravn Andersen

1
У математичному сенсі можна запустити без способу його реверсувати. Саме це стосується гомоморфного шифрування, але існує досить багато перешкод, які необхідно вирішити, щоб зробити його практично корисним для комп'ютерного програмного забезпечення на відміну від SaaS. Ми рухаємось там повільно. Семінарські твори шляхти про повністю гомоморфне шифрування та "математичні головоломки" Аміта Сахая та ін. зробив величезний стрибок у цьому напрямку. Є лише один відсутній елемент (який я називаю "бар'єрною функцією"), який би зробив усю схему здійсненною. Те, що зараз неможливо, буде можливим і в майбутньому.
ogggre

30

Перегляньте мою статтю Захист коду Java - Через Obfuscators And Beyond [Архівовано] для обговорення обфускування порівняно з трьома іншими способами, як зробити реверсивну інженерію ваших додатків дорожчою, а також колекцію посилань на інструменти та матеріали для подальшого читання.


1
Це те, що мені насправді потрібно. Хочу написати PHP-обфускатор для своїх проектів. Логіка скрізь однакова. Дякую ...
kodmanyagha

1
Класна та обширна стаття про обфускування Java та колекція програмного забезпечення.
м3нда

15

Я думаю, що Proguard - найкращий. Можна також інтегрувати його зі своїм IDE (наприклад, NetBeans). Однак врахуйте, що якщо ви придушите свій код, це може бути важко відслідковувати проблеми у ваших журналах.


6
+1 для "вважайте, що якщо ви придушите свій код, відстежити проблеми у своїх журналах може бути важко". Тільки коли ви думали, що налагодження досить важке ...
Адам Пейнтер

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

3
ProGuard створює такі зворотні файли для налагодження. :-)
Малакс



7

Це правда, що завжди можна змінити інженеру якийсь код, так само як неможливо захистити будинок, щоб ніхто не міг його вкрасти. Однак це не заважає мені зачинити двері. Насправді я не в світі java, я використовую BitHelmet для .net.


7
+1, щоб повернути вас до мережі 0. Ця відповідь не є корисною.
HaloWebMaster

6

Раніше я працював з Klassmaster в своїй попередній компанії, і вона працює дуже добре і може інтегрувати досить добре із системами побудови (підтримка Maven - відмінна). Але це не безкоштовно.


6

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


7
Якщо ви ще не прочитали " Злом шифрування Java-байт-коду" ( javaworld.com/javaworld/javaqa/2003-05/01-qa-0509-jcrypt.html ) Володимира Рубцова, можливо, ви захочете це зробити зараз.
Дмитро Лесков

6

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


І ще одна альтернатива, яка також використовує власний код замість defineClass - це JarCrypt
Renato

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