L’hash di un file è la sua impronta digitale, costituita in questo caso da una lunga serie di numeri e lettere, che identifica in modo univoco un file e certifica la sua integrità quando è appena stato scaricato da Internet, per esempio il file ISO di Windows 11 presente nel sito Microsoft, ma l’hash vale anche per qualsiasi eseguibile che installi un gioco o un programma nel computer. Se questa stringa non corrisponde al file appena scaricato, ci possono essere stati dei problemi durante il download che hanno danneggiato l’ISO, se il file eseguibile proviene da fonti non affidabili può essere stato alterato per nasconderci dentro un malware.
Verificare quindi l’hash è importante per essere sicuri di utilizzare sempre file genuini, ovviamente l’hash originale deve essere sempre disponibile nel sito da cui eseguiamo il download.
Ci sono molti programmi che calcolano l’hash, ma in questo articolo utilizzeremo PowerShell per farlo. Vediamo alcuni esempi.
Get-FileHash
Get-FileHash estrae l’hash del file che gli indichiamo, in questo caso regedit.exe, e quindi il comando diventa:
Get-FileHash C:\Windows\regedit.exe
Se vogliamo invece l’hash di tutti gli eseguibili che si trovano dentro la cartella C:\Windows possiamo usare questo comando:
Get-ChildItem -Path C:\windows -Filter *.exe | Get-FileHash
Una variante, con l’opzione | format-list finale, del comando visto in precedenza:
Get-FileHash C:\Windows\regedit.exe | format-list
Creare file txt
Vi serve sapere se l’iso di Windows 11 che avete appena scaricato da Internet, magari da una fonte “alternativa”, è quella corretta Microsoft, basta indicare il nome e il percorso del file per saperlo. A causa delle dimensioni del file iso il calcolo sarà più lungo del solito.
Get-FileHash d:\iso\Win11_24H2_Italian_x64.iso | format-list
Se volete avere un file di testo con l’hash del file utilizzate:
Get-FileHash d:\iso\Win11_24H2_Italian_x64.iso | format-list > d:\hash.txt
Creare file csv
Mentre per avere un file Excel con l’hash di tutti gli eseguibili della cartella Windows\System32 possiamo usare questo comando:
Get-Childitem -path "c:\windows\system32\*.exe" | Get-FileHash | Export-csv -path "d:\hash.csv" -Delimiter ";" -NoTypeInformation
Se volete estrarre l’hash di tutti gli eseguibili presenti nel disco C dovete tenere conto che molte cartelle non saranno accessibili. Inoltre i tempi di estrazione dell’hash saranno molto lunghi a secondo del numero di file presenti.
Get-Childitem -path C:\* -Recurse -Filter *.exe | Get-FileHash | Export-csv -path "d:\hash.csv" -Delimiter ";" -NoTypeInformation
Confronto hash
Se già conoscete l’hash del file scaricato, la potete confrontare direttamente, con risposta True o False a seconda della corrispondenza o meno:
(Get-FileHash d:\iso\Win11_24H2_Italian_x64.iso).Hash -eq "D95EC65EC06B4036835C7571FE0108159848D2883EF5DA3A67E480130B1F5862"
Algoritmi diversi
Se volessimo tutti gli algoritmi con cui è stato firmato il file possiamo utilizzare questo comando:
'SHA1','SHA256','SHA384','SHA512','MD5' | ForEach-Object {Get-FileHash -Algorithm $_ -Path 'c:\windows\regedit.exe' | Select-Object -Property Algorithm,Hash}
Mentre per estrarre un singolo algoritmo da un file questi sono i comandi:
get-filehash "c:\windows\regedit.exe" -algo md5
Get-FileHash "d:\iso\Win11XPE_x64.ISO" -Algorithm SHA256 | Format-List