Защита Java от обратного проектирования с использованием промышленного шифрования - PullRequest
6 голосов
/ 21 марта 2012

Цель:

Защита моего Java-приложения от обратного проектирования.

Идея:

  1. разделитьпрограмма на две половины (загрузчик и программа)
  2. загрузчик будет обычным jar
  3. программа будет зашифрованным файлом jar (bouncycastle, AES?)
  4. загрузчик запрашивает защищенный сервер(https) для ключа для декодирования программы
  5. загрузчик затем декодирует программу и загружает ее классы

Вопросы:

Будет номер 5возможно ли это?
Кто-нибудь здесь делал это?
Знаете ли вы, какая библиотека уже доступна?
Можете ли вы выявить основные подводные камни / вы сделали бы это по-другому?

Дополнительно

Я знаю, что невозможно полностью предотвратить обратный инжиниринг кода.
Я просто пытаюсь сделать его сложнее и более прослеживаемым.

1 Ответ

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

Это очень возможно, используя Class Loaders.Но все равно очень легко декодировать вашу программу.Все, что нужно сделать, это изменить ваш загрузчик, чтобы записать все классы на диск, прежде чем он загрузит их в память с вашим пользовательским ClassLoader.

Обновление

Если загрузчик - это то, что могут выполнять ваши пользователи, то мне просто нужно декомпилировать и заменить файл JAR загрузчика, чтобы выгрузить классы на диск.Мало того, что я уверен, что должно быть что-то, что может взять дамп памяти JVM и вывести весь загруженный байт-код.

Если загрузчик находится на заблокированной машине, на которой пользователи не могут получить доступ, тоКаков вариант использования, который вы пытаетесь решить?

"Решения" этих проблем:

  1. Используйте усовершенствованный Обфускатор, который предназначен для взлома декомпиляторов.
  2. Запретить доступ к самим файлам JAR.Либо через ACL на компьютере, либо с помощью удаленного сервера для выполнения кода, который вы хотите защитить.По сути, так работают веб-приложения.Может быть значительное количество IP-адресов или обработки, которые выполняет Stackoverflow, но у нас никогда не будет доступа к внутренней обработке по результатам вывода пользовательского опыта.
...