Windows File Protection, sradichiamola!
Saturday, August 5th, 2006WFP, acronimo di Windows File Protection, è l’ennesima feature di dubbia utilità integrata nelle ultime versioni di Windows. Infatti come spesso accade non funziona quando serve e funziona quando non serve!
WFP è un meccanismo di protezione il cui compito è essenzialmente quello di impedire manomissioni ai files di sistema di Windows: i files cioè essenziali per il funzionamento del sistema operativo, ed in particolare i PE (exe, dll, ocx, sys, cpl etc.) presenti nella directory system32, vengono infatti costantemente monitorati e in caso di eliminazione o modifica degli stessi, WFP tenta di ripristinarne le rispettive versioni originali, in modo da mantenere intatte la stabilità e la sicurezza del sistema.
WFP non mi aveva mai dato fastidio… fino a quando l’altro giorno mi è capitato di voler installare alcune utilities sostitutive a quelle già presenti in Windows, ma dotate di funzionalità avanzate. Con mia amara sorpresa ho constatato che dopo l’installazione tutto era come prima e di tali applicazioni non c’era traccia… solo dopo una reinstallazione attentamente monitorata ho verificato che il sistema operativo ripristinava dopo pochi istanti le versioni originali di tutti i files che erano stati modificati nella directory system32. Dopo un’accurata analisi ho scoperto finalmente l’esistenza, sempre all’interno di system32, di una directory nascosta e compressa, dal nome autoesplicativo “dllcache”. Al suo interno una copia della maggior parte dei files di sistema, un vero e proprio repository da cui WFP recupera i files originali… ed è quindi qui che bisogna metter mano prima di effettuare l’installazione o la modifica dei files monitorati da WFP.
Esaminiamo il funzionamento di WFP considerando ad esempio il file mspaint.exe (il famoso Paint di Windows): eliminandolo dalla directory dllcache oppure sostituendolo con un altro eseguibile con lo stesso nome, non succede assolutamente niente
Invece eliminandolo dalla directory system32 oppure sostituendolo con un altro eseguibile con lo stesso nome, dopo pochi istanti entra in azione WFP la quale effettua tutta una serie di operazioni: controlla il file in system32 e se non esiste più o non risulta autentico allora lo cerca in dllcache; è interessante notare che la ricerca in dllcache avviene anche se il file è stato trovato in system32 e risulta autentico… questo rende quindi possibile anche un eventuale ripristino al contrario, per una maggiore sicurezza. La successiva ricerca in dllcache implica un controllo del tutto analogo, ma questa volta se il file non esiste più o non risulta autentico (e contemporaneamente anche l’omonimo in system32 risulta non autentico… ricordate il ripristino al contrario!) WFP avverte l’utente della manomissione, chiedendogli di inserire il CD di Windows da cui poter recuperare il file originale. Ovviamente, al contrario, se il file è stato trovato in dllcache e risulta autentico allora WFP lo ricopia silenziosamente in system32, eventualmente soprascrivendo il proprio omonimo se presente, riportando il sistema alla normalità. Semplice vero?
Nel peggiore dei casi quindi, quando non esiste una copia autentica né in system32 né in dllcache, l’utente (solo se amministratore) si ritrova questa bella finestra:

Cliccando su Annulla viene poi richiesta una conferma per mantenere la versione non originale del file in dllcache, che funziona anche se il file in dllcache non esiste proprio… quindi più che mantenere la versione modificata semplicemente non effettua il ripristino!

Nel corso degli esperimenti ho potuto constatare come la scansione automatica sia effettuata dall’utility SFC (System File Checker), su cui si basa anche un’applicazione per la scansione manuale… ed infatti eseguendo dal prompt il comando “sfc.exe /scannow” appare questa finestra:

che effettua il medesimo controllo su tutti i files protetti. Se trova un file mancante o modificato e non riesce a recuperarne la versione originale dalla directory dllcache allora visualizza il messaggio di cui sopra, con la richiesta del CD di Windows. Il famigerato WFP in conclusione è costituito da tre librerie sfc.dll, sfc_os.dll e sfcfiles.dll che si trovano nella directory system32. Su queste medesime librerie si basano sia il meccanismo di scansione automatica attivata su notifica del SO sia l’utility sfc.exe per la scansione manuale. Gli stessi files che costituiscono SFC e la base di WFP sono quindi soggetti anch’essi al monitoraggio di WFP stesso, ed infatti una loro copia è presente nella directory dllcache.
A questo punto, avendo bisogno di apportare numerose modifiche al sistema, per evitare problemi di ogni sorta ho scelto di sradicare completamente WFP… in rete si trovano vari tutorials per disabilitarla tramite modifiche al registro di configurazione di sistema e addirittura modifiche alle dll di SFC con un editor esadecimale per le versioni più recenti, da Windows 2000 SP2 in poi. Ma per essere sicuro di liberarmi di questa scomoda feature ho potuto testare il sistema più semplice e valido per qualsiasi versione, che consiste nell’avviare il pc da un sistema alternativo, quale ad esempio un cd avviabile con BartPE o un altro dispositivo avviabile con supporto rw per file system NTFS, ed eliminare banalmente i files sfc*.* dalle directories system32 e dllcache (l’avvio da un sistema alternativo si rivela necessario perché normalmente i files risultano bloccati). A questo punto sicuramente al riavvio non ci sarà più il pericolo di ritrovarsi WFP… ma attenzione se lo fate anche voi, perché in tal modo il vostro sistema risulterà più vulnerabile! In compenso però potrete divertirvi ad apportare tutte le modifiche che vorrete…
Naturalmente io non mi ritengo responsabile per i danni che potrete fare direttamente o subire indirettamente sul vostro sistema!

Maggiori dettagli su WFP e SFC li trovate a questi links sul sito di supporto Microsoft: