In un mio articolo in inglese avevo esplorato il file shell32.dll trovandovi dentro informazioni molto interessanti, tra le quali i famigerati CLSID (Class ID) in forma di CLSID_identificativo = "{...}", come se un file di testo con questa specie di assegnamenti fosse stato incluso direttamente in shell32.dll.
A distanza di un po' di tempo trovo, per caso, un batch file per la linea
di comandi (cmd) il cui scopo è di creare cartelle nascoste
(Hidden folders). Al che, incuriosito, gli do un'occhiata e scopro
che qui per cartelle nascoste
si intendono cartelle con nomi
speciali, che evidentemente fanno sì che il sistema operativo XP le
tratti in modo speciale.
La cosa è molto semplice: al nome vero
della cartella si appiccica,
come se fosse una estensione, un CLSID o qualcosa di simile. Per esempio
la cartella MieDocumenti.{ECF03A32-103D-11d2-854D-006008059367}
è una cartella nascosta con proprietà
di essere una cartella
utente documenti (My Documents)? Per scoprire in che senso
e modo resetto e creo una cartella con questo nome su MS Windows XP;
ma prima di far ciò osservo che CLSID_MyDocuments è
450D8FBA-AD25-11D0-98A8-0800361B1103, diverso da quello che ho
io in shell32. Si tratta probabilmente di un'altra cosa.
L'autore del batch afferma di aver prelevato tali codici dai registry di Windows. Ove tutto si crea, nulla si distrugge, i famelici famigerati registry di Windows... Provo un wine regedit e vedo cosa c'è. Trovo HKEY_CLASSES_ROOT\CLSID, che contiene parecchi di quei numeroni lunghi... per esempio 20D04FE0-3AEA-1069-A2D8-08002B30309D corrisponde a My Computer e in effetti mi trovo con quanto già trovato in shell32. Ma qui ce ne sono altri, molti altri; alcuni dal valore potrebbero essere specifici di wine, sicché la cosa migliore per questa analisi è ripartire con MS Windows Xp.
Dalla linea di comando provo a creare qualche cartella con le estensioni
apposite. Funziona! Per esempio ciò che accade con la CLSID
di My Computer è di vedere l'iconcina My Computer
invece di
quella tipica delle cartelle. Doppiocliccandoci sopra si aprono le
Risorse del Computer (My Computer appunto)! Cioè, da explorer
non siamo più in grado di vedere quella cartella come cartella... tranne
nel caso in cui la rinominiamo e togliamo l'estensione.
Lo stesso accade se dalla linea di comando eseguo
explorer cartella.{20D04FE0-3AEA-1069-A2D8-08002B30309D}:
come risultato ottengo l'apertura della finestra Risorse del Computer.
Ricordate la strana sintassi, trovata in un LNK (file shortcut),
del tipo explorer ::{CLSID...}\::{CLDID...} che in effetti
funzionava? Possiamo riusarla e vedere se funziona direttamente
.
In effetti explorer ::{20D04FE0-3AEA-1069-A2D8-08002B30309D}
apre le risorse del computer (cosa che avevo già verificato). Ho provato
altre CLSID che mi sembravano logico
associati a explorer e non
ho sempre ottenuto il successo.
Ho provato a fare una cosa del genere in un file batch, mettendo tanti explorer cartella.{...}, una sorta di virus che apre a raffica Risorse del Computer. Non funziona, come se si accorgesse che c'è già un'istanza aperta con quel nome. Allora cambiamo nome e... bingo! Quindi si può creare un file batch che semplicemente usando nomi diversi di cartelle apre a raffica delle finestre... o in generale fa qualcosa, dipendentemente dall'estensione CLSID data alla cartella.
Non tutte le CLSID hanno comunque senso. Molte per esempio visualizzano sì una icona specifica (per esempio LockIcon), ma doppiocliccando non succede nulla, cioè non c'è una azione associata, ma solo un'icona diversa della cartella (che però non viene più vista come cartella...)
Interessante per esempio la serie riguardante il tipo di documento: se creiamo una cartella dal nome File.{73FDDC80-AEA9-101A-98A7-00AA00374959}, vedremo l'icona come quella dei file WordPad e in effetti la descrizione ci dirà che si tratta di un documento Wordpad. Se doppioclicchiamo, accade che viene aperto Wordpad, che vorrebbe aprire il file stesso che risulta essere un suo documento, il quale invece è una cartella con un nome speciale e viene in qualche modo (a livello del filesystem?) trattata in modo speciale. Risultato: accesso negato (per Wordpad che prova ad aprire la cartella speciale come se fosse un suo file).
Interessante per esempio anche una cartella che abbia come estensione {2559a1f4-21d7-11d4-bdaf-00c04f60b9f0}: questa è la classe associata al browser internet di default del sistema (per esempio a me si è aperto Firefox invece che Internet Explorer quando l'ho doppiocliccata; usando invece dalla linea di comando explorer ::{etc.} non funziona; perché?)
Ora, in che senso sono cartelle nascoste? Non lo so... a me erano perfettamente visibili con estensione chilometrica compresa, ma può dipendere da configurazioni di explorer. Per esempio se tali configurazioni sono di default, è molto probabile che l'estensione non venga mostrata e avremmo quelli che sembrerebbero degli shortcut (ma senza la freccetta aggiunta nell'icona)... In verità trattandosi di cartelle, a prescindere dalle impostazioni l'estensione, non essendo considerata tale, viene sempre visualizzata; la creazione di file dal nome la cui estensione sia un CLSID non sortisce alcun effetto.
La cosa interessante è che di fatto queste rimangono cartelle e ciò è facilmente verificabile dalla linea di comando. Allora tale cartelle speciali potrebbero essere usate per nasconderci dei dati all'interno: l'utente medio non riuscirebbe ad accedere al loro contenuto (magari gli facciamo credere che sono di sistema e cambiando il nome rischia che non funziona più nulla... questo terrorismo funziona perché è verosimile, anzi di più: è esattamente quello che fanno i messaggi di Windows!); un batch o una applicazione potrebbero farlo. Così il contenuto sarebbe nascosto.
Basterebbe cambiare l'estensione, ma se l'utente medio, essendo medio, si spaventa facilmente perché non capisce cosa sono quei numeri (del resto, non so nemmeno io come sono fatti e perché) e pensa che sia roba complicata di sistema...
Per completare la mia collezione di CLSID, potete dare uno sguardo a questo articolo, in inglese.
Un CLSID in HKEY_CLASSES_ROOT\CLSID attrae la mia attenzione: {429AF92C-A51F-11D2-861E-00C04FA35C89} che porta come valore %Trident API% (sostituzione!). Trident è il nome del motore HTML di Internet Explorer (un po' come Gecko per altri browser/sistemi)... Chissà cosa accadrebbe se... [NB: Trident può essere anche altre cose, come del resto windows, che non vuol dire altro che finestre]
Come detto molti CLSID non sono in shell32, e nello stesso tempo alcuni cercati di quelli in shell32 non sono tra quelli elencati in HKEY_CLASSES_ROOT\CLSID. Ma altra gerarchia da esplorare è HKEY_LOCAL_MACHINE\Software\Classes\CLSID...
Per un elenco di questi CLSID apparentemente usabili per creare
questo tipo di file,
vedi questo mio articolo
in inglese.