Я запаковал калькулятор с защитой памяти. Потом легко нашел программой Artmoney адреса нужных переменных, изменил их значения и тем самым повлиял на результат вычислений. Это потому что я использовал демо-версию или vmprotect защищает от изменения только секцию кода?
Поясните пожалуйста, как работает защита памяти в протектере и именно там защищается.
Защита памяти
Re: Защита памяти
Защита памяти проверяет перед запуском программы целостность всего файла на диске а также все секции программы, которые не имеют аттрибут WRITABLE. Секция данный (о которой вы как раз говорите) имеет такой флаг и не входит в проверку целостности.
Если вам необходимо защищать строковые константы, то такая возможность есть - необходимо использовать VMProtectDecryptStringA/VMProtectDecryptStringW. По поводу защиты остальных типов данных - рекомендуется как минимум размещать их в динамической памяти, как максимум - использовать криптоконтейнеры.
Если вам необходимо защищать строковые константы, то такая возможность есть - необходимо использовать VMProtectDecryptStringA/VMProtectDecryptStringW. По поводу защиты остальных типов данных - рекомендуется как минимум размещать их в динамической памяти, как максимум - использовать криптоконтейнеры.
Re: Защита памяти
Вопрос как раз в защите динамической памяти, но я уже понял, это не поддерживается.
Т.е. я программой Artmoney или ей подобной могу вычислить адрес нужной ячейки памяти, изменить ее и программа будет работать по другому алгоритму.
Не то чтобы предложение, просто интересно, программа же использует для защиты драйвер? Почему бы из драйвера не обламывать все попытки записи в память и открытия процесса? Простая вещь, а существенно усложнит возможность дампа у средне начинающего крякера. Кроме того такие отпадут такие фишки с ArtMoney которые делаю даже школьники, которые в компах не бумбум, но мануал прочитали какие кнопки надо нажать чтобы ресурсы в игре прокачать. Передо мной сейчас стоит такая задача, нужно защитить программу так, чтобы в ее память нельзя было писать кому не попадя. Вы планируете развивать защиту в этом направлении?
Или это все бред? Если так, поясните.
Т.е. я программой Artmoney или ей подобной могу вычислить адрес нужной ячейки памяти, изменить ее и программа будет работать по другому алгоритму.
Не то чтобы предложение, просто интересно, программа же использует для защиты драйвер? Почему бы из драйвера не обламывать все попытки записи в память и открытия процесса? Простая вещь, а существенно усложнит возможность дампа у средне начинающего крякера. Кроме того такие отпадут такие фишки с ArtMoney которые делаю даже школьники, которые в компах не бумбум, но мануал прочитали какие кнопки надо нажать чтобы ресурсы в игре прокачать. Передо мной сейчас стоит такая задача, нужно защитить программу так, чтобы в ее память нельзя было писать кому не попадя. Вы планируете развивать защиту в этом направлении?
Или это все бред? Если так, поясните.
Re: Защита памяти
В защите программы не используется драйвер.Не то чтобы предложение, просто интересно, программа же использует для защиты драйвер?
Защищать память на уровне блокировки записи в область данных программы в общем случае бесполезно. Если вы будете выносить защиту на уровень драйвера, то это как минимум может вызвать проблему с антивирусами, как максимум - пользователи не станут использовать программу, которая лезет на уровень ядра только для того чтобы защитить себя.Передо мной сейчас стоит такая задача, нужно защитить программу так, чтобы в ее память нельзя было писать кому не попадя. Вы планируете развивать защиту в этом направлении?
Как это сделать на уровне программы - я вам намекнул в предыдущем посте. Для защиты памяти можно использовать так называемые криптоконтейнеры. Что это такое - это некий класс, который умеет хранить критичные для взлома данные, т.е. при записи данных они автоматически шифруются (например с помощью симметричной криптографии), а при чтении происходит дешифрация данных и в вызывающую программу они попадают в "правильном" виде. При этом в памяти у вас всегда будут присутствовать данные только в зашифрованном виде и пропатчить их уже гораздо труднее чем в варианте без шифрации. Если пойти дальше, то в криптоконтейнер помимо шифрования можно сделать проверку целостности зашифрованных данных - т.е. при записи данных криптоконтейнер сам считает CRC по всему блоку данных, который он контролирует, и записывает результат в отдельную ячейку и затем при чтении идет проверка целостности данных.
Описанные выше механизмы уже используются нами в системе лицензирования Ultimate версии и уже хорошо себя зарекомендовали.