Нате вам (ц) Маяковский.
На беса-пилотника тоже насобирали. Второе Леша в основном и анонимно. В следующем месяце поделимся донатами со всеми сопречукнутыми.
Весна ожидается жаркая, тьфу, не сглазить.
Нате вам (ц) Маяковский.
На беса-пилотника тоже насобирали. Второе Леша в основном и анонимно. В следующем месяце поделимся донатами со всеми сопречукнутыми.
Весна ожидается жаркая, тьфу, не сглазить.
Делается с помощью плагина nsProcess
.
1. Качаем архив
2. Распаковываем содержимое архива по соответствующим каталогам NSIS
NsProcess.zip\Example --> C:\Program Files (x86)\NSIS\Examples\nsProcess
NsProcess.zip\Include --> C:\Program Files (x86)\NSIS\Include\
NsProcess.zip\Plugin\nsProcess.dll --> C:\Program Files (x86)\NSIS\Plugins\x86-ansi\nsProcess.dll
NsProcess.zip\Plugin\nsProcessW.dll --> C:\Program Files (x86)\NSIS\Plugins\x86-unicode\nsProcess.dll
Начало:
Unicode true
!include LogicLib.nsh
Name "KillProcessExample"
OutFile "KillProcessExample.exe"
ShowInstDetails show
RequestExecutionLevel User
Немного дополнил пример из официального мануала, вставив макрос для расширенного вывода сообщений об ошибках:
!macro PrintProcError ErrCode
Код разлапистый, потому на PasteBin: !macro PrintProcError ErrCode
Код внутри секции:
1. Запускаем тестовую программу (calc.exe
, которая обычно есть в любой винде и лежит она обычно в $SYSDIR
, т.е. в C:\Windows\System32\
) и ждем 500 миллисекунд:
DetailPrint "Start calc.exe..."
Exec "$SYSDIR\calc.exe"
Sleep 500
2. Спрашиваем у пользователя, будем ли убивать процесс. Если нет — идем на завершение:
MessageBox MB_YESNO|MB_ICONQUESTION "Kill process calc.exe?" IDYES 0 IDNO "EndProg"
3. Ищем процесс(ы) по имени экзешника:
DetailPrint "Find process calc.exe..."
nsProcess::_FindProcess "calc.exe"
Да, можно хоть 10 калькуляторов назапускать.
4. Вытаскиваем из стека результат функции _FindProcess
:
Pop $R0
5. Выводим на псевдоконсоль расшифровку кодов возврата:
!insertmacro PrintProcError $R0
6. Если код возврата = 0
, значит, процесс найден, пытаемся его убить, выводим расшифровку кодов возврата, и опять подождем 500 миллисекунд:
${If} $R0 = 0 DetailPrint "Process calc.exe found. Kill it..." nsProcess::_KillProcess "calc.exe" !insertmacro PrintProcError $R0 Sleep 500 ${EndIf}
— Официальная справка плагина (на буржуйском)
— Перевод от Leha Silent (копия)
Версия 1.5:
— nsProcess.zip (25 KB)
Версия 1.6 (поддержка NSIS UNICODE от brainsucker, переименуйте библиотеку nsProcessW.dll
):
— nsProcess.zip (14 KB)
— Зеркало: nsProcess_1_6.7z
Обсуждение:
На форуме
Возможности:
— Поиск процесса по имени.
— Завершение всех процессов с указанным именем (все найденные экземпляры).
— Закрытие всех процессов с указанным именем. Сначала происходит попытка закрыть все окна процессов, ожидание 3 секунд для завершения процессов. Если процесс(ы) все еще активны, используйте функцию _CloseProcess
.
— Имя процесса нечувствительно к регистру
— Поддерживаемые ОС: Win95/98/ME/NT/2000/XP/Win7
— Поиск процессов других пользователей при запуске с правами администратора или при переключении на другого пользователя.
— Маленький размер плагина (4 Кб)
— Поддержка Unicode (просто переименуйте nsProcessW.dll
в nsProcess.dll
)
!include "LogicLib.nsh" Section "" StrCpy $1 "YOURAPP.exe" nsProcess::_FindProcess "$1" Pop $R0 ${If} $R0 = 0 nsProcess::_KillProcess "$1" Pop $R0 Sleep 500 ${EndIf} SectionEnd
Обычно _FindProcess
возвращает:
— 0
если процесс найден
— 603
если процесс(ы) не найдены
// Коды возврата: // 0 = успех // 601 = Нет разрешения на завершение процесса // 602 = Не все процессы завершились успешно // 603 = Процесс в данный момент не запущен // 604 = Невозможно определить тип ОС // 605 = ОС не поддерживается // 606 = Невозможно загрузить NTDLL.DLL // 607 = Не удалось получить адрес процедуры из NTDLL.DLL // 608 = ошибка NtQuerySystemInformation // 609 = Невозможно загрузить KERNEL32.DLL // 610 = Не удалось получить адрес процедуры из KERNEL32.DLL // 611 = Ошибка CreateToolhelp32Snapshot
Ravi Kochhar (исходная функция FIND_PROC_BY_NAME на основе его кода)
iceman_k (Find Process By Name) и DITMan (KillProcDLL Manual).
Перевел Leha Silent специально для tolik-punkoff.com
Блин, нашел у друга на компе старую шифровалку файлов (судя по внутренней справке, алгоритм Blowfish)
Уж не знаю, там че за криптостойкость, но за уникальность стоит эту утилиту забэкапить.
— Адекватно работает только на Windows 3.1-3.11
— Генерирует самораскрывающиеся (SFX) шифрованные архивы, которые запускаются в DOS.
— Формат выходного экзешника MZ (DOS), так что выше Windows ME его будет нельзя открыть без эмулятора.
На самом деле, многими реверсерскими командами создана куча генераторов автопатчеров, подсовываешь ему оригинальный и измененный экзешник, и тебе генерируется автопатчер, даже с красивой картинкой и восьмибитной музыкой. Но «есть проблема» (ц) Патриарх Кирилл:
— Не на все автопатчеры хорошо реагируют антивирусы
— Автопатчеры нестандартны, кто в лес, кто по дрова.
Неплохо бы сделать так, чтоб и антивирусы не ругались, и оно хоть как-то относительно стандартно выглядело. И такое решение есть — модуль VPatch для системы установки NSIS. Далее расскажу, как этим модулем воспользоваться, чтобы пропатчить уже установленную программу, а также, немного расширю пример, покажу как в патч «зашить» еще и отмену патча. Естественно, чтобы все повторить, у вас должен быть установлен NSIS хотя бы в минимальной комплектации.
Устанавливаем модуль VPatch, лучше воспользоваться ссылкой на установщик, потом скачать родной пример и попытаться его скомпилировать. Если все сработало — модуль установился правильно, можно работать дальше.
Для генерации данных для патча, VPatch использует свои утилиты командной строки, которые в комплекте идут, но устанавливаются криво, так что качаем утилиты отдельно и устанавливаем их (установятся в %WINDIR%
).
Теперь нужна лабораторная крыса, т.е. программа, которую будем патчить, возьмем оригинальный CrackMe из предыдущего примера (копия) и напишем ему стандартный инсталлятор:
Исходник инсталлятора
Готовый инсталлятор тестовой программы
Исходник CarckMe
Устанавливаем ее.
Для патча нужен оригинальный экзешник
Патч:
Восстановление:
— VPatch — Free Patch Generator
— VPatch plug-in
— Документация и исходники оригинального примера
— NSIS: контрольная сумма (MD5), сравнение файлов. (копия)
— NSIS: Получение списка файлов с MD5-хешами. (копия)
— NSIS: Получение даты и времени. (копия)
Иногда бывает нужно получить в скрипте установки локальную дату и время, или дату и время, связанную с файлом (модификации, создания или последнего доступа к файлу). В NSIS это делает одна стандартная функция, точнее, макрос ${GetTime}
.
Для того, чтобы использовать GetTime
, необходимо подключить заголовочный файл FileFunc.nsh
(должен идти в стандартной поставке) и сам макрос GetTime
:
!include "FileFunc.nsh"
!insertmacro GetTime
Вот начало инсталляционного скрипта:
Unicode true
!include "FileFunc.nsh"
!insertmacro GetTime
Name "GetLocalTime"
OutFile "GetLocalTime.exe"
ShowInstDetails show
RequestExecutionLevel User
;Далее будет тестовая секция
${GetTime} "[File]" "[Option]" $var1 $var2 $var3 $var4 $var5 $var6 $var7
где:
— "[File]"
— файл (параметр игнорируется при использовании опций "L"
или "LS"
)
— "[Option]"
— опции (см. далее)
— $var1
— День
— $var2
— Месяц
— $var3
— Год
— $var4
— День недели (наименование на английском языке)
— $var5
— Час
— $var6
— Минута
— $var7
— Секунда
Опции:
L
— локальное время компьютера
A
— время последнего доступа к файлу
C
— время создания файла
M
— время последнего изменения файла
LS
— системное время (то же самое, что и L
, только используется часовой пояс UTC)
AS
— время последнего доступа к файлу (UTC)
CS
— время создания файла (UTC)
MS
— время последнего изменения файла (UTC)
Section "Test" ; Получаем время компьютера ${GetTime} "" "L" $0 $1 $2 $3 $4 $5 $6 ; Выводим его в окошко лога инсталлятора DetailPrint "Local date and time:" DetailPrint "$2/$1/$0 ($3) $4:$5:$6" ; Можно преобразовать время в строку ; чтоб добавить к имени файла DetailPrint "String to add time in filename:" StrCpy $0 "$2-$1-$0-$4-$5-$6" ; и вывести ее DetailPrint "$0" SectionEnd
— Пример на GitHub
— how to get the date and time?
— E.1.6 GetTime
Как-то показывал, как в NSIS получить MD5-хэши (копия), файлов в т.ч. Решил расширить пример, а как получить список файлов в каталоге и их MD5-хэши. Мне пригодится для следующего примера по NSIS, но и народ спрашивал, ибо в вышеуказанном примере нельзя выбрать произвольный файл, или сразу несколько. Исправляемся.
Перед тем, как обработать какие-то файлы, надо их сначала найти и как-то передать в инсталлятор. В NSIS есть для этого несколько способов:
— Использовать стандартные функции FindFirst/FindNext
, которые работают почти также, как соответствующие функции в WinAPI и требуют городить довольно неудобочитаемый цикл, постоянно проверять ошибки.
— Рекомендуемый разработчиками NSIS способ: использовать плагин Locate, работа с которым тоже отличается довольно неудобочитаемым кодом, и работает он в некоторых случаях не совсем стабильно.
— Функция Locate
, которую вообще-то должен был заменить вышеуказанный плагин, но, как по мне, заменил ее криво. Ей проще воспользоваться, во всяком случае, для такой небольшой задачи. Далее будем работать именно с функцией Locate
.
1. Создаем файл Locate.nsi
в каталоге проекта, помещаем в него код функции, который можно взять их официальной Wiki NSIS. Раздел Function Code. (копия на PasteBin копия на GitHub)
2. Создаем основной файл (MD5List.nsi
), формируем «болванку» проекта:
Unicode true
!include "Locate.nsi"
Name "MD5List"
OutFile "MD5List.exe"
ShowInstDetails show
RequestExecutionLevel User
InstallDir "$EXEDIR\"
DirText "Choose the folder to get list files and MD5 checksums."
Section "List"
SectionEnd
Не забываем подключить файл с кодом функции Locate
(Locate.nsi
): !include "Locate.nsi"
${Locate} "[Path]" "[Options]" "Function"
где:
"[Path]"
— путь, стартовый каталог для поиска
"[Options]"
— опции (см. далее)
"Function"
— callback-функция (см. далее)
/L=[FD|F|D|DE|FDE]
— что искать:
/L=FD - Найти файлы и каталоги (по умолчанию)
/L=F - Найти только файлы
/L=D - Найти только каталоги
/L=DE - Найти только пустые каталоги
/L=FDE - Найти файлы и пустые каталоги
/M=[маска_файла]
.
По умолчанию /M=*.*
(все файлы)
Можно изменить, например на /M=*.txt
(текстовые файлы), и т.д.
/S=
Размер файла. Не буду заострять на этом внимание, синтаксис этой опции можно посмотреть оригинальной документации. По умолчанию размер файла игнорироуется.
/G=[1|0]
— поиск с подкаталогами:
/G=1
— включить поиск с подкаталогами (включен по умолчанию)
/G=0
— поиск только в текущем каталоге
${Locate} "C:\SOMEDIR" "/L=F" "Userfunction"
Где мы указали каталог, с которого нужно начать поиск, указали хоть одну опцию, нужно указать хотя бы одну, и указали функцию обратного вызова, пока имя условное, но ниже объясню.
Это пользовательская функция, которая должна получать данные от ${Locate}
, а далее уж сама их обрабатывать.
${Locate}
передает в функцию следующие стандартные переменные:
$R9
— полный путь к файлу
$R8
— путь без имени файла
$R7
— имя файла
$R6
— размер (для каталога $R6==0
)
Остальные глобальные переменные можно использовать для своих целей внутри функции.
Внимание: callback-функция для ${Locate}
обязательно должна заканчиваться командой push <переменная>
.
Чтобы завершить функцию нормально, необходимо положить любое значение в стек:
push $0
Всегда помещайте что-либо в стек (даже если вы не собираетесь останавливать поиск), иначе произойдет непредвиденное!
Чтобы прервать поиск до того, как он завершится сам, в стек надо поместить значение StopLocate
:
StrCpy $0 StopLocate
Push $0
Внимание! Внутри callback-функции почему-то не работает DetailPrint
.
Теперь, зная все вышеозначенное, можно писать основной код.
Полученные данные будем писать во временный файл, раз уж DetailPrint
нельзя воспользоваться. Получаем имя для временного файла и открываем его для записи:
GetTempFileName $R0
FileOpen $R1 $R0 w
Начинаем поиск:
DetailPrint "Starting search files and get MD5..."
${Locate} "$INSTDIR" "/L=F /M=*.*" "GetMD5"
$INSTDIR
— каталог, который выберет пользователь при запуске примера.
"/L=F /M=*.*" - /L=F
— ищем только файлы /M=*.*
— все файлы.
"GetMD5"
— имя callback-функции (см. ниже)
По окончанию поиска закрываем файл:
FileClose $R1
И проверяем, не случилось ли ошибок. Если случилось, выводим окно с надписью Error, если не случилось — открываем полученный файл в Блокноие:
IfErrors 0 +2
MessageBox MB_OK "Error" IDOK +2
Exec '"notepad.exe" "$R0"'
После секции организуем пользовательскую функцию:
Function GetMD5 ; скармливаем MD5-плагину полное имя файла ; про MD5-плагин написано по ссылке выше md5dll::GetMD5File "$R9" Pop $1 ; достаем из стека MD5 ; Записываем во временный файл (дескриптор в $R1) ; имя найденного файла с путем: $R9 ; через табуляцию $\t MD5-хэш ($1) ; и перевод строки $\r$\n FileWrite $R1 "$R9:$\t $1 $\r$\n" ; завершаем функцию, помещая в стек ; пустую переменную Push $0 FunctionEnd
Скормим программе ее же каталог.
В Блокноте откроется временный файл со следующим содержимым:
E:\Test\Locate.nsi: a8fb937f9509d7fc21f476b2ff59aaa3 E:\Test\MD5List.exe: 34edf2e42835380b7278e89315ec1a83 E:\Test\MD5List.nsi: fb531c0dfa3bae4febe0b7cfbe7d4a88
— NSIS: контрольная сумма (MD5), сравнение файлов. (копия)
— Locate на NSIS Wiki
— Пример на GitHub
Не, ребята, это даже круче чем автограф БГ! С этой утилитой столько воспоминаний, а главное, иногда нужна по делу, хотя уже и реже, чем раньше.
Слава автору, что проект до сих пор существует, как и любимый примерно с того же детского возраста Far Manager, вот реально, счастья таким авторам! Проект если младше меня, то ненамного. А так да, еще в 12-15 лет пользовался его пиратской версией. Теперь купил лицензию (не дам).
Охрененный респект автору, лучший шестнадцатиричный редактор (с возможностью диззассемблера и редактирования кода напрямую), до сих пор лучший на этой планете.
И я его купил.
Это мой личный отзыв, никакого отношения к коммерческой рекламе он не имеет. Это просто радость, от того что могу поддержать автора.
Официальный сайт: https://www.hiew.ru/
И инструкцию, как купить (чтобы поддержать автора, который уже больше 20 лет старается), можно там же найти.
Это репост с сайта http://tolik-punkoff.com
Оригинал: https://tolik-punkoff.com/2023/03/07/kupil-hiew/
Один из пользователей NSIS создал проект VPatch, который позволяет на NSIS написать автоматический патчер (после покажу пример, а может даже парочку). Но устанавливается он как-то криво, консольные утилиты, которыми генерятся данные для будущего патча устанавливаются абы куда, а не в какой-нибудь %PATH%
-каталог, что безумно бесит. Поправил. У меня все утилиты устанавливаются в %WINDIR%
.
Утилиты отдельно (RAR-архив), 468Кб
Установщик (NSIS, EXE), 666Кб
Родной пример использования VPatch (7ZIP), 475Кб
Исходник моего инсталлятора
Попросили показать самый простой пример по реверсингу. Ну ладно, сделал простейшую программу, окно где надо ввести пароль:
Ввели правильно, получаем окно одобрямса:
Ввели неверно, программа отправляет на повторный ввод с сообщением об ошибке:
Если нажать Cancel — программа просто завершится.
Сам CrackMe сделан на базе прошлого примера окна типа InputBox
(копия), не стал даже с закрытием «пароля» «звездочками» заморачиваться, говорю же, очень простой CrackMe, естественно, без всякой упаковки и навесных защит.
Вообще, пароль можно подсмотреть, открыв экзешник, например, в просмотровщике Far Manager по F3:
Прямо как в некоторых старых DOS-программах, где защита от копирования была скорее защитой от дурака, или в форках некоторых приставочных игр под DOS, где таким же образом можно было получить код от уровня.
Но мы пойдем другим путем, как завещал великий Ленин! Хотя способ будет не сильно далеким от «подсмотра», чтоб было слегка посложнее и интереснее — не будем пользоваться отладчиком, а воспользуемся дизассемблированием. В отладчике вместо одного шага (простого подсмотра пароля) будет полтора, а так все же веселее.
И задача, естественно, модифицировать программу так, чтобы подходил любой пароль.
1. Исходник CrackMe
2. Бинарный файл
3. Чтоб два раза не вставать: Разница между инструкциями test
и cmp
Копия в PDF
Попросили сделать на ассемблере (MASM) что-то типа окна InputBox, которое было когда-то в Visual Basic 6.0. Кстати да, удобная фича для мелких запросов к юзеру, без всякого лишнего моделирования форм. Выглядело примерно так:
Да, товарищи (даже те, которые нам совсем не товарищи), это окошко чистая выдумка создателей VB, и в диком виде подобная функция нигде более не встречается.
Т.е. в WinAPI ее нет и не ищите!
Но реализовать можно:
Сама функция InputBox
перенесена любовно в InputBox.inc
, так что можно просто воткнуть и использовать. Сделано изначально было все примерно по тем же материалам Iczelion’а (копия), я лишь немного причесал и по полочкам разложил, особо ничего не меняя. Потому расписывать детально не буду. Суть можно понять из вышеозначенных материалов и комментариев, хоть и на буржуйском, в исходниках.
Мопед изначально не мой, но ездит. Нашел на Stackoverflow, слегка переделал.
Исходник на GitHub
Скомпилированная версия
Задана, например, такая строка:
PGSTRING='#$%@!?0'
Задача — получить из строки с паттерном случайный символ.
STRLEN=`expr length "$PGSTRING"`
Если вывести переменную STRLEN
для строки выше, будет следующее:
Len: 7
expr
есть в coreutils
, так что должен быть практически везде
Получить случайное число из заданного диапазона можно командой shuf
, например:
shuf -i x-x1 -n1
где:
x-x1
— диапазон чисел
-nX
— X
— количество цифр в числе.
Получаем случайное число:
RNUM=`shuf -i 1-$STRLEN -n1`
Вывод:
R Num: 3
Отправляем строку на консоль:
echo -e -n "$PGSTRING"
И перенаправляем команде cut
:
Для того, чтобы вырезать командой cut символ, или группу символов из строки, нужно указать первый и последний символ. Например:
cut -c1-5
Применяем все вышесказанное:
RCHAR=`echo -e -n "$PGSTRING"|cut -c$RNUM-$RNUM`
Вывод:
Char: %
getrandchar() #$1 - pattern_string { STRLEN=`expr length "$1"` RNUM=`shuf -i 1-$STRLEN -n1` RCHAR=`echo -e -n "$1"|cut -c$RNUM-$RNUM` }
Использование:
getrandchar $PGSTRING
В принципе делал все по этой видеоинструкции:
Но с некоторыми оговорками, видимо потому, что телефон был не совсем «кирпич», н наполовину, т.е. заставку Nokia показывал, но дальше фигвам:
1. Ставим драйвер из каталога Driver
в архиве QPST (ссылки на софт и прошивку будут ниже)
2. Ставим сам QPST
3. Ставим Care Suite For Store
4. Качаем прошивку
5. Пытаемся перепрошить стандартным способом с помощью Care Suite (есть инструкция на 4PDA)
6. Или не получится, или на этом этапе телефон окирпичится до такого состояния, как показано на видео.
7. Делаем все по видеоинструкции.
Поскольку, на 4PDA половина ссылок битая, а половина вообще ведут на сраный фашистский Хуяндекс, я весь набор переложил на православную Мегу:
— Care Suite For Store 5.6.134.1513
— QPST
— Прошивка
— Тема на 4PDA
— Инструкция по перепрошивке с помощью Care Suite (копия)
— Копия видеоинструкции (MKV)
В прошлой заметке (копия), где я писал и о том, что дебильные менеджеры Mozilla, какого-то полового органа отключили выбор кодировки вручную, я немного ошибся, написав, что соответствующий задаче плагин пока никто не удосужился написать, аноним подсказал, что плагин таки написали:
Проверил на Firefox 109.0 x64 Windows, работает!
И минутка НЕНАВИСТИ в конце, ну как же без нее.
Привезли клиенту «мозги» для станка, ЧСХ, китайские, но доехали они почему-то без документации, т.е. простая серая коробочка с девайсом, напоминающим роутер. Два порта, один по специальному кабелю соединяется со станком, во второй — вставляется обычный Ethernet-кабель, который идет на управляющий комп. На «мозгах» три кнопки, как потом выяснилось — старт, экстренный останов и самотест. Надписи иероглифами. Ну ладно, с кнопками разобрались методом тыка.
А вот управляющая софтина оказалась хитроумной, менюшки на английском, а вот хелпа нет, а последовательность команд для резки задается на js-подобном языке, сильно урезанном, только по нему хелпа тоже нет.
Ну хуле делать, пишу производителю шайтан-машины в почту, мол, пришлите мануал.
«Да не вопрос, дорогой уважаемый клиент, айн момент», отвечает мне добрый китайский менеджер, и через время малое, прилетает мне мануал в виде текстового файла и кучи примеров, там даже изящная розочка была, как ее на металле вырезать… На китайском.
Но это полбеды, выглядит этот китайский примерно так: ÖØÐÂÉèÖöÔÏó
То, что это не Юникодовская кодировка, стало понятно сразу. Ну иначе тот же Notepad++ прекрасно бы все показал иероглифами, а дальше уж дело только за гугль-переводчиком.
Пролюбившись целый день с перекодировщиками, китайскими кодировками, задействовав даже Far Manager с его довольно большой базой кодировок, я не получил ровным счетом ничего.
Наконец, пришла идея, а если текстовый файл переименовать в *.html
и скормить его Firefox’у, у него же была довольно неплохая внутренняя определялка кодировок, повыбираю из списка, или же он сам определит.
Определил сам, наконец невнятные кракозяблы ÖØÐÂÉèÖöÔÏó
превратились во вполне внятные иероглифы: 重新设置对象
, что значит всего лишь сбросить объект. Ну а дальше немного смекалки, экспериментов, гугль-переводчика, и ТЕЛЕМАРКЕТ!
Решил я посмотреть какая же все-таки кодировка у файла. И… не нашел меню с выбором кодировок вручную. Оказывается, разкозлоработчики Firefox просто тупо убрали возможность выбора кодировки страницы вручную из браузера.
Кодировка текста больше недоступна в меню Firefox
Какой пиздец! А если ваше поделие таки неправильно кодировку определит, прикажете ехать в вашу штаб-квартиру и ебать вас раскаленным урановым ломом?
Вот жеж бля, от кого не ожидал подставы, дык от Mozilla. И вообще непонятно, нахера так делать?
1. Надо включить Панель меню
2. Зайти в Инструменты —> Сведения о странице (или нажать комбинацию клавиш CTRL+I)
3. В сведениях о странице будет отображена и информация о кодировке:
В последних версиях пока никак, соответствующий задаче плагин пока никто не удосужился написать, может быть Firefox идеально определяет кодировки, а может мозилловцы пока не столкнулись с багом, так что если надо в браузере вручную покрутить кодировки — придется скачивать старые версии, например:
С PortableApps.com (версия 88.1), установщик
Для выбора кодировки вручную, необходимо включить меню, а далее выбрать:
Вид —> Кодировка текста, и далее выбрать нужную кодировку:
Что такое shred
? Это опенсорсный «уничтожитель» файлов, т.е. программа затирает (забивает случайными данными) файл на диске, чтобы невозможно было его восстановить средствами восстановления файлов, например, чтобы окончательно удалить конфиденциальные данные, доступ к которым может получить злоумышленник. shred входит во многие дистрибутивы Линукс, но есть версии и под другие ОС. Тут буду экспериментировать и описывать версию для windows.
Друзья попросили перевести на русский краткую справку, а заодно уж я поэкспериментировал с параметрами, чтобы подобрать оптимальные для повседневного использования.
Внимание! Идеальный уничтожитель данных, во всяком случае, с HDD-дисков, это молоток, с последующей обработкой диска в костре на березовых дровах, а всего оставшегося в микроволновке.
Использование: shred.exe [ОПЦИИ] ФАЙЛ1 [ФАЙЛ2 ФАЙЛ3 ...]
Многократное перезаписывание указанных ФАЙЛОВ, для затруднения восстановления данных даже очень дорогим аппаратным обеспечением.
Обязательные аргументы для длинных опций обязательны и для коротких опций.
-f, --force изменить разрешения файловой системы, чтобы разрешить запись, если это необходимо
-n, --iterations=N Перезаписать N раз вместо значения по умолчанию (25)
-s, --size=N затереть указанное количество байтов (допускаются такие суффиксы, как K, M, G)
-u, --remove обрезать и удалить файл после перезаписи
-v, --verbose показать прогресс
-x, --exact не округлять размеры файлов до следующего полного блока; это значение по умолчанию для нестандартных файлов (В Windows он все файлы округляет до полного блока, т.е. кластера на диске - Tolik)
-z, --zero добавить окончательную перезапись нулями, чтобы скрыть затирание файла
--help показать эту справку и выйти
--version вывести информацию о версии и выйти
Если в качестве файла указан -, затирается стандартный вывод.
Удалить ФАЙЛ(ы), если указан --remove (-u). По умолчанию не удалять
файлы, потому что обычно работают с файлами устройств, такими как /dev/hda, и эти файлы обычно не следует удалять. При работе с обычными файлами большинство людей используют параметр --remove. (Лучше так не делать, ниже обьясню почему)
ВНИМАНИЕ: обратите внимание, что shred основывается на очень важном допущении:
что файловая система перезаписывает данные на месте. Это традиционный способ работы, но многие современные файловые системы не удовлетворяют этому предположению.
Ниже приведены примеры файловых систем, в которых уничтожение файлов неэффективно:
* лог-структурированные или журналируемые файловые системы, такие как поставляемые с AIX и Solaris (а также JFS, ReiserFS, XFS, Ext3 и т. д.)
* файловые системы, которые записывают избыточные данные и продолжают работать даже в случае сбоя некоторых операций записи, например, файловые системы на основе RAID
* файловые системы, которые делают моментальные снимки, такие как NFS-сервер Network Appliance
* файловые системы, кэширующие во временных местах, такие как клиенты NFS версии 3
* сжатые файловые системы
Кроме того, резервные копии файловой системы и удаленные зеркала могут содержать копии файла, которые невозможно удалить, что позволит позже восстановить затертый файл.
Сообщайте об ошибках по адресу <bug-coreutils@gnu.org>.
Вместо ФАЙЛ можно использовать маску файлов, если вы хотите затереть группу файлов по маске, например, shred *.txt уничтожит все текстовые файлы в каталоге - Tolik
Разрешения файлов обрабатываются нормально, т.е., например, *.htm и *.html воспринимаются, как разные файлы.- Tolik
Внимание! Под рукой у меня нет лаборатории и оборудования разных там контор, тем более, проводил я их на скорую руку и довольно дилетантски, так что на абсолютную истину не претендую. Используйте все нижесказанное на свой страх, риск и хвост!
Условия:
— Windows 7 Professional x64
— SATA HDD Seagate, 500 GB
— FS: NTFS
— форк shred
(ниже дам ссылку)
Проверял работу затиралки WinHex’ом 19.9[https://www.x-ways.net/winhex/] x64, не самым свежим, но даже лицензионным (мне его кто-то подарил), на самом деле, следов мелких файлов я так и не обнаружил, так что сразу говорю, почти все тесты shred
прошел, и мне лень делать скрины с WinHex’а, а теперь о параметрах:
Внимание! Не советую использовать опцию -u
, т.е. удаление файла. shred
его просто удалит, не поменяв ему имя на случайное, как это делают многие «затиралки», потому, если вы затираете файл, например, с именем, путин бомба взрыв бомбас.doc
, то понятно кто хоть содержания файла и не увидит, но выводы сделает. Так что после shred
файл лучше обработать напильником, т.е. переименовать его случайным набором символов, или неслучайным, например, мой_кот.jpg
, а после этого удалять штатными средствами ОС.
Количество итераций:
т.е. опция -n <число> или --iterations=<число>
На ваше усмотрение, я не заметил разницы в WinHex’е между 3, которые выставил я, и 25 по умолчанию, но стоит ли лишний раз насиловать HDD или SSD перезаписями… Не знаю.
Дозапись файла:
опция -s <число> (--size=<число>)
Дозаписывает файл числом
байт (случайных). Если использовать после числа без пробела K
M
или G
, то, соответственно -кило -мега или -гига байт. На мой взгляд, это излишне, найдут у вас в директории C:\DOC
файл мой_кот.jpg
размером в 5Гб и удивятся. Но вообще можно, shred
с файловой системой обращается аккуратно и другие файлы не затрет.
Забить все нолями:
Опция -z
(--zero
)
На последней итерации затирания, shred
перезаписывает весь файл символом с кодом 0
.
На мой взгляд, довольно полезная опция, при использовании рекомендаций по переименованию файла и удалению, после затирания. «А хрен знает, товарищ майор, что это у меня за файл был с названием dfghuyty.13
в D:\DOC
, вирус, наверное.»
(Не)дописывать до кластера:
Опция -x
В Linux’овой версии shred
эта опция включает не дописывание до кластера, самое странное, что в Windows-версии наоборот, отключает.
Небольшое пояснение. В стандартных файловых системах файл занимает 1 кластер на диске. Т.е. файл, какого бы размера он не был, займет, как минимум 1 кластер. Размер кластера устанавливается настройками ОС, также его можно изменить при форматировании (иногда). Например, кластер в NTFS при стандартном форматировании равен 4Кб, т.е. 4096 байт, потому, даже если файл фактически занимает 4 байта, например, текстовый файл с содержимым 1234
, он все равно будет занимать 1 кластер. Если файл больше одного кластера, то автоматически он займет весь следующий, даже если в файле 4096+1 байт, и т.д.
Если (в Windows-версии shred
) применить опцию -x
к файлу 3.txt
, который содержит 4 байта (текст 1234
, например), то shred
и запишет 4 случайных байта.
Мое мнение: опцию -x
не использовать, пусть уж затирает кластер целиком.
Оптимальный вариант опций для мелких повседневных задач (затереть небольшой файл):
shred -n 3 -z <file_or_mask>
где <file_or_mask>
— файл или маска файлов.
Позже напишу батник, который будет затертые файлы рандомно переименовывать и удалять.
Припер шеф в офис телевизор, новый здоровый плоский, чтоб клиентам МУЗ-ТВ или какое другое камеди показывать, мол, пусть будет, как в лучших домах города.
Сразу выяснилось, что коаксиал в офисе есть, но это оказалось не кабельное, а какая-то неведомая фигня, которая, в общем, даже неведомое показывать отказалась, хотя по тестам там даже какой-то сигнал есть, но с ним я ночью поэкспериментирую, вдруг какая Бухта Кэндл или Криполе Чудес после полуночи передается.
Оказалось, железячка не венде (какой-то окончательно порезанной и изуродованной 10-ке), так что довольно быстро научил его показывать из расшаренной Самбы видосы, но, поскольку там одни ужастики 80-х («Извне», «Реаниматор», «Фантомы» и.д.), то для клиентов это не включишь, а за ютупом следить надо, вдруг посреди котиков Невзоров вылезет.
В общем, хуй с ним, сказал начальник, и попросил Большие Красивые Часы на весь экран.
Оказалось, что после небольшого шаманства, железке можно скрамливать неподписанные экзешники, и заливать все что хочешь, на доступный пользователю раздел SSD.
Что-ж, сказал я… И немедленно выпил. А потом сделал часы (ну как сделал, сконвертировал в экзешник(и)).
Clock_1.exe
— часы в стандартном окне (с кнопками развернуть, свернуть и закрыть)
Clock_Noborder.exe
— часы в стандартном окне без заголовка, закрываются ALT+F4 или по щелчку правой кнопкой мыши, выпадет меню с пунктом Exit
Clock_Fullscreen.exe
— часы на полный экран без заголовка, закрываются аналогично предыдущему варианту. Идеальны для стационарного показа на мониторе, телевизоре, старом смартфоне под винду или информационном киоске.
swf\Clock_1.swf
— оригинал программы.
Translit Renamer — программа, которая заменяет русские буквы в именах файлов на латинские, т.е. транслитерирует имена файлов и каталогов.
v 0.0.1b (L) ChaosSoftware 2022.
Использование: transren.exe <-h>|<-m <mask> и/или <-t>>[-d] [-s]
-h
— эта помощь
-m <mask>
— Маска <mask>
, маска для файлов, которые нужно переименовать
-t
— переименовать каталоги (по маске каталоги не ищет)
[-d] <directory>
— Стартовый каталог. Если не указан, используется текущий каталог.
[-s]
— включить в поиск подкаталоги
[-f]
— только поиск, показывает файлы для переименования
Примеры:
transren.exe -m *.html
— транслитерировать *.html
в текущем каталоге
transren.exe -t
— переименовать подкаталоги в текущем каталоге
transren.exe -m *.html -s
— переименовать *.html
в текущей директории и всех подкаталогах
transren.exe -m *.* -s -t
— транслитерировать все файлы и все поддиректории в текущей директории
transren.exe -m *.html -d D:\DOC\
— транслитерировать файлы *.html
в каталоге D:\DOC
Если файл существует, программа спросит, заменить ли его.
Если каталог существует, программа его пропустит.
Была у меня для этих целей программулина на VB 6.0, но за давностью лет проебалась, вместе с исходниками. Пришлось с ноля переписывать на Трупопаскале FreePascal, в принципе, как написаны основные части, я уже рассказал, по тегу pascal (копия на LJR)
Зато не требует за собой таскать framework и кучу библиотек.
+ 64 Мб ОП
+ 800 Kb HDD
+ OS: Windows XP — Windows 11.
Экзешник
Инсталлятор (распаковывается в %WINDIR%
)
ZIP-архив
Понадобилось сделать что-то типа такого:
Файл уже существует. Заменить? [Y/N]
Вспомнил, что в Турбопаскале была функция ReadKey
из модуля Crt
, а вдруг и во FreePascal есть?
Есть, но модуль Crt
делает глюк русскому языку:
program TestCrt; uses Crt; var Ch:char; begin WriteLn('Нажмите любую клавишу...'); Ch:=ReadKey; end.
Ладно, пробуем заменить Crt
на WinCrt
.
Глюк с русским языком пропал, но функция ReadKey
на нажатие клавиш не реагирует, да пиздец, еб твою мать!
В общем, долго плевался, реализовал через TKeyEvent
из модуля Keyboard
:
uses SysUtils,Keyboard; function Ask(FilePath:UnicodeString):boolean; var K: TKeyEvent; KS:String; begin WriteLn ('File ', FilePath, ' is exists! Replace file? [Y/N]'); InitKeyBoard; while true do begin K:=GetKeyEvent; K:=TranslateKeyEvent(K); KS:=KeyEventToString(K); if (KS='Y') or (KS='y') then begin DoneKeyBoard; exit(true); end; if (KS='N') or (KS='n') then begin DoneKeyBoard; exit(false); end; end; DoneKeyBoard; exit(false); end;