Имеется софт, предназначенный для direct-рассылки почты через SMTP и одновременного сбора её же через POP3... Но это не столь важно, главное, что в процессе своей работы, софт всегда имеет доступ к интернету. Имеется свой dedicated-server. Софт написан на MSVC++ 7.0. Софт предназначен для работы в операционных системах Windows 2000 и выше.
Необходимо защитить софт от копирования/распространения.
Планирую непосредственно перед началом работы софта (т.е. после того, как он загрузился и нажали "кнопочку START" в нём) собирать следующие данные:
1. Серийный номер софта, который даётся покупателю при покупке.
2. Серийный номер, который жёстко прошит в каждом exe-файле.
3. Некоторые сведения о PNP-устройсвах (для привязки к железу)
4. Контрольную сумму и версию софта.
5. Текущие настройки софта. Например в plain-text виде или в том виде, в котором они хранятся в файле с настройками.
6. Другое...
Далее подключаться к серверу через SSL и передавать туда эти данные. В ответ от сервера получать:
1. Обработанные настройки (5), которые уже пригодны для использования непосредственно самими функциями софта.
2. Небольшой DLL-файл, в котором содержатся жизненно-важные для софта функции. DLL распаковывать и использовать непосредственно в памяти, без записи на диск. DLL будет проверять контрольную сумму EXE-файла и если она будет неправильной, то некоторые функции DLL будут просто возвращать неверные значения.
Интересно.... Насколько это надёжно и как быстро это сломают?
PS. возможно использование двух dedicated-серверов для повышения надёжности работы (если один из серверов временно лежит)
Здравствуйте, VKE, Вы писали:
VKE>Интересно.... Насколько это надёжно и как быстро это сломают?
Смотря насколько надёжно напишешь. Я когда-то писал такую штуку. Для защиты игр фирмы. Ничего, не сломали, хоть и не особо трудно, наверно. Наверное, овчинка выделки не стоила

. Но если что-то действительно стоящее, то для кого-то это может стать делом принципа...
Теперь по делу:
Я делал без дллки, а просто вместо мусора патчил в памяти части кода. Для надёжности — несколько раз одно и то же место, но разными данными (это чтоб пропатчить трудно было). А потом эти данные использовал — нечто вроде чексуммы вычислял, причём для каждого компьютера — получалась своя, но коль скоро данные были консистентны (т.к. программа выполнялась на одном и том же компьютере

), всё работало. В принципе, если меняешь куски кода, причём несколько раз одно место — это уже очень трудно исправить. Если вдобавок меняешь данные, с помощью которых производятся вычисления, результаты каковых тоже используются — практически невозможно. Как пример, если придумаешь 2 функции, так что:
f(data, HDD_serial, date) = g(data, HDD_serial, date) + const для любого HDD_serial, но не для любого data+date , а потом в не слишком явном виде будешь в коде (f-g) — это трудно, очень трудно отловить. Какое тождество тут использовать (f, g) — на твой вкус.
Удачи.
VKE>PS. возможно использование двух dedicated-серверов для повышения надёжности работы (если один из серверов временно лежит)
...Complex problems have simple, easy-to-understand wrong answers...
(Grossman's Misquote of H.L.Mencken)
Здравствуйте, VKE, Вы писали:
VKE>А просто... Выделить память, поставить на участок памяти права на исполнение и на чтение, загрузить туда образ длл, пересчитать по таблице релокаций немного данных и юзать...
А какая разница, с записью или без? Ведь все равно можно будет отладчиком все это считать...
... << RSDN@Home 1.0 beta 4 >>