Как защитить скомпилированные классы Java?

Вот один из способов сделать это ...

        var dt = new DataTable();
        dt.Columns.Add(new DataColumn("Column1", typeof(string)));
        dt.Columns.Add(new DataColumn("Column2", typeof(string)));
        dt.Columns.Add(new DataColumn("Column3", typeof(string)));

        var lines = File.ReadAllLines(@"c:\tabfile.txt");
        foreach( string line in lines )
            dt.Rows.Add(line.Split('\t'));
23
задан JasonMArcher 13 July 2015 в 02:12
поделиться

3 ответа

Во-первых, если вы ориентируетесь «только» на рынок Windows, очень легко предотвратить декомпиляцию «.class в .java»: используйте такой инструмент, как Excelsior Jet, который преобразует .jar в .exe .

Это надежно: невозможно вернуть файл .java, если вы используете Excelsior Jet (пока все люди говорят, что «невозможно предотвратить декомпиляцию .class файл "). Конечно, злоумышленник может запустить SoftIce и попытаться отследить ваш .exe , но это окажется немного сложнее, чем использование JAD для декомпиляции .class в .java , и это точно не позволит найти файл .java обратно.

Теперь, возможно, вы тоже ориентируетесь на OS X и Linux или у вас нет $$$, чтобы выкупить Excelsior Jet.

Я пишу коммерческое программное обеспечение, написанное на Java. Это программное обеспечение имеет смысл только при наличии подключения к Интернету. Следовательно, мы «защищаем» наше программное обеспечение, среди прочего, за счет того, что часть вычислений выполняется на стороне сервера: у нас есть несколько .class , которые не будут работать, если они не сгенерированы на стороне сервера, и мы отправлять их по сети (а то, что отправляется по сети, всегда разное: мы генерируем уникальные, одноразовые .class файлы на стороне сервера).

Для этого требуется подключение к Интернету, но если пользователю не нравится, как работает наше программное обеспечение, он может купить продукт худшего качества нашего конкурента;)

Декомпиляция не принесет много пользы: вам необходимо активно взламывать программное обеспечение ( т.е. воспроизвести то, что происходит на стороне сервера), иначе вы не сможете его использовать.

Мы используем нашу собственную «обфускацию строк» ​​ до Proguard. Мы также делаем инструментарий исходного кода (мы также могли бы сделать инструментирование байт-кода), где мы удаляем множество вещей из кода (например, "assert", которое мы закомментировали) и вводим некоторую случайную "обфускацию потока кода" [программное обеспечение может принимать разные пути, но дают один и тот же результат, это действительно затрудняет отслеживание программы]).

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

Итак, наш поток:

  • обфускация строки
  • обфускация случайного потока кода
  • Proguard
  • final .jar , который зависит от .class , которые имеют ( иначе) динамически генерируется на стороне сервера.

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

Конечно, легче бросить полотенце и подумать: «Я ничего не могу сделать, чтобы усложнить жизнь злоумышленнику, потому что JAD может найти обратно.java файл в любом случае " (что более чем очень спорно и явно неверно в случае, когда вы используете конвертер .class в .exe для защиты вашего .class от декомпиляции).

16
ответ дан 29 November 2019 в 02:41
поделиться

Есть несколько методов:

все подробно обсуждается в моей статье Protect Your Java Code - Through Obfuscators And Beyond

6
ответ дан 29 November 2019 в 02:41
поделиться

Обфускатор (см. http://java-source.net/open-source/obfuscators) "зашифрует" код так, что он не будет иметь никакого смысла при де-компиляции.

6
ответ дан 29 November 2019 в 02:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: