Что нового

Защита указанного региона виртуального адресного пространства

Viktor1703

AutoIT Гуру
Сообщения
1 535
Репутация
410
Как пользоваться функцией VirtualProtectEx и для чего она нужна, не пойму как её с AutoIt`ом совместить,подскажите пожалуйста...

Вот ещё раскопал по данному вопросу:

Zimper

В данном коде,я показую пример работы приложения с защишенными страницами памяти.Запрет доступа к страницам очень ефективен в качестве защити от сбоев.
В данном коде,пытаемся записать данные в защищенную страницу памяти.Для етого,меняем атрибуты защиты на PAGE_READWRITE,записуем данные,снова ставим атрибуты защиты PAGE_NOACCESS.
Код:
#include <iostream.h>

 typedef struct
  {
   int a;
   int b;
  }*data;

int main(int argc, char* argv[])
{
 MEMORY_BASIC_INFORMATION inf;
 DWORD old=0;
 data me=NULL;
 me=(data)VirtualAlloc((LPVOID)(30*1024*1024)))4*1024*1024),MEM_RESERVE|MEM_COMMIT,PAGE_NOACCESS);
 VirtualQuery((LPVOID)me,&inf,sizeof(inf));
 VirtualProtect(inf.BaseAddress,4096,PAGE_READWRITE,&old);
 me[0].a=12;
 me[0].b=34;
 VirtualProtect(inf.BaseAddress,4096,PAGE_NOACCESS,&old);
 Sleep(4000);


        return 0;
}
 
Автор
Viktor1703

Viktor1703

AutoIT Гуру
Сообщения
1 535
Репутация
410
Вот константы:

Код:
Global Const $PAGE_EXECUTE           = 0x10
Global Const $PAGE_EXECUTE_READ      = 0x20
Global Const $PAGE_EXECUTE_READWRITE = 0x40
Global Const $PAGE_EXECUTE_WRITECOPY = 0x80
Global Const $PAGE_NOACCESS          = 0x01
Global Const $PAGE_READONLY          = 0x02
Global Const $PAGE_READWRITE         = 0x04
Global Const $PAGE_WRITECOPY         = 0x08
Global Const $PAGE_GUARD             = 0x100
Global Const $PAGE_NOCACHE           = 0x200
Global Const $PAGE_WRITECOMBINE      = 0x400

$a_hCall = DllCall("kernel32.dll", "?", "VirtualProtectEx", "?", --, "?", --, "?", --, "?", --, "?", --)
 

firex

AutoIT Гуру
Сообщения
943
Репутация
205
Понадобилась реализация этих функций в AutoIt, а писать было лень. Однако, к моему удивлению, ими никто не поделился (даже на офф. форуме)...

Пользуйтесь:
Код:
Func _WinAPI_VirtualQueryEx( $hProcess, $pAddress )
	Local $aRes, $tMBI
	; *
	$tMBI = DllStructCreate( "ptr BaseAddress; ptr AllocBase; dword AllocProtect; ulong RegionSize; dword State; dword Protect; dword Type" )
	; ---
	$aRes = DllCall( "kernel32.dll", "ulong", "VirtualQueryEx", "handle", $hProcess, "ptr", $pAddress, "struct*", $tMBI, "ulong", DllStructGetSize( $tMBI ) )
	If @Error Or Not $aRes[0] Then _
		Return 0

	Return $tMBI
EndFunc

Func _WinAPI_VirtualProtectEx( $hProcess, $pAddress, $iSize, $iNewProtect, ByRef $iOldProtect )
	Local $aRes
	; ---
	$aRes = DllCall( "kernel32.dll", "bool", "VirtualProtectEx", "handle", $hProcess, "ptr", $pAddress, "ulong", $iSize, "dword", $iNewProtect, "dword*", "" )
	If @Error Or Not $aRes[0] Then _
		Return 0

	$iOldProtect = $aRes[5]
	Return $aRes[0]
EndFunc


P.S. Надо их добавить в WinAPI.au3
 
Верх