Structured Exception Handling

Programmiersprachen, APIs, Bibliotheken, Open Source Engines, Debugging, Quellcode Fehler und alles was mit praktischer Programmierung zu tun hat.
Antworten
Psycho
Establishment
Beiträge: 156
Registriert: 16.09.2002, 14:23

Structured Exception Handling

Beitrag von Psycho »

Hallo,

ich habe ein Programm geschrieben. Wenn ich es mit OllyDbg öffne und manuell die ersten Befehle mit folgenden überschreibe:

PUSH exceptionHandler // Überschreibe die Adresse des Exception-Handlers
PUSH FS:[0]
MOV FS:[0], ESP
INT3 // Löse eine Exception aus

so ruft das Programm korrekt den ExceptionHandler auf.

Mache ich genau das gleiche zum Beispiel mit notepad.exe, so sagt mir Olly: "Program was unable to handle exception" und der Prozess wird beendet.

Habt ihr eine Idee, an was das liegen könnte?
Hab von SEHOP gehört, das bei meinem Windows 7 aber standardmäßig aus sein soll.
Benutzeravatar
Krishty
Establishment
Beiträge: 8268
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Structured Exception Handling

Beitrag von Krishty »

Visual C++ benutzt in den neuesten Versionen, falls mit /GS kompiliert, einen Security-Cookie, um Pufferüberläufe zu verhindern. Derselbe Cookie wird auch benutzt, um zu verifizieren, dass keine Exception-Handler von Drittparteien überschrieben wurden. Ich kenne mich zu wenig mit PE-Internals aus, um zu sagen, ob das hier von Belang ist, aber vielleicht hilft es ja.

Wollen Sie mehr wissen?

Gruß, Ky

Edit: Und du benutzt auch sicher eine x86-Version ohne registrierte Handler? Soweit ich verstanden habe, sind registrierte Handler unabhängig von SEHOP:
Daher bietet er Anwendungen unabhängig davon Schutz, ob sie unter Verwendung der aktuellsten Verbesserungen, z. B. der Option /SAFESEH, kompiliert wurden oder nicht.
(Quelle) Im Umkehrschluss sind imo Anwendungen nicht automatisch ungeschützt, wenn sie mit /SAFESEH kompiliert wurden und man SEHOP deaktiviert. Da das Notepad für Windows 7 bedeutend überarbeitet wurde, kann ich mir vorstellen, dass auch deine x86-Version registrierte Handler nutzt.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Psycho
Establishment
Beiträge: 156
Registriert: 16.09.2002, 14:23

Re: Structured Exception Handling

Beitrag von Psycho »

Ok es scheinen wohl registrierte Handler zu sein. Weißt Du, wo die Tabelle der Handler steht, bzw wie Windows prüft, ob ein Handler gültig ist? Konnte dazu nichts finden.
Finde es nur etwas merkwürdig, woher Windows überhaupt weiß, ob eine EXE SAFESEH geschützt ist. Ich habe den Handler ja vor irgendwelchen msvcrt-Aufrufe gemacht und im PE-Header scheint auch nichts spezielles dazu zu stehen (Oder doch eventuell in der Load Config Table?).
Benutzeravatar
Krishty
Establishment
Beiträge: 8268
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Structured Exception Handling

Beitrag von Krishty »

Die stehen im pdata-Abschnitt der PE. Von innerhalb des Programms kannst du per
extern PVOID __safe_se_handler_table[]; /* base of safe handler entry table */
extern BYTE __safe_se_handler_count; /* absolute symbol whose address is the count of table entries */

darauf zugreifen (Quelle); wie es von außen geht, weiß ich nicht.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Antworten