У меня тоже было такое же исключение. Я сделал следующие изменения в файле web.xml
<init-param>
<param-name>jersey.config.server.provider.classnames</param-name>
<param-value>org.glassfish.jersey.filter.LoggingFilter;org.glassfish.jersey.moxy.json.MoxyFeature;org.glassfish.jersey.media.multipart.MultiPartFeature</param-value>
</init-param>
и изменил трикотаж с 2,7 до 2,9. Я не знаю, какое изменение этого 2 решило проблему.
Мой любимый трюк - написать простой эмулятор инструкций для малоизвестного микропроцессора.
Защита от копирования и некоторые основные функции будут скомпилированы для микропроцессора (здесь очень полезна GCC) и включены в программу как двоичный двоичный объект.
Идея заключается в том, что защита от копирования не существует в обычном коде x86 и, как таковая, не может быть разобрана. Вы также не можете удалить весь эмулятор, поскольку это приведет к удалению основных функций из программы.
Единственный шанс взломать программу - перепроектировать то, что делает эмулятор микропроцессора.
Я использовал MIPS32 для эмуляции, потому что его было так легко эмулировать (потребовалось всего 500 строк простого C-кода). Чтобы сделать вещи еще более неясными, я не использовал необработанные коды операций MIPS32. Вместо этого каждый код операции был xor'ed со своим собственным адресом.
Двоичный файл защиты от копирования был похож на мусорные данные.
Настоятельно рекомендуется! Прошло более 6 месяцев, прежде чем появилась трещина (это было для игрового проекта).
Я был членом многих сообществ RCE и имел мою справедливую долю взламывания & взламывание. С моего времени я понял, что такие неосновательные приемы обычно энергозависимы и довольно бесполезны. Большинством универсальных приемов антиотладки является конкретная ОС и не 'портативное' вообще.
В вышеупомянутом примере, Вы, по-видимому, используете встроенный ассемблерный код и naked
функция __declspec
, оба, которые не поддерживаются MSVC при компиляции на x64 архитектуре. Существуют, конечно, все еще способы реализовать вышеупомянутый прием, но кто-либо, кто инвертировал довольно долго, сможет определить и победить тот прием в течение минут.
Так обычно я предлагал бы против использования антиотладки приемов за пределами использования IsDebuggerPresent
API для обнаружения. Вместо этого я предложил бы, чтобы Вы кодировали тупик и/или виртуальную машину. Я кодировал свою собственную виртуальную машину и изменял к лучшему ее много лет теперь, и я могу честно сказать, что это было безусловно лучшее решение, которое я принял в отношении защиты моего кода до сих пор.
Выделить дочерний процесс, который присоединяется к родительскому процессу как отладчик & amp; изменяет ключевые переменные Бонусные баллы за сохранение резидентного дочернего процесса и использование операций памяти отладчика как своего рода IPC для определенных ключевых операций.
В моей системе нельзя подключить два отладчика к одному и тому же процессу.
Хорошая вещь об этом в том, что если они не попытаются подделать / ничего не сломается.
Самый современный метод путаницы, кажется, виртуальная машина.
Вы в основном принимаете некоторое участие своего объектного кода и преобразовываете его в Ваш собственный формат байт-кода. Затем Вы добавляете маленькую виртуальную машину для выполнения этого кода. Только способ правильно отладить этот код будет состоять в том, чтобы кодировать эмулятор или дизассемблер для формата инструкции Вашего VM. Конечно, необходимо думать о производительности также. Слишком много байт-кода сделает Ваш прогон программы медленнее, чем собственный код.
самые старые приемы бесполезны теперь:
, Если Вы действительно хотите кодировать решение VM сами (существуют хорошие программы для продажи), не используйте всего один формат инструкции. Сделайте это полиморфным, так, чтобы у Вас могли быть различные части кода, имеют другой формат. Таким образом, весь Ваш код не может быть взломан путем записи всего одного эмулятора/дизассемблера. Например, решение MIPS, которое предложили некоторые люди, кажется, легко повреждается, потому что формат инструкции MIPS хорошо документируется, и аналитические инструменты как IDA могут уже демонтировать код.
Список форматов инструкции, поддерживаемых IDA про дизассемблер
Я предпочел бы, чтобы люди записали программное обеспечение, которое является основательным, надежным и делает то, что оно рекламируется, чтобы сделать. То, что они также продают его за разумную цену с разумной лицензией.
я знаю, что потратил впустую слишком много времени, имея дело с поставщиками, которые усложнили лицензирование схем, которые только вызывают проблемы для клиентов и поставщиков. Это всегда - моя рекомендация избежать тех поставщиков. Работа в атомной электростанции, мы вынуждены использовать определенные продукты поставщиков и таким образом вынуждены должными быть иметь дело с их лицензированием схем. Мне жаль, что не было способа возвратить время, когда я лично потратил впустую контакт с их неудачными попытками дать нам, работа лицензировала продукт. На мелочь походит спрашивать, но это, кажется, трудная вещь для людей, которые становятся слишком коварными для их собственной пользы.
Я второй предложение виртуальной машины. Я реализовал симулятор MIPS I, который (теперь) может выполнять двоичные файлы, сгенерированные с помощью mipsel-elf-gcc. Добавьте к этому возможности шифрования кода / данных (AES или с любым другим алгоритмом по вашему выбору), возможность имитации (так что вы можете иметь вложенные симуляторы), и у вас будет довольно хороший обфускатор кода.
Приятной особенностью выбора MIPS I является то, что 1) его легко реализовать, 2) я могу писать код на C, отлаживать его на своем рабочем столе и просто кросс-компилировать его для MIPS, когда это будет сделано. Нет необходимости отлаживать пользовательские коды операций или вручную писать код для пользовательской виртуальной машины.
Расчетные прыжки в середине легитимного вида, но на самом деле скрывающие настоящие инструкции - мои любимые. В любом случае, их довольно легко обнаружить людям, но автоматизированные инструменты часто портят это.
Кроме того, замена обратного адреса в стеке - хорошая трата времени.
Используя nop для удаления блока через отладчик является полезным приемом. Конечно, откладывание кода намного более трудно!!!