Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 5.00
ВДВ777
-4 / 0 / 0
Регистрация: 12.03.2013
Сообщений: 110
#1

Virtual Protect - C++

13.08.2013, 20:41. Просмотров 1335. Ответов 7
Метки нет (Все метки)

Хочу установить защиту на весь регион памяти dll , но нечего не выходит , при просмотре через редактор памяти , атрибуты те же остаются , вот код:

DWORD Guard = 0x0;

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void shield()
{
    if(show==1)
    {
MODULEINFO moduleInf = {0};
moduleInf = GetModuleData ("имя.dll");
for(Guard=0;Guard<(DWORD)moduleInf.SizeOfImage;Guard++);
 
DWORD old_protect = 0;
PrintText2(500,500,RED,dMenu.pFont,"начало модуля: %X\nконец модуля: %X\nзащита: %X",moduleInf.lpBaseOfDll , moduleInf.SizeOfImage,((DWORD)moduleInf.lpBaseOfDll+Guard));
 
VirtualProtect ((void*)((DWORD)moduleInf.lpBaseOfDll+Guard), ((DWORD)moduleInf.lpBaseOfDll+Guard) , PAGE_GUARD , &old_protect);
 
    }
}
так же пробовал
C++
1
VirtualProtect ((void*)((DWORD)moduleInf.lpBaseOfDll+Guard), sizeof((DWORD)moduleInf.lpBaseOfDll+Guard) , PAGE_GUARD , &old_protect);
с помощью PrintText2 проверяю размер и длину модуля - все отлично!
ошибки в студию пожалуйста!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.08.2013, 20:41     Virtual Protect
Посмотрите здесь:

Protected abstract virtual base pure virtual private destructor - C++
Хай, all) Вопрос не для начинающих и дурацкий) В разделе для экспертов публиковать не стал, чтобы не засорять его) Наткнулся тут на...

virtual функции - C++
я как-то пропустил лекцию по этой теме, и теперь совсем не понимаю назначение этих функций. может кто поделиться ссылкой и нормальными...

тупняк с virtual :) - C++
Здравствуйте. пытаюсь прикрутить икслючения к своему &quot;модулю&quot;, и натыкаюсь на ругань компилятора: error: expected unqualified-id before...

Virtual и noreturn - C++
Возможно ли подружить virtual и noreturn? Пишу: struct test { int func(){error();} ]virtual void error(){throw 0;} }; ...

virtual ~Function(); virtual function(); - C++
Что такого дает приставка virtual: функциям деструкторам и class? В Википедии написано,что если деструктор не виртуальный это может...

Не работает virtual - C++
Вот написал пробный код, он не срабатывает: #include &lt;iostream&gt; using namespace std; class A{ public: virtual int c(); ...

Virtual метод - C++
Разбираю основы С++. Застрял на понятии virtual. Во всех источниках написано что это все сделано чтобы потомок родительского класса мог...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Убежденный
Системный программист
Эксперт С++
15296 / 6928 / 1096
Регистрация: 02.05.2013
Сообщений: 11,336
Завершенные тесты: 1
13.08.2013, 21:46     Virtual Protect #2
Цитата Сообщение от ВДВ777 Посмотреть сообщение
for(Guard=0;Guard<(DWORD)moduleInf.SizeOfImage;Guard++);
Пустой цикл...
Цитата Сообщение от ВДВ777 Посмотреть сообщение
VirtualProtect ((void*)((DWORD)moduleInf.lpBaseOfDll+Guard), ((DWORD)moduleInf.lpBaseOfDll+Guard) , PAGE_GUARD , &old_protect);
Зачем Вам здесь PAGE_GUARD ? Вообще, эту константу нужно использовать вместе
с другими константами, а не саму по себе.

Добавлено через 6 минут
И вообще это все очень грубо.
ВДВ777
-4 / 0 / 0
Регистрация: 12.03.2013
Сообщений: 110
13.08.2013, 21:53  [ТС]     Virtual Protect #3
Цитата Сообщение от Убежденный Посмотреть сообщение
Пустой цикл...

Зачем Вам здесь PAGE_GUARD ? Вообще, эту константу нужно использовать вместе
с другими константами, а не саму по себе.

Добавлено через 6 минут
И вообще это все очень грубо.
1.цикл не пустой!проверил и вывел на экран - все верно
2. А как правильно использовать константу?
3. Как будет не грубо?
Убежденный
Системный программист
Эксперт С++
15296 / 6928 / 1096
Регистрация: 02.05.2013
Сообщений: 11,336
Завершенные тесты: 1
13.08.2013, 22:01     Virtual Protect #4
Цитата Сообщение от ВДВ777 Посмотреть сообщение
1.цикл не пустой!проверил и вывел на экран - все верно
Точка с запятой в конструкции for.

Цитата Сообщение от ВДВ777 Посмотреть сообщение
2. А как правильно использовать константу?
PAGE_GUARD - это охраняемая страница. Доступ к охраняемой странице генерирует
исключение специального типа. Система использует этот механизм для коммита
страниц памяти, принадлежащих стеку. Уверены, что это то, что нужно, а не
PAGE_EXECUTE_READWRITE ?

