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

Virtual Protect - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 5.00
ВДВ777
-4 / 0 / 0
Регистрация: 12.03.2013
Сообщений: 110
13.08.2013, 20:41     Virtual Protect #1
Хочу установить защиту на весь регион памяти 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
Посмотрите здесь:

C++ Не работает virtual
тупняк с virtual :) C++
virtual ~Function(); virtual function(); C++
virtual функции C++
virtual методы и template C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Убежденный
Системный программист
 Аватар для Убежденный
14184 / 6199 / 984
Регистрация: 02.05.2013
Сообщений: 10,324
Завершенные тесты: 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. Как будет не грубо?
Убежденный
Системный программист
 Аватар для Убежденный
14184 / 6199 / 984
Регистрация: 02.05.2013
Сообщений: 10,324
Завершенные тесты: 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 в помощь."
Эту функцию я знаю на отлично.
Вот тут я не пойму - эта функция опрашивает регионы памяти и возвращает статус страницы , для чего это?

Может пойти другим путем? есть ли способ скрыть всю длл , то есть я отачу длл к процессу , смотрю в отладчике - а длл не видать , что можете подсказать?
Убежденный
Системный программист
 Аватар для Убежденный
14184 / 6199 / 984
Регистрация: 02.05.2013
Сообщений: 10,324
Завершенные тесты: 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 void execute()=0 C++
Virtual и noreturn C++
Protected abstract virtual base pure virtual private destructor C++

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

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

Текущее время: 08:18. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru