Краш при использовании системы лицензирования
Posted: Wed Jun 11, 2025 3:49 am
Минимизировал и прикрепил пример на котором это воспроизводится, библиотека собрана под Linux
Конфиг дефолтный, за исключением включённой системы лицензирования и использованием скрипта https://github.com/CertainLach/vmprotec ... script.lua (TL;DR: на функции начинающиеся с vmprotect_ применяет опции согласно их названию, и удаляет их из экспортов)
Библиотека экспортирует одну функцию - do_the_thing
Функция принимает буфер, первый байт = 4, остальные - лицензионный ключ для системы лицензирования и завершающий \0
При получении лицензионного ключа функция его активирует, делает SetSerialNumber, и если ошибок не было (их логгирует) дёргает функцию защищённую лицензией (lockToKey)
Если передать буфер у которого первый байт = 13, то оно сразу вызывает функцию защищённую лицензией
До применения vmprotect (Запуск с VMProtectSDK заглушками) код успешно работает, если ему передать \x04activationcode\0, то он выведет
```
Op 4
activate license
set serial
call lock by key function
called
```
Падений нет
После применения vmprotect при передаче правильного кода лицензии (\x04aaaa-aaaa-aaaa-aaaa\0) - код получает серийник, но падает на вызове функции под защитой
```
Op 4
activate license
set serial
call lock by key function
terminated by signal SIGSEGV (Address boundary error)
```
Если же не вызывая активацию попробовать вызвать код под лицензией (Аргумент \x0d), то
```
Op 13
# И тут появляется окно zenity с ошибкой
```
Обычные покрытые функции работают правильно (do_the_thing помечена как ultra), падения происходят только на lockByKey.
Конфиг дефолтный, за исключением включённой системы лицензирования и использованием скрипта https://github.com/CertainLach/vmprotec ... script.lua (TL;DR: на функции начинающиеся с vmprotect_ применяет опции согласно их названию, и удаляет их из экспортов)
Библиотека экспортирует одну функцию - do_the_thing
Функция принимает буфер, первый байт = 4, остальные - лицензионный ключ для системы лицензирования и завершающий \0
При получении лицензионного ключа функция его активирует, делает SetSerialNumber, и если ошибок не было (их логгирует) дёргает функцию защищённую лицензией (lockToKey)
Если передать буфер у которого первый байт = 13, то оно сразу вызывает функцию защищённую лицензией
До применения vmprotect (Запуск с VMProtectSDK заглушками) код успешно работает, если ему передать \x04activationcode\0, то он выведет
```
Op 4
activate license
set serial
call lock by key function
called
```
Падений нет
После применения vmprotect при передаче правильного кода лицензии (\x04aaaa-aaaa-aaaa-aaaa\0) - код получает серийник, но падает на вызове функции под защитой
```
Op 4
activate license
set serial
call lock by key function
terminated by signal SIGSEGV (Address boundary error)
```
Если же не вызывая активацию попробовать вызвать код под лицензией (Аргумент \x0d), то
```
Op 13
# И тут появляется окно zenity с ошибкой
```
Обычные покрытые функции работают правильно (do_the_thing помечена как ultra), падения происходят только на lockByKey.