Цитата Сообщение от ВДВ777 Посмотреть сообщение
3. Как будет не грубо?
Не грубо:

1) Узнать, какие области внутри проекции exe-файла имеют одинаковые атрибуты защиты.
VirtualQuery в помощь.

2) Вызвать VirtualProtect, указывая в качестве аргумента адрес начала каждой области и ее длину.
Атрибуты защиты - PAGE_EXECUTE_READWRITE.
ВДВ777
-4 / 0 / 0
Регистрация: 12.03.2013
Сообщений: 110
13.08.2013, 22:10  [ТС]     Virtual Protect #5
Цитата Сообщение от Убежденный Посмотреть сообщение
Точка с запятой в конструкции for.



PAGE_GUARD - это охраняемая страница. Доступ к охраняемой странице генерирует
исключение специального типа. Система использует этот механизм для коммита
страниц памяти, принадлежащих стеку. Уверены, что это то, что нужно, а не
PAGE_EXECUTE_READWRITE ?



Не грубо:

1) Узнать, какие области внутри проекции exe-файла имеют одинаковые атрибуты защиты.
VirtualQuery в помощь.

2) Вызвать VirtualProtect, указывая в качестве аргумента адрес начала каждой области и ее длину.
Атрибуты защиты - PAGE_EXECUTE_READWRITE.
1. точка с запятой чтобы не выполнялся следующий блок , так как я всю функцию вызываю в потоке - будет краш
2.PAGE_GUARD - я не уверен что это что мне нужно , мне необходимо наложить на регион памяти dll'ки защиту , чтобы при отлаживание не было видно содержимого моей dll.
3."Не грубо:
1) Узнать, какие области внутри проекции exe-файла имеют одинаковые атрибуты защиты.
VirtualQuery в помощь."
Эту функцию я знаю на отлично.
Вот тут я не пойму - эта функция опрашивает регионы памяти и возвращает статус страницы , для чего это?

Может пойти другим путем? есть ли способ скрыть всю длл , то есть я отачу длл к процессу , смотрю в отладчике - а длл не видать , что можете подсказать?
Убежденный
Системный программист
Эксперт С++
15296 / 6928 / 1096
Регистрация: 02.05.2013
Сообщений: 11,336
Завершенные тесты: 1
13.08.2013, 22:18     Virtual Protect #6
Цитата Сообщение от ВДВ777 Посмотреть сообщение
for(Guard=0;Guard<(DWORD)moduleInf.SizeOfImage;Guard++);
Этот цикл ничего не делает. Вообще.

Цитата Сообщение от ВДВ777 Посмотреть сообщение
PAGE_GUARD - я не уверен что это что мне нужно , мне необходимо наложить на регион памяти dll'ки защиту , чтобы при отлаживание не было видно содержимого моей dll.
Ну сделайте тогда PAGE_NOACCESS. Никто не сможет ничего прочесть. И выполнить тоже. И Вы тоже.

Цитата Сообщение от ВДВ777 Посмотреть сообщение
Вот тут я не пойму - эта функция опрашивает регионы памяти и возвращает статус страницы , для чего это?
Как это для чего ? Изменять атрибуты защиты можно только у закоммиченных страниц (MEM_COMMIT).
Если сделать VirtualProtect на стнанице с MEM_RESERVE, функция завершится с ошибкой.
-=ЮрА=-
Заблокирован
Автор FAQ
13.08.2013, 22:32     Virtual Protect #7
К словам Убежденный, остаётся добавить что PAGE_GUARD даже при установке просигналит первый раз и потом защита сбросится
http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx

// Try to lock the committed memory again. This succeeds the second
// time because the guard page status was removed by the first
// access attempt.
Добавлено через 2 минуты

Не по теме:

ВДВ777, всё равно нельзя залочить память, кто то напишет драйвер в нулевом кольце и все наши старания полетят к чертям...

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.08.2013, 22:32     Virtual Protect
Еще ссылки по теме:

Virtual метод - C++
Приветствую. Собственно интересует вопрос следующего характера, а именно (возможно при изучении пропустил данный момент) VMT: Допустим...

virtual void execute()=0 - C++
ребят,скажите пожалуйста что значит эта за строчка virtual void execute()=0 ???для чего она нужна?и что она вообще делает?

Ключевое слово virtual - C++
Что означает ключевое слово virtual в списке базовых классов при декларации класса для случая множественного наследования?

Ошибка: templates may not be 'virtual' - C++
Здравствуйте форумчане. Какими способами можно избежать этой ошибки? ошибка: templates may not be 'virtual' class IObject { ...

virtual методы и template - C++
Здраствуйте! Объясните пожалуйста понятно для чего нужны virtual методы, в том числе виртуальный полиморфизм, если можно наведите пример. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
ВДВ777
-4 / 0 / 0
Регистрация: 12.03.2013
Сообщений: 110
13.08.2013, 22:32  [ТС]     Virtual Protect #8
убежденному спасибо , натолкнул меня на правильную мысль , все работает спс \тему закрыть
Yandex
Объявления
13.08.2013, 22:32     Virtual Protect
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru