2013-11-28 8 views
11

Was sind die Vorteile der Verwendung von EncodePointer/DecodePointer in Windows?Vorteile der Verwendung von EncodePointer/DecodePointer

MSDN sagen:
Kodierung global verfügbaren Zeigern hilft ihnen zu schützen ausgenutzt werden. Die Funktion EncodePointer verschleiert den Zeigerwert mit einem Geheimnis, so dass er von einem externen Agenten nicht vorhergesagt werden kann. Das verwendete Geheimnis EncodePointer ist für jeden Prozess unterschiedlich.

Jetzt ist Frage: Wenn der Angreifer außerhalb meines Programms ist, dann ist sein Adressraum anders als mein Adressraum, so dass eine Adresse in meiner App nicht dafür verwendbar ist. und wenn es einen Code in meinem Adressraum ausführen kann, kann es DecodePointer aufrufen und diese Adresse verwenden, um codierten Zeiger aufzurufen.

Also was ist die Verwendung dieser Funktionen und wie helfen sie mir mit erhöhter Sicherheit?

+0

Was ist, wenn der Angreifer * nicht * außerhalb Ihres Programms ist? Wie zum Beispiel ... jeder einzelne Angreifer in der Geschichte? –

+3

@KerrekSB Wenn es in meinem Programm ist ?! Dann kann es einfach ** DecodePointer ** auf meinem Funktionszeiger aufrufen und dann normalerweise aufrufen. Was ist der Vorteil, etwas während der Dekodierung zu kodieren, so einfach wie das Aufrufen einer Funktion ohne Schlüssel oder so? und was macht den Angreifer unfähig, ** DecodePointer ** aufzurufen? –

Antwort

10

Sie vermissen die Absicht, EncodePointer() schützt vor bösartigen Daten. Bevor bösartiger Code schädlich werden kann, muss er zuerst gestartet werden. Um dies zu erreichen, müssen Sie die Rücksprungadresse eines Funktionsaufrufs überschreiben oder einen Funktionszeiger überschreiben. Das Programm selbst aktiviert nun den Code, indem es von der Funktion zurückkehrt oder durch den Funktionszeiger aufruft. EncodePointer schützt einen Funktionszeiger, es gibt keine Möglichkeit für den Angreifer zu erraten, wie die von ihm geschriebenen Daten zu verschlüsseln sind, so dass er nach dem DecodePointer() - Aufruf des Programms immer noch auf seinen Code zeigt.

Daten können den EncodePointer nicht aufrufen.

1

Angreifer mit erhöhten Rechten können einen Thread in Ihrem Prozess erstellen. Kernel-Code kann auch Teile der virtuellen Adresse Ihres Prozesses einem anderen Benutzerprozess und/oder dem Systemprozess zuordnen.

Die Verwendung von EncodePointer macht dem Angreifer nur ein wenig schwerer, garantiert aber nichts.

Verwandte Themen