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

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

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

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

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

1 ответ

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

Одним из возможных решений, которое вы могли бы найти, было бы переписать код, который вы считаете наиболее чувствительным, в библиотеку 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.

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

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

Другие вопросы по тегам