Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

Virtual Protect - C++

13.08.2013, 20:41. Просмотров 1491. Ответов 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 проверяю размер и длину модуля - все отлично!
ошибки в студию пожалуйста!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.08.2013, 20:41
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Virtual Protect (C++):

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

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

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

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

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

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

7
Убежденный
Ушел с форума
Эксперт С++
15701 / 7211 / 1139
Регистрация: 02.05.2013
Сообщений: 11,637
Записей в блоге: 1
Завершенные тесты: 1
13.08.2013, 21:46 #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 минут
И вообще это все очень грубо.
0
ВДВ777
-4 / 0 / 0
Регистрация: 12.03.2013
Сообщений: 110
13.08.2013, 21:53  [ТС] #3
Цитата Сообщение от Убежденный Посмотреть сообщение
Пустой цикл...

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

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

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

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

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

2) Вызвать VirtualProtect, указывая в качестве аргумента адрес начала каждой области и ее длину.
Атрибуты защиты - PAGE_EXECUTE_READWRITE.
0
ВДВ777
-4 / 0 / 0
Регистрация: 12.03.2013
Сообщений: 110
13.08.2013, 22:10  [ТС] #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 в помощь."
Эту функцию я знаю на отлично.
Вот тут я не пойму - эта функция опрашивает регионы памяти и возвращает статус страницы , для чего это?

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

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

Цитата Сообщение от ВДВ777 Посмотреть сообщение
Вот тут я не пойму - эта функция опрашивает регионы памяти и возвращает статус страницы , для чего это?
Как это для чего ? Изменять атрибуты защиты можно только у закоммиченных страниц (MEM_COMMIT).
Если сделать VirtualProtect на стнанице с MEM_RESERVE, функция завершится с ошибкой.
1
-=ЮрА=-
Заблокирован
Автор FAQ
13.08.2013, 22:32 #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, всё равно нельзя залочить память, кто то напишет драйвер в нулевом кольце и все наши старания полетят к чертям...

0
ВДВ777
-4 / 0 / 0
Регистрация: 12.03.2013
Сообщений: 110
13.08.2013, 22:32  [ТС] #8
убежденному спасибо , натолкнул меня на правильную мысль , все работает спс \тему закрыть
0
13.08.2013, 22:32
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.08.2013, 22:32
Привет! Вот еще темы с ответами:

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

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