сделай свой Jar не декомпилированным - PullRequest
6 голосов
/ 28 мая 2009

Как я могу упаковать свое Java-приложение в исполняемый jar-файл, который не может быть декомпилирован (например, Jadclipse)?

Ответы [ 5 ]

10 голосов
/ 28 мая 2009

Вы не можете. Если JRE может запустить его, приложение может декомпилировать его.

Лучшее, на что вы можете надеяться, это сделать его очень трудным для чтения (замените все символы комбинациями 'l' и '1' и 'O' и '0', добавьте много бесполезного кода и т. Д.) , Вы будете удивлены, насколько нечитабельным вы можете создавать код, даже с помощью относительно тупого инструмента перевода. Это называется запутывание, и, хотя оно и не идеально, иногда оно адекватно.

Помните, вы не можете остановить решительного хакера не больше, чем решительного грабителя. То, что вы пытаетесь сделать, это сделать вещи очень сложными для случайного злоумышленника. Когда им дают символы O001l1ll10O, O001llll10O, OO01l1ll10O, O0Ol11ll10O и O001l1ll1OO и код, который, кажется, не приносит никакой пользы, большинство людей просто сдаются.

3 голосов
/ 28 мая 2009

Во-первых, вы не можете избежать повторной разработки вашего кода людьми. Байт-код JVM должен быть простым для выполнения, и существует несколько программ для его обратного проектирования (то же самое относится и к .NET CLR). Вы можете только сделать это все более и более трудным, чтобы поднять барьер (то есть стоимость), чтобы видеть и понимать ваш код.

Обычный способ - запутать источник с помощью какого-либо инструмента. Классы, методы и поля переименовываются по всей кодовой базе, даже с неверными идентификаторами, если вы решите, что делает код почти невозможным для понимания. У меня были хорошие результаты с JODE в прошлом. После запутывания используйте декомпилятор, чтобы увидеть, как выглядит ваш код ...

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

Вы также можете попытаться преобразовать приложение Java в некоторые EXE-файлы Windows, которые бы скрывали подсказку, что это вообще Java (в некоторой степени), или действительно компилировали в машинный код, в зависимости от ваших потребностей в функциях JVM. (Я не пробовал это.)

2 голосов
/ 29 мая 2009

GCJ - это бесплатный инструмент, который может компилироваться либо в байт-код, либо в собственный код. Имея в виду, что это как бы побеждает цель Java.

1 голос
/ 24 ноября 2015

Это не мое практическое решение, но здесь я думаю, что хорошая коллекция или ресурс и учебные пособия для того, чтобы это произошло с наивысшим уровнем удовлетворения.

Предложение с этого сайта (сообщество оракулов)

(чистый путь), обфусцируй свой код, есть много открытых и бесплатных Обфускатор инструменты, вот простой список из них: [Открытый исходный код обфускаторы лис т]. Эти инструменты делают ваш код нечитаемым (хотя все же вы можете декомпилировать это) путем изменения имен. это самый распространенный способ защитить ваш Код.

2. (Не очень чистый способ) Если у вас есть конкретная целевая платформа (например, Windows) или у вас могут быть разные версии для разных платформ, Вы можете написать сложную часть ваших алгоритмов на низком уровне язык как C (который очень трудно декомпилировать и понять) и используйте его как собственную библиотеку в вашем Java-приложении. это не чисто, потому что многие из нас используют Java для его кроссплатформенных способностей, и этот метод ослабляет эту способность.

и ниже приведена пошаговая инструкция: ProtectYourJavaCode

Наслаждайтесь! Держите ваши решения добавленными, нам нужно это больше.

1 голос
/ 04 декабря 2014

Немного поздно я знаю, но ответ - нет.

Даже если вы пишете на C и компилируете в нативный код, существуют дизассемблеры / отладчики, которые позволят людям просматривать ваш код. Конечно, отладка оптимизированного кода без символической информации - это боль, но это может быть сделано, мне приходилось делать это время от времени.

Есть шаги, которые вы можете предпринять, чтобы сделать это сложнее - например, в Windows вы можете вызвать API-интерфейс IsDebuggerPresent в цикле, чтобы увидеть, отлаживает ли кто-нибудь ваш процесс, и если да, то это сборка релиза - завершить процесс. Конечно, достаточно решительный злоумышленник может перехватить ваш вызов IsDebuggerPresent и всегда вернуть false.

Существует целый ряд техник, которые возникли: люди, которые хотят что-то защитить, и люди, которые хотят это взломать, это настоящая гонка вооружений! Как только вы пойдете по этому пути - вам придется постоянно обновлять / обновлять свою оборону, остановка не будет.

...