Lock to serial number in DLL

Issues related to VMProtect
Post Reply
Alexander.Iljin
Posts: 8
Joined: Fri Feb 22, 2013 11:41 am
Location: Томск

Lock to serial number in DLL

Post by Alexander.Iljin »

Добрый день.

Проверяю, как пользоваться привязкой функций к серийному номеру.
Есть исполняемый файл приложения и есть динамическая библиотека. Из библиотеки экспортируется функция. Эту функцию защищаем и привязываем к серийному номеру опцией "Lock To Serial Number".
Приложение читает файл с лицензией и вызывает VMProtectSetSerialNumber. Но вызов защищенной функции из библиотеки вызывает ошибку
This code requires valid serial number to run.
Опытным путем установил, что для работы защищенной функции в библиотеке нужно внутри библиотеки вызвать VMProtectSetSerialNumber.

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

В нашем приложении мы хотим защитить несколько библиотек, но при этом хотелось бы избежать архитектурных изменений связанных с пробросом серийных номеров в каждую загружаемую библиотеку. Есть-ли какой-нибудь способ запустить привязанные к серийному номеру функции внутри DLL не передавая серийные номера в библиотеки?
Admin
Site Admin
Posts: 2584
Joined: Mon Aug 21, 2006 8:19 pm
Location: Russia, E-burg
Contact:

Re: Lock to serial number in DLL

Post by Admin »

Но изначально было предположение, что достаточно будет вызвать VMProtectSetSerialNumber внутри исполняемого файла приложения.
Как вы себе это технически представляете? Вот есть EXE, есть куча DLL (в том числе и системных), и?
Alexander.Iljin
Posts: 8
Joined: Fri Feb 22, 2013 11:41 am
Location: Томск

Re: Lock to serial number in DLL

Post by Alexander.Iljin »

Admin wrote:Как вы себе это технически представляете?
Ну... можно попробовать добавить еще одну сущность... "В виде гномика" :D

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

Ну и тут на форуме не получилось найти тему с таким вопросом.

Поэтому просто хотелось где-то прочитать, что да, действительно, для работы защищенных функций привязанных к серийному номеру нужно вызвать VMProtectSetSerialNumber внутри каждого исполняемого модуля.
Эксперимент экспериментом, но может быть для такого случая предусмотрен какой-то инструмент, да я просто не нашел описания.
Admin
Site Admin
Posts: 2584
Joined: Mon Aug 21, 2006 8:19 pm
Location: Russia, E-burg
Contact:

Re: Lock to serial number in DLL

Post by Admin »

Ну... можно попробовать добавить еще одну сущность... "В виде гномика" :D
Чем вас в качестве гномика не устраивает собственная реализацию в следующем виде:
1. Во всех DLL экспортируете функцию (например SetSerialNumber(serial)), которая в итоге вызывает VMProtectSetSerialNumber(serial)
2. В главном EXE пишете обертку над VMProtectSetSerialNumber, в которой помимо VMProtectSetSerialNumber дополнительно перечисляете все модули в процессе и у каждого запрашиваете GetProcAddress(module, "SetSerialNumber").
3. Вызываете SetSerialNumber у всех модулей где есть такая функция.
4. Гномик готов.
Поэтому просто хотелось где-то прочитать, что да, действительно, для работы защищенных функций привязанных к серийному номеру нужно вызвать VMProtectSetSerialNumber внутри каждого исполняемого модуля.
Да, действительно нужно вызывать VMProtectSetSerialNumber перед работой привязанного к серийнику кода.
Alexander.Iljin
Posts: 8
Joined: Fri Feb 22, 2013 11:41 am
Location: Томск

Re: Lock to serial number in DLL

Post by Alexander.Iljin »

Тоже вариант. Спасибо за подсказку. Плагины скорее всего как-то так и будем активировать.
Post Reply