| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Системное программирование и WinAPI > Защита от записи |
| Автор: ApolloKiD 29.1.2014, 01:08 |
| Доброго времени суток! Задался очень интересным вопросом, как же предотвратить запись в мой процесс посторонними программами при помощи функции WriteProcessMemory(), не хукая никакие функции, и не залезая в ринг0. Способ нашёлся, но мне бы почитать о нём. Вот http://www.wasm.ru/forum/viewtopic.php?id=30762, Пост #4, где нашёлся такой метод, только я нигде не могу найти, где бы почитать о таком методе. Если кто знает, подскажите где можно об этом почитать или примеры посмотреть. Заранее спасибо! |
| Автор: DarthTon 29.1.2014, 16:15 | ||
Это не метод. Там код который грузит другой экзешник в АП текущего процесса заменяя оригинальный образ. В любом случае, метод описанный там похоже устарел. В Xp можно было читать и писать в ядерную область памяти из ринг3 немного извратившись. Теоретически, можно было убрать флаг Committed из VAD дескрипторов защищаемых областей. Таким образом WriteProcessMemory/ReadProcessMemory будут возвращать ошибки, а процесс будет работать нормально, т.к. PTE(Page Table Entry) защищаемых страниц остаются нетронутыми. Последняя версия UCP просто вызывает RtlSetThreadIsCritical/RtlSetProcessIsCritical для своего процесса и основного потока. А потом при малейшем подозрении на что-то нехорошее завершает свой поток роняя всю ОС в BSOD |
| Автор: ApolloKiD 29.1.2014, 21:29 | ||
Хотелось бы обойтись без всяких хуков. |
| Автор: ApolloKiD 30.1.2014, 00:10 | ||
Можно где-то почитать по подробнее об этом? Или пример посмотреть.. Заранее благодарен. |
| Автор: DarthTon 30.1.2014, 01:28 | ||
Читать особо негде. Раньше на васме была статья о Device\PhysicalMemory, сейчас можно найти несколько тем на форуме по словам Device\PhysicalMemory. Касательно VAD, инфы ещё меньше. Можешь глянуть мой код - https://github.com/DarthTon/DarkMMap/tree/master/VADPurge, там реализован поиск и удаление VAD дескриптора по виртуальному адресу. Но опять-таки, без использования ринг0 всё это будет работать до Хр включительно. Для современных ОС, самый правильный метод это http://msdn.microsoft.com/en-us/library/windows/hardware/ff558692(v=vs.85).aspx из драйвера. В колбеке фильтровать доступ на запись в АП. В придачу к этому нужно постоянно контролировать что никто посторонний твой колбек не убрал. 100% защиты нет, есть только максимальное усложнение жизни взломщику. И вообще, защита методом запрета WriteProcessMemory не лучший подход. Вместо этого лучше искать последствия WriteProcessMemory, т.е. саму изменённую память. |
| Автор: ApolloKiD 30.1.2014, 23:06 | ||
Было бы так, было бы легко, но дело в том, что этот участок не статичный. Значение что мне нужно защитить меняется самим приложением. Поэтому мне надо чтобы нельзя было писать в память либо читать ее, посторонними программами. |