Mögliche Workarounds für DownloadUpdates.cmd
Posted: 08.05.2015, 11:14
Ich habe in den letzen Tagen zwei mögliche Workarounds für DownloadUpdates.cmd getestet. Das Ziel ist jeweils, die Option "Verify Downloads" aktiviert zu lassen, aber eine Ausnahme für die Datei rootsupd.exe zu machen.
Der erste Workaround vergleicht einfach nur den Namen. Man ersetzt diesen Code-Block ab Zeile 1482 in der Datei DownloadUpdates.cmd:
durch diesen:
Der zweite Workaround ist etwas aufwändiger: Man erstellt mit hashdeep eine zusätzliche Prüfsummendatei für bekannte, aber unsignierte Dateien. Die Prüfsummendatei heißt bei mir "hashes-known-good-files.txt" und hat den Inhalt:
Diese Prüfsummendatei gehört in den Ordner wsusoffline/cmd, sodass sie von DownloadUpdates.cmd direkt aufgerufen werden kann. Mit hashdeep und dem Matching-Modus kann man dann einzelne Dateien testen:
Die verwendeten hashdeep-Optionen sind -b und -m:
Viele Grüße
Der erste Workaround vergleicht einfach nur den Namen. Man ersetzt diesen Code-Block ab Zeile 1482 in der Datei DownloadUpdates.cmd:
- Code: Select all
rem *** Verifying digital file signatures for %1 %2 ***
if not exist ..\bin\sigcheck.exe goto NoSigCheck
echo Verifying digital file signatures for %1 %2...
..\bin\sigcheck.exe %SIGCHK_COPT% -s ..\client\%1\%2 >"%TEMP%\sigcheck-%1-%2.txt"
for /F "tokens=1 delims=," %%i in ('%SystemRoot%\System32\findstr.exe /I "Unsigned" "%TEMP%\sigcheck-%1-%2.txt"') do (
del %%i
echo Warning: Deleted unsigned file %%i.
echo %DATE% %TIME% - Warning: Deleted unsigned file %%i>>%DOWNLOAD_LOGFILE%
)
durch diesen:
- Code: Select all
rem *** Verifying digital file signatures for %1 %2 ***
if not exist ..\bin\sigcheck.exe goto NoSigCheck
echo Verifying digital file signatures for %1 %2...
..\bin\sigcheck.exe %SIGCHK_COPT% -s ..\client\%1\%2 >"%TEMP%\sigcheck-%1-%2.txt"
for /F "tokens=1 delims=," %%i in ('%SystemRoot%\System32\findstr.exe /I "Unsigned" "%TEMP%\sigcheck-%1-%2.txt"') do (
if "%%~nxi"=="rootsupd.exe" (
echo Warning: Kept unsigned file %%i.
echo %DATE% %TIME% - Warning: Kept unsigned file %%i>>%DOWNLOAD_LOGFILE%
) else (
del %%i
echo Warning: Deleted unsigned file %%i.
echo %DATE% %TIME% - Warning: Deleted unsigned file %%i>>%DOWNLOAD_LOGFILE%
)
)
Der zweite Workaround ist etwas aufwändiger: Man erstellt mit hashdeep eine zusätzliche Prüfsummendatei für bekannte, aber unsignierte Dateien. Die Prüfsummendatei heißt bei mir "hashes-known-good-files.txt" und hat den Inhalt:
- Code: Select all
%%%% HASHDEEP-1.0
%%%% size,md5,sha1,sha256,filename
## Invoked from: G:\WSUS Offline Update\rootsupd 2014-11-12 unsigned
## G:\WSUS Offline Update\rootsupd 2014-11-12 unsigned> G:\wsusoffline\client\bin\hashdeep -c md5,sha1,sha256 -W hashes-known-good-files.txt -b rootsupd.exe
##
414720,22a4ac3835595d84fe5b155c1e146481,9232833004cf02135dba887d2037c4487fadd42d,d7a732a4234da5a1f703b013e90b9531efeb60c05b6ad0adf98c9f87d2087f5a,rootsupd.exe
Diese Prüfsummendatei gehört in den Ordner wsusoffline/cmd, sodass sie von DownloadUpdates.cmd direkt aufgerufen werden kann. Mit hashdeep und dem Matching-Modus kann man dann einzelne Dateien testen:
- Code: Select all
rem *** Verifying digital file signatures for %1 %2 ***
if not exist ..\bin\sigcheck.exe goto NoSigCheck
echo Verifying digital file signatures for %1 %2...
..\bin\sigcheck.exe %SIGCHK_COPT% -s ..\client\%1\%2 >"%TEMP%\sigcheck-%1-%2.txt"
for /F "tokens=1 delims=," %%i in ('%SystemRoot%\System32\findstr.exe /I "Unsigned" "%TEMP%\sigcheck-%1-%2.txt"') do (
..\client\bin\%HASHDEEP_EXE% -k hashes-known-good-files.txt -m %%i > nul
if errorlevel 1 (
del %%i
echo Warning: Deleted unsigned file %%i
echo %DATE% %TIME% - Warning: Deleted unsigned file %%i>>%DOWNLOAD_LOGFILE%
) else (
echo Warning: Kept unsigned file %%i
echo %DATE% %TIME% - Warning: Kept unsigned file %%i>>%DOWNLOAD_LOGFILE%
)
)
Die verwendeten hashdeep-Optionen sind -b und -m:
- Code: Select all
-b Enables bare mode. Strips any leading directory information from
displayed filenames. This flag may not be used in conjunction
with the -l flag.
-m Positive matching, requires at least one use of the -k flag.
The input files are examined one at a time, and only those files
that match the list of known hashes are output. The only accept‐
able format for known hashes is the output of previous hashdeep
runs.
If standard input is used with the -m flag, displays "stdin" if
the input matches one of the hashes in the list of known hashes.
If the hash does not match, the program displays no output.
This flag may not be used in conjunction with the -x, -X, or -a
flags. See the section "UNICODE SUPPORT" below.
Viele Grüße