| Indice Articolo |
|---|
| Structured Excepition Handling ovvero SEH |
| SEH frames |
| SEH in una applicazione multithread |
| Exploit tramite SEH |
| Eliminare la terminazione della applicazione |
| Tutte le pagine |
In quest'articolo cercheremo di spiegare cosa è l'SEH, come funziona e come è stato usato per creare degli exploit.
Un'eccezione è un evento che si verifica durante l'esecuzione di un programma, e richiede l'esecuzione di codice al di fuori del normale flusso di controllo.
Ci sono due tipi di eccezioni: le eccezioni hardware e quelle software.
Le eccezioni hardware sono create dalla CPU e possono derivare dall'esecuzione di alcune sequenze di istruzioni, come la divisione per zero o un tentativo di accedere a un indirizzo non valido di memoria.
Le eccezioni software invece sono quelle create esplicitamente dalle applicazioni o del sistema operativo. Ad esempio quando l'applicazione è in grado di rilevare un valore non valido per un parametro.
Gestione delle eccezioni strutturata è un meccanismo per la gestione delle eccezioni hardware e software. Pertanto, il codice potrà gestire le eccezioni hardware e software in modo identico. Gestione delle eccezioni strutturata permette di avere il controllo completo sulla gestione delle eccezioni, fornisce il supporto per debugger, ed è utilizzabile in tutti i linguaggi di programmazione.
La gestione delle eccezioni Vectored è una estensione per la gestione delle eccezioni strutturata.
Il sistema supporta anche la gestione della terminazione, che consente di garantire che, qualora venga eseguito una determinata parte di codice, verrà eseguito un blocco di codice di terminazione. Quest'ultimo blocco di terminazione viene eseguito indipendentemente da come il flusso di controllo lascia il codice iniziale. Ad esempio, un gestore di terminazione può garantire la pulizia di alcune variabili venga eseguita indipendentemente dal fatto che nella parte precedente di codice sia stata sollevata una eccezione o meno.
Ora vi chiederete ma dove vengono conservate le informazioni che gestiscono queste eccezioni? Beh nella maggior parte dei casi si trovano nello stack, nelle così dette SEH frames, e trovandosi lì è possibile sovrascriverle, magari utilizzando un buffer overflow.





