Подскажите пожалуйста, как защитить с помощью VMProtect константы в следующем модуле (маркерами в данном случае воспользоваться не представляется возможным):
В данном случае вам нужно защищать не сами контсанты, а код который с ними работает. Для строковых констант можно предложить использовать VMProtectDecryptStringA/W:
то константы нужно сначала как-то зашифровать (Ecrypt)?
Строковые константы будут автоматически зашифрованы после включения их в проект (в общем списке объектов они будут видны как string "{43F8F289-7A20-11D0-8F06-00C04FC295E1}" и string "Vasily Pupkin").
Admin wrote:Строковые константы будут автоматически зашифрованы после включения их в проект (в общем списке объектов они будут видны как string "{43F8F289-7A20-11D0-8F06-00C04FC295E1}" и string "Vasily Pupkin").
У меня в списке только процедуры, подскажите пожалуйста, как добавить константу в список защищаемых объектов?
Всё получилось, большое спасибо. Последний вопрос - какой тип компиляции предпочтительнее для констант (по умолчанию стоит виртуализация)? Или это по большому счету не существенно?
VMProtectDecryptStringA,VMProtectDecryptStringW добавить еще указание типа защиты, чтобы не использовать скрипт и GUI?
И еще вопрос. Я так понимаю что указатель на стринг где то алакается внутри вашей библиотеки защиты. Собственно из своей части программы я его освободить не могу, предусмотрен ли у вас механизм на этот случай?
VMProtectDecryptStringA,VMProtectDecryptStringW добавить еще указание типа защиты, чтобы не использовать скрипт и GUI?
Такого в планах нет.
И еще вопрос. Я так понимаю что указатель на стринг где то алакается внутри вашей библиотеки защиты. Собственно из своей части программы я его освободить не могу, предусмотрен ли у вас механизм на этот случай?
Мы планируем добавить возможность уничтожения строки, указатель на которую получен через VMProtectDecryptStringA/W - скорее всего будет отдельная API типа VMProtectFreeString. В какой именно версии это будет сделано - не могу точно сказать.
В общем то мне кажется что это было бы полезной фичей, тем более что все равно он может менятся вручную.
Мы планируем добавить возможность уничтожения строки, указатель на которую получен через VMProtectDecryptStringA/W - скорее всего будет отдельная API типа VMProtectFreeString. В какой именно версии это будет сделано - не могу точно сказать.
Тогда меня сейчас интерисует такой вопрос... считается ли что указатель который вернула VMProtectDecryptStringX уходит в утечку памяти?
Тогда меня сейчас интерисует такой вопрос... считается ли что указатель который вернула VMProtectDecryptStringX уходит в утечку памяти?
Выделение памяти под строку происходит в момент первого выхова VMProtectDecryptStringX. При последующем вызове VMProtectDecryptStringX выделения памяти не происходит и не совсем понятно что вы понимаете под утечкой.
Выделение памяти под строку происходит в момент первого выхова VMProtectDecryptStringX. При последующем вызове VMProtectDecryptStringX выделения памяти не происходит и не совсем понятно что вы понимаете под утечкой.
Я имел в виду следующий случай:
в исходном бинарном модуле строка хранится в шифрованном виде (если я правильно понимаю идеологию использования этой функции). Когда я хочу получить к ней доступ я использую функцию VMProtectDecryptStringX, которая вернет мне указатель на уже расшифрованную строку. Тоесть в итоге у меня есть указатель на выделенную строку, которую я в своей программе никак не могу освободить, т.к. не знаю способа выделения памяти внутри ваших функций. Тоесть на момент завершения приложения (или на момент выхода из функции) я имею указатель на выделенную область памяти - что и подразумеваю под утечкой.
Тоесть на момент завершения приложения (или на момент выхода из функции) я имею указатель на выделенную область памяти - что и подразумеваю под утечкой.
Если рассматривать случай с завершения приложения (актуально для DLL/SYS файлов), то действительно будем иметь утечку памяти в пределах процесса (для SYS - в системной памяти). Мы планируем в версии 2.06 (через одну версию) устранить все эти недостатки и предоставить пользователю возможность самому уничтожать декриптованные строки.