Как записать серийный номер в исполняемый файл? - PullRequest
7 голосов
/ 04 января 2010

Я пытаюсь защитить приложение для запуска только с определенного USB-диска. У меня есть код для получения серийного номера от устройства, но единственный способ заставить эту работу работать так, как я хочу, - это вручную ввести серийный номер в двоичный файл. Есть ли способ, которым я мог бы сделать приложение-заглушку, которое изменило бы существующий двоичный файл, чтобы вставить в него серийный номер после его компиляции? Я видел это в C ++ в прошлом, но это было очень давно, и я не совсем помню, как мы делали это тогда.

Ответы [ 4 ]

8 голосов
/ 04 января 2010

Хранить его в сборке - плохая идея. Вот что я бы сделал (и делал в прошлом подобное):

  1. Убедитесь, что вы подписываете свои сборки.
  2. Создайте XML-документ, содержащий ваши лицензионные данные - в вашем случае серийный номер устройства USB.
  3. Используйте библиотеку SignedXml в .NET (реализует XMLDSIG), чтобы подписать лицензионный XML-документ, содержащий серийный номер. Вы будете использовать тот же закрытый ключ, который используется для подписи сборки.
  4. Когда ваше приложение запускается, оно проверяет, является ли подпись XML-файла действительной, используя открытый ключ, с которым он был подписан (и встроен в сборку).

Очевидно, что вы не отправляете свой закрытый ключ, поэтому, если приложению необходимо создать сам файл конфигурации XML (а не файл, который вы отправляете пользователю), вам потребуется реализовать веб-службу.

0 голосов
/ 04 января 2010

Почему кто-то хочет сохранить что-нибудь внутри исполняемого файла. Если вы планируете подписать исполняемый файл для распространения, то изменение исполняемого файла каким-либо образом нарушит подпись, и сохранение чего-либо в двоичном виде в исполняемый файл не помешает кому-либо извлечь значение из исполняемого файла.

Лучшее, что вы можете сделать, это сохранить серийный номер в файле, реестре или другом месте, а затем зашифровать значение, чтобы его нельзя было изменить, не взломав. Я использую библиотеку, которая поставляется с License Vault от довольно новой компании под названием SpearmanTech. Вы можете использовать их библиотеку для хранения зашифрованных значений в файле .NET machine.config в зашифрованном виде, чтобы его нельзя было подделать. Таким образом, вы можете извлечь информацию из файла .config при запуске приложения.

Вы пишете .NET-приложение на C ++ или нативном C ++, так или иначе, вы должны иметь возможность общаться с .NET Framework, чтобы это решение работало.

Я бы проверил их продукт на http://www.spearmantech.com. Надеюсь, он вам подходит.

0 голосов
/ 04 января 2010

Возможно, вы хотите получить отдельный лицензионный ключ USB, как эти:

http://www.bhphotovideo.com/c/buy/USB-License-Keys/ci/12454/N/4294550039

???

0 голосов
/ 04 января 2010

Не знаю, но это не помешало мне ответить раньше.

Может быть, выяснить, где вы хотите сохранить SN в исполняемом файле (это должно быть только одно место, верно?) И просто обработать исполняемый файл как гигантский двоичный двоичный объект и использовать программу-заглушку, чтобы вставить его туда, где это необходимо идти?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...