Есть ли способ компиляции, чтобы скрыть исходный код? - PullRequest
1 голос
/ 01 марта 2012

Использование Play или Grails или любой другой платформы JVM;

Есть ли способ (или способ) полной компиляции сгенерированных файлов war / jar, чтобы исходный код можно было скрыть без возможности декомпиляции?

Или даже после компиляции можно ли легко декомпилировать и получать строки и классы? например соединение дб и др.

Спасибо.

Ответы [ 4 ]

7 голосов
/ 01 марта 2012

Нет, вы не можете скомпилировать что-нибудь без возможности декомпиляции *1003*. Тем не менее, вы можете сделать некоторые вещи, чтобы сделать процесс более дорогостоящим.

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

Подпишите и опечатайте ваши JAR-файлы. Это не позволяет людям добавлять какие-либо элементы в ваши JAR-файлы и не позволяет людям заменять части вашего кода (чтобы лучше понять операционную программу).

Рассмотрим обфускатор имени класса / метода. Это переименует ваши классы и имена методов в эквивалентную структуру, которая содержит маленькие имена, такие как «a.a (..)» вместо «Client.connect (...)». Это усложняет чтение кода другими людьми (в этом случае другие включают вас самих, поэтому, если вы собираетесь отлаживать, это увеличивает ваши затраты на поддержку кода). О, и это нарушает любое отражение, поэтому вы должны предусмотреть обходные пути и исправления для отражения.

Если вы предоставляете какой-либо достойный способ ведения журнала, вам также необходимо запутать ведение журнала, в противном случае нужно только прочитать сообщения журнала, отправленные классом, чтобы выяснить, что класс "h" - это DatabaseConnection, класс "k" - «Пользовательский» объект данных и т. Д.

Встроенные строки в ваших классах всегда можно извлечь. Поэтому, если вы хотите защитить их, вы должны встроить «зашифрованные» строки и «расшифровать» их перед использованием. Это приводит к перегрузке ЦП, и как только известна «дескремблирующая» маршрутизация, можно обойти весь процесс.

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

Часто хочется защитить возможность решения проблемы, а не исходный код. Помните об этом, предоставляя что-то, что работает, часто копирование уже скомпилированных элементов достаточно, чтобы нарушить мышление «этот код - мой». Если вы действительно хотите контролировать свой код, не выпускайте его, настройте сервер и предложите программное решение «в качестве услуги» на своем собственном оборудовании.

2 голосов
/ 01 марта 2012

Возможно, вы должны увидеть это и это

1 голос
/ 01 марта 2012

То, что вы ищете, называется обфускацией. Есть несколько популярных обфускаторов байт-кода для Java.

0 голосов
/ 01 марта 2012

Сделайте быстрый поиск графлей или обфускаторов Groovy кода, и это должно привести к куче результатов.После этого довольно легко декомпилировать, если вы знаете, что делаете.Там нет надежного пути.

...