|
Nell'articolo
Il Registro di Windows ho descritto la struttura del registro in termini di
corrispondenze con determinati file. Focalizziamoci sulla prima sezione ossia
l'elenco delle corrispondenze tra file e HKey_Local_Machine: chi è che non ha
mai tentato di copiare questi file? Tutti quanti, e tutti quanti si sono beccati
un bel errorino del tipo

In questo caso ad esempio abbiam provato a copiarci il SAM e taac, errore. In
linea di massima di fronte ad un qualsiasi file aperto in modalità esclusiva
come in questo caso, si può realizzare un driver per permetterci la copia; nel
caso specifico però la strada è molto più breve e passa semplicemente attraverso
l'utilizzo della api Win32 per il Registry ed il privilegio di Backup; le api
Win32 che utilizzeremo sono la RegCreateKeyEx (per ottenere un handle
alla chiave di registro che vogliamo salvare) e la RegSaveKey (per
salvare la chiave in un file). Con la suddetta accoppiata possiamo eseguire il
backup di una qualsiasi chiave di registro ivi incluse le root
(HKEY_LOCAL_MACHINE, etc...). Se vogliamo salvarci la
HKEY_LOCAL_MACHINE non c'è bisogno di chiamare la RegCreateKeyEx in
quanto come handle può essere specificata la costante HKEY_LOCAL_MACHINE
(valore $80000002); stesso discorso per le altre root (costanti
corrispondenti dichiarate nella unit Windows). Il problema che ci si presenta è come backuppare
chiavi che hanno una ACL che ci impedisce l'accesso: la chiave HKLM\SAM è
un esempio; ed è qui che interviene il privilegio di Backup: il privilegio di
Backup (di default appartiene alle utenze dei gruppi Administrators e Backup
Operators) consente di bypassare l'ACL settata su un elemento del File System o
su un elemento del Registry. Sei un file che è accessibile solo ed unicamente
dall'utenza System? Behh, se dispongo del Privilegio di Backup e ce l'ho
abilitato, allora posso leggerti e scriverti. Questo concetto viene espresso
chiaramente nell'articolo
LSA Secrets
nell'ambito della descrizione dell'implementazione alternativa (fondo pagina).
Con il Privilegio di Backup possiamo quindi utilizzare la RegSaveKey
ovunque e backupparci l'intero registro senza dover passare per la copia dei
file corrispondenti nella cartella C:\Windows\System32\config . Per
eseguire il Restore si ricorre alla corrispondente api win32 che si
chiama appunto RegRestoreKey . Un
esempio completo e funzionante di Backup e Restore dell'intero Registry lo si
può trovare all'indirizzo
http://www.joejoesoft.com/cms/showpage.php?cid=124
Ho testato l'applicativo sia in Backup sia in Restore su una installazione di
Windows XP in emulazione su VirtualBox (che uso come test vari da oltre 1 anno e
quindi con un Registry bello devastato) ed è tutto OK. Ci mette un pò ad
eseguire il backup ma questo non è un problema dell'applicativo (fare
Milano-Roma in 10 secondi non è possibile). In ogni caso va usato con cautela
nel Restore (non si sa mai ....): far le prove su un sistema di prova e
verificare bene.
In conclusione RegSaveKey e RegRestoreKey sono la chiave di
tutto
Un altro esempio di utilizzo delle suddette api win32 è l'applicativo
RegHives in C
|