Защита памяти

Issues related to VMProtect
Post Reply
kratorman
Posts: 3
Joined: Sat Apr 24, 2010 6:36 pm

Защита памяти

Post by kratorman »

Я запаковал калькулятор с защитой памяти. Потом легко нашел программой Artmoney адреса нужных переменных, изменил их значения и тем самым повлиял на результат вычислений. Это потому что я использовал демо-версию или vmprotect защищает от изменения только секцию кода?

Поясните пожалуйста, как работает защита памяти в протектере и именно там защищается.
Admin
Site Admin
Posts: 2586
Joined: Mon Aug 21, 2006 8:19 pm
Location: Russia, E-burg
Contact:

Re: Защита памяти

Post by Admin »

Защита памяти проверяет перед запуском программы целостность всего файла на диске а также все секции программы, которые не имеют аттрибут WRITABLE. Секция данный (о которой вы как раз говорите) имеет такой флаг и не входит в проверку целостности.
Если вам необходимо защищать строковые константы, то такая возможность есть - необходимо использовать VMProtectDecryptStringA/VMProtectDecryptStringW. По поводу защиты остальных типов данных - рекомендуется как минимум размещать их в динамической памяти, как максимум - использовать криптоконтейнеры.
kratorman
Posts: 3
Joined: Sat Apr 24, 2010 6:36 pm

Re: Защита памяти

Post by kratorman »

Вопрос как раз в защите динамической памяти, но я уже понял, это не поддерживается.
Т.е. я программой Artmoney или ей подобной могу вычислить адрес нужной ячейки памяти, изменить ее и программа будет работать по другому алгоритму.
Не то чтобы предложение, просто интересно, программа же использует для защиты драйвер? Почему бы из драйвера не обламывать все попытки записи в память и открытия процесса? Простая вещь, а существенно усложнит возможность дампа у средне начинающего крякера. Кроме того такие отпадут такие фишки с ArtMoney которые делаю даже школьники, которые в компах не бумбум, но мануал прочитали какие кнопки надо нажать чтобы ресурсы в игре прокачать. Передо мной сейчас стоит такая задача, нужно защитить программу так, чтобы в ее память нельзя было писать кому не попадя. Вы планируете развивать защиту в этом направлении?
Или это все бред? Если так, поясните.
Admin
Site Admin
Posts: 2586
Joined: Mon Aug 21, 2006 8:19 pm
Location: Russia, E-burg
Contact:

Re: Защита памяти

Post by Admin »

Не то чтобы предложение, просто интересно, программа же использует для защиты драйвер?
В защите программы не используется драйвер.
Передо мной сейчас стоит такая задача, нужно защитить программу так, чтобы в ее память нельзя было писать кому не попадя. Вы планируете развивать защиту в этом направлении?
Защищать память на уровне блокировки записи в область данных программы в общем случае бесполезно. Если вы будете выносить защиту на уровень драйвера, то это как минимум может вызвать проблему с антивирусами, как максимум - пользователи не станут использовать программу, которая лезет на уровень ядра только для того чтобы защитить себя.
Как это сделать на уровне программы - я вам намекнул в предыдущем посте. Для защиты памяти можно использовать так называемые криптоконтейнеры. Что это такое - это некий класс, который умеет хранить критичные для взлома данные, т.е. при записи данных они автоматически шифруются (например с помощью симметричной криптографии), а при чтении происходит дешифрация данных и в вызывающую программу они попадают в "правильном" виде. При этом в памяти у вас всегда будут присутствовать данные только в зашифрованном виде и пропатчить их уже гораздо труднее чем в варианте без шифрации. Если пойти дальше, то в криптоконтейнер помимо шифрования можно сделать проверку целостности зашифрованных данных - т.е. при записи данных криптоконтейнер сам считает CRC по всему блоку данных, который он контролирует, и записывает результат в отдельную ячейку и затем при чтении идет проверка целостности данных.
Описанные выше механизмы уже используются нами в системе лицензирования Ultimate версии и уже хорошо себя зарекомендовали.
kratorman
Posts: 3
Joined: Sat Apr 24, 2010 6:36 pm

Re: Защита памяти

Post by kratorman »

Все понятно. Спасибо.
Post Reply