Это хороший вопрос. Прочитав ответы, я думаю, что BitDrink на самом деле достиг этого, заключался в следующем: мы знаем, что функция isRegistered()
просто взломать. С пониманием того, что любая система защиты в конечном итоге будет взломана, каковы некоторые стратегии написания функции, которую сложнее взломать, чем функция isRegistered
, которая возвращает логическое значение?
По сути, любая система защиты от копирования в конечном итоге будет выглядеть примерно так:
if (program is registered)
let the program continue
else
nagging message
end
Любой хакер с копией GDB в конечном итоге найдет эту первую строку и напишет крошечный патч, чтобы удалить его. Большинство систем защиты от копирования сосредотачиваются на безопасности через неясность, то есть затрудняют поиск этой линии. Вы также можете сделать эту систему более надежной, подписав бинарный файл и проверив подпись, но вы просто добавите еще один обруч, через который хакеры могут прыгать. В конечном итоге они найдут ваш открытый ключ и заменят его своим открытым ключом, чтобы заменить вашу подпись. Однако я считаю, что это значительно замедлит их. Leopard предлагает утилиту для подписи кода, но я не знаю, можно ли ее использовать для предотвращения запуска неправильно подписанных приложений.
Идеального решения этой проблемы не существует, но нужно помнить две основные вещи:
- Ваша система регистрации будет сломана. Это абсолютно невозможно.
- ваша система регенерации является барьером между пользователем и вашей программой. Вы должны оптимизировать работу (надеюсь, большинство из них) законных пользователей и сделать это как можно проще.