Check DEP Status

02/17/2012 17:03 insert-name-here#1
Hey weis jemand wie man abfragen kann ob der dep dienst eingeschlatet oder abgeschlatet ist? vorzugsweise in c++ oder c#
oder wie ich eine dll mit virtual protect schreibe das es garnicht nötig ist den dep dienst abzuschalten ?
vielen dank für eure antworten
02/17/2012 17:14 Dr. Coxxy#2
nehme an, du benutzst die bekannte detour funktion...

lies dir mal die msdn seite von virtualprotect durch, dann setze die entsprechenden rechte auf das trampolin && fertig.
02/18/2012 12:03 insert-name-here#3
Code:
void* DetourFunc(BYTE *src, const BYTE *dst, const int len)		//saved <len> bytes in ein trampolin, überschreibt die ersten 5 bytes der originalfunktion mit einem jump auf die hookfunktion und gibt einen pointer auf das trampolin zurück, der die gesicherten bytes und einen jump auf die originalfunktion NACH dem hook beinhaltet.
{
	BYTE *jmp = (BYTE*)malloc(len+5);
	DWORD dwback;
	VirtualProtect(src, len, PAGE_READWRITE, &dwback);
	memcpy(jmp, src, len);
	jmp += len;
	jmp[0] = 0xE9;
	*(DWORD*)(jmp+1) = (DWORD)(src+len - jmp) - 5;
	src[0] = 0xE9;
	*(DWORD*)(src+1) = (DWORD)(dst - src) - 5;
	VirtualProtect(src, len, dwback, &dwback);
	return (jmp-len);
}
das ist meine detour funktion weis aber nicht was ich da noch ändern soll ^^
02/18/2012 12:35 Dr. Coxxy#4
überleg doch mal...

was ist immoment das problem?
das allokierte trampolin "jmp" wird mit den gespeicherten opcodes und einem jump ausgeführt.
blöd, dass allokierter speicher standardmäßig keine execute rechte hat, sondern wie DEP schon sagt (Data execution prevention), sondern ist Data.
also musst du dem jump nun mit virtualprotect auch ausführungsrechte geben.
wenn du das nicht hinkriegst, lern bitte erstmal ordentlich c/c++ oder mach was einfacheres...
02/19/2012 17:26 .Infinite#5
Quote:
Originally Posted by http://msdn.microsoft.com/en-us/library/windows/desktop/aa366786%28v=vs.85%29.aspx
PAGE_EXECUTE_READWRITE
(0x40)

Enables execute, read-only, or read/write access to the committed region of pages.
...