Page 1 of 1
Защита уже скомпилированного ПО...
Posted: Tue Apr 17, 2012 6:10 pm
by igor_sirotkin
Добрый день.
Наша фирма недавно приобрела достаточно дорогостоящее программное обеспечение,
защита у которого мягко говоря несерьезная и есть опасения, что отдельные сотрудники
могут его просто "вынести".
Скажите пож-та можно ли Вашим продуктом защитить уже скомпилированное ПО.
Допустима ли ассемблерная вставка для получения серийного номера и последующей
защиты отдельных кусков кода по этому серийному номеру?
Спасибо.
Re: Защита уже скомпилированного ПО...
Posted: Wed Apr 18, 2012 3:29 am
by Admin
Если вы хотите привязаться к серийнику уже готовое ПО, то в нем как минимум должны присутствовать вызовы нашего SDK с вызовом системы лицензирования (а также чтение сериника из реестра/файла) - если вы решите эту задачу с помощью ассемблерных вставок, то проблемы с защитой быть не должно.
Re: Защита уже скомпилированного ПО...
Posted: Wed Apr 18, 2012 4:26 am
by igor_sirotkin
Admin wrote:Если вы хотите привязаться к серийнику уже готовое ПО, то в нем как минимум должны присутствовать вызовы нашего SDK с вызовом системы лицензирования (а также чтение сериника из реестра/файла) - если вы решите эту задачу с помощью ассемблерных вставок, то проблемы с защитой быть не должно.
спасибо за столь скорый ответ.
планируем сделать следующим образом:
в интернете есть масса утилит для подключения дополнительных библиотек и их апи к объектам (например, LordPE).
Значит при помощи одной из таких утили "прицепим" VMProtectSDK32.dll и две ее апишки ("GetHWID" и "SetSerial").
Сам код кажется будет вообще примитивным:
CreateFileA ('license.key')
ReadFileA
CloseHandle
push 80
push буфер для HWID
call GetHWID
push то что считали из файла серийника
call SetSerial
По идее Ваш продукт должен взять в себя серийник??? И потом, когда
на критически важных участках кода сделаю пометку "Ключ", пользоваться этим серийником?
Сегодня попробую, если сработает буду покупать лицензию.
Только еще маленький вопрос. ВМПротекту нету разницы - библиотека это или ехе?
Просто у программы есть библиотеки в которых собственно и сидят все секреты.
Re: Защита уже скомпилированного ПО...
Posted: Wed Apr 18, 2012 5:06 am
by Admin
Code: Select all
push 80
push буфер для HWID
call GetHWID
А HWID вам здесь зачем? Вы все равно его не будете показывать пользователю.
Code: Select all
push то что считали из файла серийника
call SetSerial
Тут по идее еще нужна проверка результата типа:
Code: Select all
call SetSerial
...
test eax, eax
jz @1
...
call MessageBox
...
call ExitProcess
@1:
...
По идее Ваш продукт должен взять в себя серийник???
По идее - да.
И потом, когда на критически важных участках кода сделаю пометку "Ключ", пользоваться этим серийником?
Да, только при отсуствии маркеров и МАР-а вам придется вбивать адреса этих участков в проект руками. Будете дизасмить IDA?
ВМПротекту нету разницы - библиотека это или ехе?
Да, без разницы.
Re: Защита уже скомпилированного ПО...
Posted: Wed Apr 18, 2012 5:26 am
by igor_sirotkin
Admin wrote:
А HWID вам здесь зачем? Вы все равно его не будете показывать пользователю.
Да, только при отсуствии маркеров и МАР-а вам придется вбивать адреса этих участков в проект руками. Будете дизасмить IDA?
Я думал привязку сделать к железу (почитав Ваш мануал

). Или содержания серийника достаточно, чтобы ВМПротект понимал, что он привязан именно к железу и именно такому ИД?
Да, я понимаю, что вручную придется. Я уже открывал библиотеки и софт в ИДЕ - все прекрасно видно,
где основные алгоритмы расчетов.
Re: Защита уже скомпилированного ПО...
Posted: Wed Apr 18, 2012 5:44 am
by Admin
Я думал привязку сделать к железу (почитав Ваш мануал

). Или содержания серийника достаточно, чтобы ВМПротект понимал, что он привязан именно к железу и именно такому ИД?
К HWID привязывается серийник при его генерации. Саму проверку HWID (если это необходимо) VMprotect делает сам при SetSerialNumber.
Re: Защита уже скомпилированного ПО...
Posted: Wed Apr 18, 2012 4:09 pm
by igor_sirotkin
процедура успехом не увенчалась
пользовался отладчиком OllyDBG и утилитой LordPE.
Прицепить вашу библиотеку удалось легко (в код программы
вставил jmp dword ptr [vmprotectsdk32.SetSerial]),
она видна в таблице импорта и обращение
к АПИ SetSerialNumber происходило точно также
как в скомпилированном тестовом варианте.
Однако после накрытия протектором VMProtect
отказался что либо делать с jmp dword ptr [vmprotectsdk32.SetSerial]
в то время как в тестовом варианте превратил его
в вызов виртуальной машины

Я так полагаю это изза того что ЛордПе по своему создает
секцию импорта и ее вид отличается от оригинального, созданного
компилем... Видимо какие то указатели просто не находятся Вмпротектом.
Видимо не судьба... жаль конечно!
Возможности прота с каждым днем все больше и больше впечатляют.
Уважаемый Админ, спасибо за разъяснения и потраченное время.
Re: Защита уже скомпилированного ПО...
Posted: Wed Apr 18, 2012 4:22 pm
by Admin
Может на JMP [XXXX] не хватает релока?

)
Присылайте ЕХЕ-ник после LordPE - посмотрю.
P.S. VMProtect ищет референсы на импорт по кодовым секциям а также использует релоки для обхода ложных ссылок (ессно если у файла есть релоки). Возможно у вас чего-то не хватает у новой секции или у самого JMP.
Re: Защита уже скомпилированного ПО...
Posted: Wed Apr 18, 2012 4:32 pm
by igor_sirotkin
Admin wrote:Может на JMP [XXXX] не хватает релока?

)
Присылайте ЕХЕ-ник после LordPE - посмотрю.
да, релок я не ставил.
грубо записал физ адрес куда апи укладывается:
примерно так:
jmp dword ptr ds:[00920BE4] ;
у меня длл, а не ехе... завтра с работы отправлю
может подскажете, что бы вы делали дополнительно?
Re: Защита уже скомпилированного ПО...
Posted: Wed Apr 18, 2012 4:52 pm
by Admin
Если у вас DLL и JMP/CALL/PUSH без релока, то у вас код будет глючить даже до VMProtect, т.к. при загрузке DLL по другой базе JMP/CALL/PUSH будет смотреть в никуда. Т.е. все новые вызовы импорта (не только SDK от VMProtect) как минимум должны быть с релоками.
может подскажете, что бы вы делали дополнительно?
Не понял вопроса.