Как я могу защитить код Java / Javafx от просмотра конечным пользователем? - PullRequest
0 голосов
/ 18 января 2019

Я работаю над проектом более двух лет для компании. Это действительно большой проект, использующий rxtx для связи с аппаратным устройством. Я использовал Java 8 и JAVAFX для пользовательского интерфейса. Сейчас оно почти закончено, и я начинаю искать, как доставить приложение для конечного пользователя, которое компания распространит среди своих клиентов.

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

Таким образом, после поиска (много) и размышлений относительно моего случая, я понял, что дать запутанный JAR не является решением. Затем я попытался сгенерировать JAR, а затем преобразовать его в EXE-файл, но все, что мне удалось, - это обернуть JAR в EXE-файл, что не мешает извлечь JAR, а затем легко увидеть весь код. Наконец, я обнаружил, что должен использовать AoT-компиляцию, такую ​​как GCJ-компилятор, для создания собственного бинарного exe-кода из моего Java-кода, но здесь я застрял, потому что после просмотра видео, чтения статей и т. Д. Мне не удалось найти четкий способ создания собственного бинарного файла. EXE.

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

1 Ответ

0 голосов
/ 19 января 2019

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

Одним из возможных решений, которое вы могли бы рассмотреть, было бы переписать код, который вы считаете наиболее чувствительным, в библиотеку C / C ++. Можно было бы скомпилировать это в файл .so / .dll / .dylib для соответствующих ОС, и это усложнило бы, не совсем невозможно, но трудно декомпилировать.

Проблема может возникнуть из-за того, что вы узнаете, как получить доступ к нативному коду из Java, так как большая часть документации не является полезной или просто отсутствует. Это будет использовать Java Native Interface (JNI), который позволяет Java взаимодействовать с собственным (скомпилированным C / C ++) кодом. Это позволило бы создать файл Jar, который фактически стал бы библиотекой Java, к которой вы могли бы обращаться в течение всего остального проекта. Однако нативный код по-прежнему необходимо загружать во время выполнения, но это не относится к изучению работы JNI. Полезная ссылка, которую я нашел для JNI: http://jnicookbook.owsiak.org/ (до тех пор, пока это функциональная ссылка).

Один из наших клиентов здесь, где я работаю, имеет проект, написанный на Java, и ему нужно было реализовать наш код, который, к сожалению, все написан на C. Поэтому нам нужен был способ доступа к этому коду C / C ++ из Java. Именно так мы решили эту проблему, не переписывая наш код на Java. Но у нас было преимущество (?) В том, что мы уже написали наш код на C.

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

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

...