Einige API Funktionen umschreiben
-
Ich wollte fragen ob man sich die API Funktion VirtualProtect selbst schreiben kann? Es geht nur darum die Schreib Rechte im eigenen Prozess zu ändern.Was ich damit vorhabe? Funktionen zu verändern per asm oder C++. Dies funktioniert nur wenn man genügend Rechte hat eine Funktion umzuschreiben.
Das geht nicht:unsigned char *pFunc=(unsigned char*)&MyFunction; unsigned char NewByte=0xE9; _asm { mov eax,pFunc mov al,[NewByte] mov [ebx],al }Da kommt nur ne Access Violation raus, dies hingegen klappt:
unsigned char *addr=(unsigned char*)&OrginalFunktion; unsigned char NewByte=0xE9; DWORD oldpro; VirtualProtect(reinterpret_cast<void*>(&OrginalFunktion),1000,PAGE_EXECUTE_READWRITE,&oldpro); _asm { mov ebx,addr mov al,[NewByte] mov [ebx],al } VirtualProtect(reinterpret_cast<void*>(&OrginalFunktion),1000,oldpro,0);Und es geht darum ob man mithilfe von assembler/C++ diese Funktion selbst schreiben kann oder den PM (Protection Mode) kurz ausschalten kann.
-
Ich denke, der Thread wäre im WinAPI-Forum besser aufgehoben. Ansonsten: Dass das Vorhaben ziemlich wahnwitzig ist, ist dir ja vermutlich schon klar. Hinter der Funktion wird im Zweifel ein Syscall stecken; jedenfalls muss sich die Funktion an den Kernel wenden, um Rechte anzufordern oder abzugeben. Womöglich kannst du eine Funktion schreiben, die sich selbst an den Kernel wendet, aber ich sehe nicht wirklich, wozu das gut sein soll, wenn es eine solche Funktion in der Bibliothek schon gibt.
Übrigens: Mit VirtualProtect allein ist es nicht getan, wenn du im Codesegment herumschreiben willst. Du musst auch den instruction chache erneuern (FlushInstructionCache aufrufen).
-
Danke für die schnelle Antwort es geht nur darum etwas selbst zu programmieren^^.
Ich kann jede funktion aus ner Library ziehen da es ging nur darum ob ich vielleicht so etwas neues Lernen kann.