Защита уже скомпилированного ПО...

Добрый день.
Наша фирма недавно приобрела достаточно дорогостоящее программное обеспечение,
защита у которого мягко говоря несерьезная и есть опасения, что отдельные сотрудники
могут его просто “вынести”.
Скажите пож-та можно ли Вашим продуктом защитить уже скомпилированное ПО.

Допустима ли ассемблерная вставка для получения серийного номера и последующей
защиты отдельных кусков кода по этому серийному номеру?
Спасибо.

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

спасибо за столь скорый ответ.
планируем сделать следующим образом:
в интернете есть масса утилит для подключения дополнительных библиотек и их апи к объектам (например, LordPE).
Значит при помощи одной из таких утили “прицепим” VMProtectSDK32.dll и две ее апишки (“GetHWID” и “SetSerial”).
Сам код кажется будет вообще примитивным:
CreateFileA (‘license.key’)
ReadFileA
CloseHandle

push 80
push буфер для HWID
call GetHWID
push то что считали из файла серийника
call SetSerial

По идее Ваш продукт должен взять в себя серийник??? И потом, когда
на критически важных участках кода сделаю пометку “Ключ”, пользоваться этим серийником?

Сегодня попробую, если сработает буду покупать лицензию.
Только еще маленький вопрос. ВМПротекту нету разницы - библиотека это или ехе?
Просто у программы есть библиотеки в которых собственно и сидят все секреты.

push 80
push буфер для HWID
call GetHWID

А HWID вам здесь зачем? Вы все равно его не будете показывать пользователю.

push то что считали из файла серийника
call SetSerial

Тут по идее еще нужна проверка результата типа:

call SetSerial
...
test eax, eax
jz @1
...
call MessageBox
...
call ExitProcess
@1:
...



По идее Ваш продукт должен взять в себя серийник???

По идее - да.

И потом, когда на критически важных участках кода сделаю пометку “Ключ”, пользоваться этим серийником?

Да, только при отсуствии маркеров и МАР-а вам придется вбивать адреса этих участков в проект руками. Будете дизасмить IDA?

ВМПротекту нету разницы - библиотека это или ехе?

Да, без разницы.

Я думал привязку сделать к железу (почитав Ваш мануал :blush: ). Или содержания серийника достаточно, чтобы ВМПротект понимал, что он привязан именно к железу и именно такому ИД?

Да, я понимаю, что вручную придется. Я уже открывал библиотеки и софт в ИДЕ - все прекрасно видно,
где основные алгоритмы расчетов.

Я думал привязку сделать к железу (почитав Ваш мануал > :blush: > ). Или содержания серийника достаточно, чтобы ВМПротект понимал, что он привязан именно к железу и именно такому ИД?

К HWID привязывается серийник при его генерации. Саму проверку HWID (если это необходимо) VMprotect делает сам при SetSerialNumber.

процедура успехом не увенчалась :frowning: :cry:

пользовался отладчиком OllyDBG и утилитой LordPE.
Прицепить вашу библиотеку удалось легко (в код программы
вставил jmp dword ptr [vmprotectsdk32.SetSerial]),
она видна в таблице импорта и обращение
к АПИ SetSerialNumber происходило точно также
как в скомпилированном тестовом варианте.
Однако после накрытия протектором VMProtect
отказался что либо делать с jmp dword ptr [vmprotectsdk32.SetSerial]
в то время как в тестовом варианте превратил его
в вызов виртуальной машины :frowning:
Я так полагаю это изза того что ЛордПе по своему создает
секцию импорта и ее вид отличается от оригинального, созданного
компилем… Видимо какие то указатели просто не находятся Вмпротектом.
Видимо не судьба… жаль конечно!

Возможности прота с каждым днем все больше и больше впечатляют.

Уважаемый Админ, спасибо за разъяснения и потраченное время.

Может на JMP [XXXX] не хватает релока? :slight_smile:)
Присылайте ЕХЕ-ник после LordPE - посмотрю.

P.S. VMProtect ищет референсы на импорт по кодовым секциям а также использует релоки для обхода ложных ссылок (ессно если у файла есть релоки). Возможно у вас чего-то не хватает у новой секции или у самого JMP.

да, релок я не ставил.
грубо записал физ адрес куда апи укладывается:
примерно так:
jmp dword ptr ds:[00920BE4] ;
у меня длл, а не ехе… завтра с работы отправлю :exclamation:

может подскажете, что бы вы делали дополнительно?

Если у вас DLL и JMP/CALL/PUSH без релока, то у вас код будет глючить даже до VMProtect, т.к. при загрузке DLL по другой базе JMP/CALL/PUSH будет смотреть в никуда. Т.е. все новые вызовы импорта (не только SDK от VMProtect) как минимум должны быть с релоками.

может подскажете, что бы вы делали дополнительно?

Не понял вопроса.