Page 1 of 1

Error in virtual machine under russian Windows

Posted: Tue Apr 10, 2007 11:18 am
by FraGGer
Добрый день.

Проблема в следующем. Имеется драйвер, часть функций которого защищены с помощью VMProtect 1.2.2
Ощущение такое, что в некоторый момент виртуальная машина вылетает и код, который должен исполняться под виртуальной машиной, выполняется как обычный код, что рано или поздно приводит к возникновению BSOD (чаще всего ошибки связаны с чтением или записью в произвольный регион памяти).
Что интересно - ошибки случаются только под русскими версиями (не важно Win 2000, Win XP, Win 2003) и пока ни разу не проявились под английской версией.
В history VMProtect я не встретил никаких упоминаний на подобные проблемы. Исходя из этого вопрос - известна ли подобная проблема и если да, то была ли она исправлена?

Posted: Tue Apr 10, 2007 12:12 pm
by Admin
Скорее всего проблема связана с многопоточностью. В версиях до 1.24 для драйверов рекомендовалось указывать процедуру выделения памяти для нужд исполнителя. Начиная с версии 1.24 VMProtect полностью поддерживает многопоточность без каких либо дополнительных действий со стороны разработчика.

Posted: Tue Apr 10, 2007 3:15 pm
by FraGGer
Спасибо за ответ. Ситуация когда несколько процедур может выполняться "одновременно" под виртуальной машиной, что может трактоваться как многопоточность, действительно может иметь место.
Просто несколько насторожил тот факт, что в основном все происходит под русской версией windows

Что касается кодировки - у Вас на форуме установлена кодировка ISO-8859-1, что вероятно и приводит к проблемам. Попробуйте установить 1251 или UTF8. Сейчас чтобы прочесть сообщения на форуме мне приходится на каждой странице переключать кодировку на 1251 вручную.

Posted: Tue Apr 10, 2007 3:52 pm
by FraGGer
Если можно какую-либо ссылку на источник, где освещен вопрос как именно должна выглядеть процедура выделения памяти?
В статье http://polytech.ural.ru/vmprotect.htm этот вопрос не рассматривается...

Posted: Tue Apr 10, 2007 3:58 pm
by Admin
Старые версии VMProtect (ниже 1.23) больше не поддерживаются, т.к. проект стал полностью коммерческим.

Posted: Tue Apr 10, 2007 4:05 pm
by Admin
FraGGer wrote:Что касается кодировки - у Вас на форуме установлена кодировка ISO-8859-1, что вероятно и приводит к проблемам. Попробуйте установить 1251 или UTF8. Сейчас чтобы прочесть сообщения на форуме мне приходится на каждой странице переключать кодировку на 1251 вручную.
В своем профиле выберите русский язык, тогда форум будет отображаться в правильной кодировке.

Posted: Thu Apr 12, 2007 1:54 pm
by FraGGer
Ну не поддерживается, так не поддерживается. Разобраться с этой процедурой заняло минут 15...
В любом случае спасибо за рекомендацию.
Однако не уверен что поможет. Баг репорты продолжают сыпаться - и все без исключения под русской версией windows. Если бы причина была в выделении памяти, то ошибка с равной вероятностью проявлялась бы как под русской так и под английской версиями.

Posted: Thu Apr 12, 2007 2:45 pm
by Admin
Ну не поддерживается, так не поддерживается. Разобраться с этой процедурой заняло минут 15...
Процедура выделения памяти должна работать в двух режимах:
1. Выделение памяти: входной параметр ECX - размер блока в байтах; выходной параметр EAX - указатель на выделенный блок.
2. Освобождение памяти: входные параметры ECX=0, EDX - указатель на высвобождаемый блок.
Однако не уверен что поможет. Баг репорты продолжают сыпаться - и все без исключения под русской версией windows.
Непонятно - вы уже пробывали защиту с внешним выделением памяти или нет? :))

P.S. В любом случае нельзя исключать причину возникновения ошибки в самом драйвере (в алгоритме работы), а не в защите в виде VMProtect.

P.P.S. Вы можете попробывать защитить свой драйвер последней демо версией, правда в силу ограничений демки можно защитить всего одну процедуру, но для тестов я думаю этого вполне хватит.

Posted: Thu Apr 12, 2007 4:54 pm
by FraGGer
Спасибо - я же написал что уже разобрался с процедурой - для того отладчики и придумали :))
Пока еще не пробовал, но постараюсь сегодня сделать.