Устранил финальный недостаток SHRED под Windows в BAT-файле.
Про shred в версии под винды, рассказывал здесь (копия)
И рассказал там про фатальный недостаток утилиты, затирая и удаляя файл она никак не меняет его имени, потому, если вы shred'ом удалили файл, например, с именем Путин бомба взрыв чеченцы.doc, содержимое файла затрется, а название останется. Сделал обертку в виде BAT-файла, чтобы сей недостаток устранить:
Самый простой способ, это просто использовать переменную
%RANDOM%, например, в таком виде:%TEMP%\%RANDOM%.%RANDOM%Вариант сгенерированного имени:
C:\Windows\Temp\20422.190281. Генерируем имя для списка файлов, обработанных
shred:set RLST=%TEMP%\%RANDOM%.%RANDOM%По-хорошему надо бы проверить, существует ли такой файл, если существует, сгенерировать новое имя, но тут это единственное имя файла, которое может попасть на существующий файл - в общем, я забил на это.
2. Вызываем
shred:shred -n 3 -z -v %1 2>%RLST%где:
-n 3 - количество проходов для затирания содержимого файла-z - дополнительный проход, содержимое файла затирается нолями (символом с кодом 0)-v - режим подробного вывода на консоль, он пойдет в файл, там будут имена затертых файлов, они понадобятся далее.2> shred выводит данные на STDERR - перенаправляем вывод в файл, чье имя содержится в переменной %RLST%.Содержимое файла из переменной
%RLST%:>rshred.bat *.txtshred: 1.txt: pass 1/4 (random)...
shred: 1.txt: pass 2/4 (random)...
shred: 1.txt: pass 3/4 (random)...
shred: 1.txt: pass 4/4 (000000)...
shred: 2.txt: pass 1/4 (random)...
shred: 2.txt: pass 2/4 (random)...
shred: 2.txt: pass 3/4 (random)...
shred: 2.txt: pass 4/4 (000000)...
shred: 3.txt: pass 1/4 (random)...
shred: 3.txt: pass 2/4 (random)...
shred: 3.txt: pass 3/4 (random)...
shred: 3.txt: pass 4/4 (000000)...
shred: readme.txt: pass 1/4 (random)...
shred: readme.txt: pass 2/4 (random)...
shred: readme.txt: pass 3/4 (random)...
shred: readme.txt: pass 4/4 (000000)...В цикле вытаскиваем из временного файла (
%RLIST%):FOR /F "tokens=2,5 delims=: " %%i in (%RLST%) do (
[в цикле]
)
Справка по команде
FOR BAT-файла (копия в PDF)3. В выводе имя файла повторяется несколько раз, потому будем искать строчку, где файл упоминается последний раз (
(000000)):IF "%%j" EQU "(000000)..." (
[ниже код после проверки]
)
4. Получаем временное имя файла:
set TMPNAME=%RANDOM%.%RANDOM%5. Переименовываем обработанный файл в случайное имя, полученное выше:
ren %%i !TMPNAME!6. Удаляем переименованный файл:
del !TMPNAME!7. После цикла отключаем установку локальных параметров:
Setlocal DisableDelayedExpansionСправка по команде (копия в PDF)
8. Затираем и удаляем сам файл с логом из
%RLST%:::remove list of files
shred -n 3 -z %RLST%
del %RLST%Минус скрипта, который даже плюс:
У группы удаляемых файлов в цикле будет одно и то же имя файла, из-за хреновой работы
%RANDOM% в CMD (копия), но почему это минус, который плюс - при анализе диска не будет видно, сколько именно файлов было удалено (проверено в WinHex).Минус скрипта, который минус:
Имя временного файла весьма характерное, при анализе диска будет видно, что кто-то скриптом пользовался. Как сделать нормальные случайные имена файлов в CMD (вида
lfcx16.tmp, например) без внешних утилит, я пока не понял, опять же, из-за косячного %RANDOM% в винде.На GitHub
Это репост с сайта http://tolik-punkoff.com
Оригинал: https://tolik-punkoff.com/2023/05/05/ust