Создание Java-программ без обратной разработки - PullRequest
4 голосов
/ 29 сентября 2008

Есть ли способ развернуть Java-программу в формате, который не подлежит обратному проектированию?

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

Запутывание исходного кода не считается ... оно усложняет понимание кода, но не скрывает его.

Смежный вопрос: Как заблокировать скомпилированные классы Java для предотвращения декомпиляции?


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

Меня беспокоит, есть ли в коде какая-либо информация, касающаяся удаленного доступа. Существует хост, к которому приложение подключается, используя идентификатор пользователя и пароль, предоставленные пользователем. Есть ли способ скрыть адрес хоста от пользователя, если этот адрес находится внутри исходного кода?

Ответы [ 14 ]

1 голос
/ 29 сентября 2008

Это не может быть сделано.

Все, что может быть скомпилировано, может быть декомпилировано. Самое лучшее, что вы можете сделать - это запутать его до чертиков.

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

0 голосов
/ 03 декабря 2008

Заботясь о сокрытии кода, я все равно запускаю ProGuard .

0 голосов
/ 30 сентября 2008

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

0 голосов
/ 30 сентября 2008

Что-либо интерпретируется в какой-то момент, это должно быть обработано "в открытом виде". Строка будет отображаться как день после запуска кода через JAD. Вы можете развернуть ключ шифрования в своем приложении или сделать базовый шифр Ceasar для шифрования информации о подключении к хосту и расшифровки во время выполнения ...

Но в какой-то момент во время обработки информация о подключении к хосту должна быть в открытом виде, чтобы ваше приложение могло подключиться к хосту ...

Так что вы можете статически скрыть это, но вы не можете скрыть это во время выполнения, если они запускают отладчик

...