Добрый день.
Наша фирма недавно приобрела достаточно дорогостоящее программное обеспечение,
защита у которого мягко говоря несерьезная и есть опасения, что отдельные сотрудники
могут его просто “вынести”.
Скажите пож-та можно ли Вашим продуктом защитить уже скомпилированное ПО.
Допустима ли ассемблерная вставка для получения серийного номера и последующей
защиты отдельных кусков кода по этому серийному номеру?
Спасибо.
Если вы хотите привязаться к серийнику уже готовое ПО, то в нем как минимум должны присутствовать вызовы нашего SDK с вызовом системы лицензирования (а также чтение сериника из реестра/файла) - если вы решите эту задачу с помощью ассемблерных вставок, то проблемы с защитой быть не должно.
спасибо за столь скорый ответ.
планируем сделать следующим образом:
в интернете есть масса утилит для подключения дополнительных библиотек и их апи к объектам (например, LordPE).
Значит при помощи одной из таких утили “прицепим” VMProtectSDK32.dll и две ее апишки (“GetHWID” и “SetSerial”).
Сам код кажется будет вообще примитивным:
CreateFileA (‘license.key’)
ReadFileA
CloseHandle
push 80
push буфер для HWID
call GetHWID
push то что считали из файла серийника
call SetSerial
По идее Ваш продукт должен взять в себя серийник??? И потом, когда
на критически важных участках кода сделаю пометку “Ключ”, пользоваться этим серийником?
Сегодня попробую, если сработает буду покупать лицензию.
Только еще маленький вопрос. ВМПротекту нету разницы - библиотека это или ехе?
Просто у программы есть библиотеки в которых собственно и сидят все секреты.
Я думал привязку сделать к железу (почитав Ваш мануал ). Или содержания серийника достаточно, чтобы ВМПротект понимал, что он привязан именно к железу и именно такому ИД?
Да, я понимаю, что вручную придется. Я уже открывал библиотеки и софт в ИДЕ - все прекрасно видно,
где основные алгоритмы расчетов.
Я думал привязку сделать к железу (почитав Ваш мануал > > ). Или содержания серийника достаточно, чтобы ВМПротект понимал, что он привязан именно к железу и именно такому ИД?
К HWID привязывается серийник при его генерации. Саму проверку HWID (если это необходимо) VMprotect делает сам при SetSerialNumber.
пользовался отладчиком OllyDBG и утилитой LordPE.
Прицепить вашу библиотеку удалось легко (в код программы
вставил jmp dword ptr [vmprotectsdk32.SetSerial]),
она видна в таблице импорта и обращение
к АПИ SetSerialNumber происходило точно также
как в скомпилированном тестовом варианте.
Однако после накрытия протектором VMProtect
отказался что либо делать с jmp dword ptr [vmprotectsdk32.SetSerial]
в то время как в тестовом варианте превратил его
в вызов виртуальной машины
Я так полагаю это изза того что ЛордПе по своему создает
секцию импорта и ее вид отличается от оригинального, созданного
компилем… Видимо какие то указатели просто не находятся Вмпротектом.
Видимо не судьба… жаль конечно!
Возможности прота с каждым днем все больше и больше впечатляют.
Уважаемый Админ, спасибо за разъяснения и потраченное время.
Может на JMP [XXXX] не хватает релока? )
Присылайте ЕХЕ-ник после LordPE - посмотрю.
P.S. VMProtect ищет референсы на импорт по кодовым секциям а также использует релоки для обхода ложных ссылок (ессно если у файла есть релоки). Возможно у вас чего-то не хватает у новой секции или у самого JMP.
да, релок я не ставил.
грубо записал физ адрес куда апи укладывается:
примерно так:
jmp dword ptr ds:[00920BE4] ;
у меня длл, а не ехе… завтра с работы отправлю
Если у вас DLL и JMP/CALL/PUSH без релока, то у вас код будет глючить даже до VMProtect, т.к. при загрузке DLL по другой базе JMP/CALL/PUSH будет смотреть в никуда. Т.е. все новые вызовы импорта (не только SDK от VMProtect) как минимум должны быть с релоками.