Как записать порядковый номер в исполняемом файле?

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

7
задан Jesse Knott 4 January 2010 в 16:37
поделиться

4 ответа

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

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

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

.
8
ответ дан 7 December 2019 в 05:23
поделиться

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

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

.
0
ответ дан 7 December 2019 в 05:23
поделиться

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

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

??

.
0
ответ дан 7 December 2019 в 05:23
поделиться
[

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

] [

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

] [

]Вы хорошо пишете .NET-приложение на C++ или родном C++, так или иначе, вы должны иметь возможность взаимодействовать с .NET-фреймворком, чтобы это решение работало.[

] [

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

].
0
ответ дан 7 December 2019 в 05:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: