Информация об изменениях

Сообщение Re[3]: Защита shareware программ от 09.01.2018 10:32

Изменено 22.04.2019 9:29 deleted2

Re[3]: Защита shareware программ
P>то есть ключ у вас генерится по ходу работы программы и потом сравнивается с неким зашитым в код числом или даже просто с 0 или 1 ?

Нет, никаких сравнений нет. Есть результат проверки — прошла проверка математическую закономерность или не прошла.

Ключ считывается с файла настроек. Потом распарсивается в бинарную форму и раскидывается по разным местам в памяти,
чтобы трудней было трассировать выполнение.

Потом при загрузке проверяется один из алгоритмов проверки. Например, там нулевой битик должен быть равен единице.
Если это не так, то, например, говорим что триальный переод истек.

Или пользователь кликает по некой кнопке, выполняющей определенную функцию. В обработчике проверяется еще что-то, например, на делимость на 7.
Если не получилось, то значит ключ взломан и выполняем определенное действие по учету того что взломалось и продолжаем работу программы.

В итоге пользователь просто пользуется программой и не знает что программа уже забраковала его ключ. В следующий раз как он ее запустит,
она перестанет работать. Некоторые проверки делаются не всегда, так что трассировкой отловить это трудно. Вероятность, например, 1/10.

Чтобы мне самому не свихнуться, я просто сделал один раз кучу инлайн функций типа bool Check1(); bool Check2() ... bool CheckN().
И вставляю их в разные места рандомно. А уже в самом коде все делается просто

Что-то делаем.
if (!Check2()) {
  Ура, нас взломали.
}
Продолжаем выполнять код как ни в чем не бывало.


Структура ключа примерно такая:

[Код программы — Месяц генерации ключа — Причина для генерации — Несколько случайных битов — Блок битов 1 — Блок битов 2 — Блок битов 3 — Блок битов 4 — Блок битов 5 — Блок битов 6 — Контрольная сумма]

Все это примерно 260-400 битов, кодируется в base32.

Если хочется усложнить, блоки битов могут быть частью какого-то криптографического алгоритма, например, простой эллиптической кривой или хещем. Это можно проверять.
У меня сначала был El Gamal на 30 бит, потом просто сделал проверку на псевдо-простоту. Сейчас эллиптическая кривая — два числа по 120 бит или что-то в этом духе, уже не помню.
Первая часть — рандомные биты, а вторая часть — это подпись для этих битов. В программе проверяется, валидна ли подпись.

Криптография тут усложняет создание ключегенераторов, но думаю, можно все это не использовать, а просто использовать рандомно-генерируемые ключи.
Просто криптографическая проверка это всего лишь одна из проверок.

Псевдокод генерации ключа:

Рандомно генерим первое число.
for (;;) {
  Генерим цифровую подпись для первого числа.
  Записываем эти два многобитных числа в ключ.
  Проверяем Check1()
  Проверяем Check2()
  ..
  Проверяем CheckN()
  if (все проверки прошли успешно)
    break;
  Увеличиваем рандомное число на единицу.
  Теперь будем повторять уже с новым рандомным числом.
}
Re[3]: Защита shareware программ
deleted