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

Количество задержки, добавленное LAME в FFmpeg, равно

avctx->initial_padding = lame_get_encoder_delay(s->gfp) + 528 + 1;

Из FAQ проекта LAME:

2. Почему LAME добавляет тишину к началу каждой песни?

ЗАДЕРЖКА ДЕКОДЕРА НА НАЧАЛО ФАЙЛА:

Все декодеры Я протестировал введение задержки 528 образцов. То есть, после декодирования mp3-файла, на выходе будет записано 528 отсчетов с 0. Это связано с тем, что стандартные подпрограммы MDCT / filterbank, используемые ИСО, имеют задержку выборки 528. Можно было бы написать процедуру MDCT / filterbank с задержкой выборки 0 (см. Описание подпрограммы MDCT / filterbank Takehiro, используемой в кодировке LAME ниже), но я не знаю, что кто-то это сделал. Кроме того, из-за перекрытого характера кадров MDCT первая половина первой гранулы (1 гранула = 576 выборок) не имеет предыдущего кадра для перекрытия, что приводит к затуханию первых N выборок. Значение N зависит от типа окна. Для «STOP_TYPE» и «SHORT_TYPE», N = 96, а для «START_TYPE» и «NORMAL_TYPE» - N = 288. Первый кадр, созданный LAME 3.56 и выше, всегда будет иметь STOP_TYPE или SHORT_TYPE.

ЗАДЕРЖКА ENCODER НА НАЧАЛЕ ФАЙЛА:

Кодировщики на основе ISO (BladeEnc, 8hz-mp3 и т. Д.) используйте процедуру MDCT / filterbank, аналогичную той, которая используется в декодировании, и, следовательно, также вводит собственную задержку выборки 528. WAV-файл закодирован & amp; (1056 выборок будут добавлены к началу).

blockquote>

Расхождение в соответствии с часто задаваемыми вопросами не такое же, как в вашем выпуске, возможно, из-за технических нюансов о котором я не знаю, но это не ошибка.

89
задан Peter Mortensen 27 November 2011 в 09:53
поделиться

7 ответов

Часть более усовершенствованного Байт-кода Java obfuscators делает намного больше, чем просто искажение имени класса. Zelix KlassMaster, например, может также скремблировать Ваш поток кода способом, который делает его действительно трудно для следования и работы как превосходный оптимизатор кода...

Также многие obfuscators также в состоянии скремблировать Ваши строковые константы и удалить неиспользованный код.

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

Треть (и возможно предложение самой сильной защиты) должна использовать собственный компонент загодя компиляторы как GCC или СТРУЯ Excelsior , например, которые компилируют Ваш код Java непосредственно в платформу определенный собственный двоичный файл.

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

93
ответ дан Peter Mortensen 24 November 2019 в 07:19
поделиться

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

16
ответ дан Erlend Halvorsen 24 November 2019 в 07:19
поделиться

Правовая оговорка: Я не специалист по безопасности.

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

, Возможно, асимметричные ключи могли работать:

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

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

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

12
ответ дан Peter Mortensen 24 November 2019 в 07:19
поделиться

Неважно, что Вы делаете, это может 'декомпилироваться'. Heck, можно просто демонтировать его. Или посмотрите на дамп памяти для нахождения констант. Вы видите, компьютер должен знать их, таким образом, Ваш код должен будет также.

, Что сделать об этом?

Попытка не поставить ключ как hardcoded константу в Вашем коде: Сохраните его как установку в расчете на пользователя. Сделайте пользователя ответственным за заботу о том ключе.

11
ответ дан Daren Thomas 24 November 2019 в 07:19
поделиться

@jatanp: или еще лучше, они могут декомпилировать, удалить код лицензирования и перекомпилировать. С Java я действительно не думаю, что существует надлежащее, защищенное от взлома решение этой проблемы. Даже злой небольшой аппаратный ключ не мог предотвратить это с Java.

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

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

5
ответ дан marcospereira 24 November 2019 в 07:19
поделиться

При поиске решения для лицензирования можно проверить TrueLicense API. Это основано на использовании асимметричных ключей. Однако это не означает, что Ваше приложение не может быть взломано. Каждое приложение может быть взломано с достаточным усилием. Что действительно важный, как , единица короткая тонны ответила , выяснив, как надежная защита Вам нужно.

3
ответ дан Community 24 November 2019 в 07:19
поделиться

Я не думаю, там существует любой эффективный офлайновый антипиратский метод. Промышленность видеоигры попыталась найти, что много раз и их программы всегда взламывался. Единственное решение состоит в том, что программа должна быть запущена онлайн соединенная с Вашими серверами, так, чтобы можно было проверить lincense ключ, и что существует только один активный connecion лицензиатом за один раз. Это - то, как World of Warcraft или Diablo работает. Даже жесткий существуют частные серверы, разработанные для них для обхода безопасности.

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

2
ответ дан Community 24 November 2019 в 07:19
поделиться
Другие вопросы по тегам:

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