Перенос всей логики в ключ
Здравствуйте!
Есть программа. Точнее ActiveX dll. Работает с устройствами терминала оплаты. К этой dll цепляется графический интерфейс на .NET. Прочитал всю документацию ... пребываю в трансе ... Ключи, криптография ...
Так вот - этот ActiveX после инициализации начинает исполнять алгоритм, представляющий собой 20 конечных автоматов.
Технология защиты - защищаем dll путем переноса логики всех автоматов в ключ.
Конечные автоматы выполняются где-то раз в 50-100 мс.
Если их всех перенести в ключ?
Во входном буфере посылать туда события, точку входа (номер автомата) и входные параметры (посчитал - около 60 байт потребуется), в выходном буфере брать перечень выходных воздействий (тоже 30 байт хватит).
Суть работы.
Вначале некая защ. ячейка (ЗЯ) инициализируется массивом начальных состояний автоматов.
Затем каждый цикл:
Каждый автомат при выполнении себя берет соотв вх. значение из вх. буфера, анализирует часть входов, соответствующих этому автомату, текущее состояние из ЗЯ и при необходимости состояния других автоматов из ЗЯ. Вычисляет свое новое состояние и кладет его в массив новых состояний в ЗЯ. И формирует перечень выходных воздействий. И так все автоматы.
Затем текущие состояния замещаются новыми. Затем dll читает данные новы состояний и при необходимости их логгирует. То есть внутренние состояния автоматов нам нужны для журнала событий.
Графический интерфейс можно в принципе и не защищать или использовать простенькую автозащиту.
Так вот - во-первых - что пугает:
- трудоемкость переноса кода
- трудности при обновлении программы - надо обновлять ключ, хотя может это даже и хорошо - то, что программа остается та же (сама dll), а для обновления используется TRU
- очень пугает неопределенность в том, сколько по времени будет выполняться. Кроме того, что код еще и обращения к ЗЯ.
Что скажите?