Использование маркеров в Visual C

Issues related to VMProtect
Post Reply
Impulse
Posts: 5
Joined: Fri Apr 06, 2007 11:49 am

Использование маркеров в Visual C

Post by Impulse »

Как в Visual C использовать маркеры начала/конца защищаемого блока ?
(db $EB,$10,'VMProtect begin',0)
Admin
Site Admin
Posts: 2584
Joined: Mon Aug 21, 2006 8:19 pm
Location: Russia, E-burg
Contact:

Post by Admin »

В дистрибутиве есть также примеры использования маркеров для различных компиляторов (в том числе и для Visual C).

Code: Select all

...
#include "VMProtectSDK.h"
...
	VMProtectBegin
	char buf[100]; 
	GetDlgItemText(hDlg, IDC_EDIT, buf, 100);
	if (atoi (buf) >> 1 == 1) 
		MessageBox(hDlg, "Correct password", "Information", MB_ICONINFORMATION + MB_OK);
	else
	{    
		MessageBox(hDlg, "Incorrect password", "Error", MB_ICONERROR + MB_OK);
		SetFocus(GetDlgItem(hDlg, IDC_EDIT));
	}
	VMProtectEnd
...
VMProtectSDK.h лежит в папке с примерами.
Impulse
Posts: 5
Joined: Fri Apr 06, 2007 11:49 am

Использование маркеров в Visual C

Post by Impulse »

Спасибо.
Еще вопрос - в демо-версии каковы ограничение на блок, защищаемый маркерами (размер, ...) ?
Admin
Site Admin
Posts: 2584
Joined: Mon Aug 21, 2006 8:19 pm
Location: Russia, E-burg
Contact:

Post by Admin »

В демо версии существуют следующие ограничения:
  • * Недоступны опции защиты
    * Нет шифрации байткода
    * Нет обфускации байткода
    * Защитить можно всего одну процедуру
    * Исполнитель ВМ не видоизменяется
Под процедурой также понимается маркер или строковая константа (т.е. защищаемый объект).
Impulse
Posts: 5
Joined: Fri Apr 06, 2007 11:49 am

Использование маркеров в Visual C

Post by Impulse »

Как использовать vmprotect_con (в режиме командной строки) ?
Делаю так:
VMProtect_Con.exe Программа.exe Программа1.exe
Результат - [Ошибка] Нет данных для компиляции
Admin
Site Admin
Posts: 2584
Joined: Mon Aug 21, 2006 8:19 pm
Location: Russia, E-burg
Contact:

Post by Admin »

"Программа.exe" указывается без полного пути до файла?
Impulse
Posts: 5
Joined: Fri Apr 06, 2007 11:49 am

Использование маркеров в Visual C

Post by Impulse »

И с локальным именем, и с полным результат одинаковый:
VMProtect_Con.exe E:\Программа.exe E:\Программа1.exe
Admin
Site Admin
Posts: 2584
Joined: Mon Aug 21, 2006 8:19 pm
Location: Russia, E-burg
Contact:

Post by Admin »

Рядом с "Программа.exe" должен находиться "Программа.vmp" (файл проекта, предварительно подготовленный в GUI версии) и "Программа.map" (если вы используете в проекте имена процедур из MAP файла).
Last edited by Admin on Fri Apr 06, 2007 12:48 pm, edited 1 time in total.
Impulse
Posts: 5
Joined: Fri Apr 06, 2007 11:49 am

Использование маркеров в Visual C

Post by Impulse »

Благодарю, разобрался !
GMC
Posts: 5
Joined: Mon Apr 02, 2007 6:01 pm

Post by GMC »

Добрый день.
Хочу задать еще один вопрос по маркерам.
Какие условия должны быть соблюдены при размещении маркеров в тексте программы?
В частности интересует:
- допустима ли вложенность маркеров. Если да, то как обрабатываются вложенные маркеры;
- возможен ли переход из участка кода, обрамленного маркерами за внешние границы участка?
- возможен ли переход из внешнего (незащищенного) участка кода программы внутрь кода, обрамленного маркерами?

Спасибо.
Admin
Site Admin
Posts: 2584
Joined: Mon Aug 21, 2006 8:19 pm
Location: Russia, E-burg
Contact:

Post by Admin »

GMC wrote:- допустима ли вложенность маркеров. Если да, то как обрабатываются вложенные маркеры;
Вложенность маркеров в принципе допустима (т.е. не будет влиять на работоспособность кода). Приведу пример:

Code: Select all

VMProtectBegin2
...
VMProtectBegin1
...
VMProtectEnd1
...
VMProtectEnd2
В этом случае границами маркера будут являться только VMProtectBegin1 и VMProtectEnd1.
возможен ли переход из участка кода, обрамленного маркерами за внешние границы участка?
Возможен.
- возможен ли переход из внешнего (незащищенного) участка кода программы внутрь кода, обрамленного маркерами?
Рассмотрим пример:

Code: Select all

jmp @1
...
VMProtectBegin
...
@1:
...
VMProtectEnd
В данном случае адрес метки "@1" нужно помечать как "внешний" с помощью GUI версии (в результате по этому адресу будет создан так называемый переходник, который будет передавать управление исполнителю ВМ), иначе по этому адресу скорее всего будет мусор (либо совершенно постороний код) и передача управления на этот адрес может привести к непредсказуемым последствиям.
GMC
Posts: 5
Joined: Mon Apr 02, 2007 6:01 pm

Post by GMC »

Спасибо

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

Кстати, попутно решил проблему нестабильности еще одной моей программы. Оказалось, что прямо из незещищенного участка кода был джамп внутрь защищенного участка кода...
Работа с маркерами требует большой внимательности, но и результат соответствует. Все таки критичные ко времени исполнения и достаточно уязвимые участки кода удобнее обрамлять маркерами, нежели виртуализировать всю функцю посредством map-файла.
Admin
Site Admin
Posts: 2584
Joined: Mon Aug 21, 2006 8:19 pm
Location: Russia, E-burg
Contact:

Post by Admin »

Для определения ситуаций перехода из незащищенного кода в защищенный предназначен "Режим отладки" (расположен на закладке "Опции"). В режиме отладки вся область защищаемого кода после обработки заполняется командой INT 03, т.е. при запуске приложения в отладчике отладчик остановится на адресе перехода из незащищенного кода в защищенный (тем самым показывая вам такой переход) и можно будет принять соотвествующие меры - либо пометить этот адрес как внешний, либо переписать часть кода для избежания данной ситуации.
Last edited by Admin on Fri Apr 20, 2007 5:39 pm, edited 1 time in total.
GMC
Posts: 5
Joined: Mon Apr 02, 2007 6:01 pm

Post by GMC »

Ух ты!
К сожалению такую подробную информацию о "режиме отладки" не увидел в хелпе. Иначе разобрался бы намного раньше.

Как оказалось, форум все-таки нужен :). Много интересного уже узнал, а не прошло и пары суток.

Но, все таки думаю, что описание таких важных вопросов должно располагаться в документации на продукт.
Post Reply