Привязка exe файла к ID оборудования

Изначально есть exe файл. Исходного кода нет, т. к. это результат компиляции проекта LabView, а это визуальное программирование. Создал проект, добавил файл лицензии с ID оборудования. В параметрах лицензирования указал имя файла. Создал в папке с защищённым файлом файл лицензирования и прописал в нём серийный номер. При запуске программы выходит сообщение, что требуется верный серийный номер для запуска. В чём может быть проблема? При этом программа, если смотреть по монитору файловых процессов, при запуске не обращается к файлу лицензирования.

В чём может быть проблема? При этом программа, если смотреть по монитору файловых процессов, при запуске не обращается к файлу лицензирования.

Конечно не обращается. Вы должны сами передать серийный номер внутрь VMProtectSetSerialNmber.

а как его передать без исходного кода? Повторюсь, это скомпилированный проект Labview, которая является графической средой программирования и языка программирования как такового нет.

Выносите логику лицензирования в DLL. Экспортируете одну функцию-пустышку, чтобы эту либу можно было добавить в таблицу импорта вашего бинарника. Логика лицензирования же будет у Вас запускаться в DllMain. Проверяете лицензию, и если что-то идет не так, то показываете соответствующее сообщение и завершаете процесс.
Саму же либу пакуете в Ваш бинарник при помощи “Virtual Files”.

Простой костыль, который решит вашу проблему.

Если стоит задача только привязки EXE к HWID, то нужный HWID можно установить прямо в настройках VMProtect (Опции - Дополнительные - Привязать к HWID). Единственный момент - для каждого HWID придется пересобирать сам EXE.

Костыль совершенно бесполезный и ломается за 5 минут.

Ну если саму либу накрыть протектором, а потом запаковать её при помощи протектора в бинарник автора темы, то не за 5 минут :slight_smile:
Ну и, естественно, либа должна не просто показывать MessageBox и закрывать процесс. Перед тем, как показать сообщение, можно похерить память приложения например. Можно придумать как извратиться :slight_smile:

Ну если саму либу накрыть протектором

Самая главная проблема в том, что ничего полезного для конечного приложения эта либа НЕ ДЕЛАЕТ, поэтому ее можно пропатчить сразу после ее загрузки, просто воткнув MOV EAX, 1 + RET в DllMain.

Можно сделать, чтобы защищенная часть делала что-то полезное)
К примеру, сделать PE loader (я ж надеюсь, что у автора бинарь с релоками), в котором уже будет проверка лицензии, а сам бинарник лоадер будет тащить за собой в “Virtual Files” (можно даже в зашифрованном виде).
Можно сделать на основе этого - GitHub - hasherezade/libpeconv: A library to load, manipulate, dump PE files. See also: https://github.com/hasherezade/libpeconv_tpl · GitHub , или любого другого удобного варианта.
Все ограничивается лишь фантазией. Ну и у нас тут типичный случай “Security through obscurity”. Большинство увидев, что приложение накрыто VMP, просто не станут дальше ковырять.

Можно сделать, чтобы защищенная часть делала что-то полезное)

Вы о чем вообще? :slight_smile:) Посмотрите на чем кодит ТС. Я на 146% уверен, что он даже не знает что такое PE формат, а вы ему предлагаете написать лоадер.

Я не настолько дремучий, чтобы не знать некоторых вещей в этой области. Да, я не программист, если говорить об распространённых языках программирования, но сделать DLL, добавить её в таблицу импорта и т. п. могу.