2008-09-29 4 views
4

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

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

Обфускация исходного кода не считается ... это затрудняет понимание кода, но не скрывает его.

С этим связан вопрос How to lock compiled Java classes to prevent decompilation?


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

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

+0

Уже здесь: Это уже задано здесь: http://stackoverflow.com/questions/49379/how-to-lock-compiled-java-classes-to-prevent-decompilation – Craig 2008-09-29 19:01:34

+0

Почему это важно для пользователь не знает службу базы данных работает на IP-адрес, к которому вы подключаетесь? – user359996 2011-02-16 18:22:05

ответ

11

Вы можете сфотографировать свой файл JAR с помощью YGuard. Он не запутывает ваш исходный код, но скомпилированные классы, поэтому нет проблем с сохранением кода позже.

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

+4

Он сказал, что обфускация исходного кода, я говорю ему, чтобы он запутывал возникающие классы jar, что не имеет никакого отношения к исходному коду. – albertein 2008-09-29 18:12:38

+0

Действительно, предположительно бинарная обфускация разрешена. Если это не так, то на самом деле возникает вопрос: «Как я запутываю свой код? Ps, я не могу использовать обфускатор», и это не имеет большого смысла. Двоичная обфускация не идеальна, но ее так хорошо, как вы, вероятно, получите. – jsight 2008-09-29 18:17:40

+0

Я думаю, что он имел в виду обфускацию генерируемого байт-кода, но он должен отредактировать, чтобы уточнить. Obfuscated bytecode все еще может быть обратным, но не в хорошем формате. – JeeBee 2008-09-29 18:18:23

2

Я подмывает спросить, почему вы хотите сделать это, но я оставлю это в покое ...

проблема, которую я вижу в том, что JVM, как CLR, должен быть в состоянии чтобы проиндексировать ваш код, чтобы выполнить компиляцию и запуск JIT. Вы можете сделать его более «сложным», но учитывая, что спецификация для байт-кода довольно хорошо документирована и существует на гораздо более высоком уровне, чем что-то вроде спецификации ассемблера x86, маловероятно, что вы можете «скрыть» поток процессов, поскольку он получил чтобы программа работала в первую очередь.

7

Вы пишете на языке, который имеет интроспекцию как часть основного языка. Он генерирует файлы .class, чьи спецификации широко известны (таким образом, другие производители могут создавать чистые комнаты компиляторов и интерпретаторов Java).

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

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

8

Если вы знаете, на каких платформах вы нацеливаетесь, получите что-то, что скомпилирует вашу Java в собственный код, например Excelsior JET или GCJ.

Короче говоря, вы никогда не сможете скрыть исходный код, так как пользователь всегда имеет ваш байт-код и может Jad.

1

Нельзя делать.

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

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

15

Короткий ответ: «Нет, его нет».

Обратное проектирование - это процесс, который не подразумевает просмотр кода вообще. Это в основном пытается понять основные механизмы, а затем имитировать их. Например, вот как выглядит JScript из MS-лабораторий, копируя поведение JavaScript Netscape, не имея доступа к коду. Копия была настолько совершенна, что даже ошибки были скопированы.

3

Не использовать интерпретируемый язык? Что вы пытаетесь защитить в любом случае? Если это достаточно ценно, все может быть реконструировано. Шансы на то, что кто-то достаточно заботится о том, чтобы перепроектировать большинство проектов, минимален. Обфускация обеспечивает как минимум минимальное препятствие.

Убедитесь, что ваш intellectual property (IP) защищен с помощью других механизмов. В частности, для кода безопасности важно, чтобы люди могли проверять реализации, чтобы обеспечить безопасность в алгоритме, а не в источнике.

1

Даже если вы скомпилируете код на родной машинный язык, есть всевозможные программы, которые позволяют по существу декомпилировать его на язык ассемблера и следить за процессом (OlyDbg, IDA Pro).

1

Внесите его в веб-сервис. Тогда вы единственный, кто может видеть исходный код.

0

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

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

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

0

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

1

Это невозможно. Это не проблема Java. Любой язык, который может быть скомпилирован, может быть декомпилирован для Java, это просто проще.

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

0

Имея опасения по поводу сокрытия кода, я все равно запустил ProGuard.

0

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

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

При этом даже ваш код клиента декомпилируется. Вы ничего не теряете.

Но это наверняка снизит производительность и удобство для пользователя.

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

Смежные вопросы