Преобразование двоичных (RAW) данных в текстовый шестнадцатеричный формат.

Преамбула

Задача, которую мне поставил клиент, была такая — преобразовать бинарный файл в текст, который можно распечатать и переслать по почте. Чтоб его можно было сканером распознать, и обратно в бинарный файл преобразовать. Ну очень плохо ходят флэшки, и тем более, криптостойкие донглы промеж границ из-за Хуйла, сами понимаете.

Пример тестового бинарного файла (в Linux):

В Windows:

Понятно, что напечатать это нельзя, для распечатки надо преобразовать бинарный RAW-формат в что-то удобопечатоемое, например в строки, содержащие шестнадцатеричные цифры:

EA 38 B6 C1 18 1A 4F B3 5F 81 B7 A4 1B 50 89 18 B3 0B 24 27 36 59 57 D0 3A 78 1C
3E D6 F2 27 01 13 4B 54 65 6E 44 61 23 7D D4 ED 60 CE 8E C1 A2 58 45 BB 35 84 A7
69 28 D4 09 5F 99 F5 27 CA 30

Linux

В Linux есть сразу несколько инструментов, позволяющих выполнить дамп файла в набор шестнадцатеричных значений, причем «из коробки». Не зря же эта ОС изначально писалась программистами для программистов.

Кратко ознакомиться с этими инструментами можно здесь:

Convert Binary Data to Hexadecimal (оригинал статьи на буржуйском)
Преобразование двоичных данных в шестнадцатеричный формат (Перевод на русский, PDF)

Я воспользовался утилитой hexdump, и написал небольшой скрипт, который при вызове его с параметром, содержащим путь к файлу, создает в каталоге с оригинальным файлом файл имя_оригинального_файла.dump, который содержит шестнадцатеричное представление исходного файла:

dumpfile <имя_файла>

Основной алгоритм укладывается в одну строку:

cat $1|hexdump -e '27/1 "%02X " "\n"' >$1.dump

1. Читаем файл, переданный на вход скрипта командой cat.
2. Передаем в pipe (|) данные hexdump‘у
3. Скидываем вывод (>) в файл $1.dump

Скрипт на GitHub

Windows

В винде, как обычно — в таких случаях все через жопу, слава Ктулху, нашлись умные люди, которые все сделали за меня на BAT/CMD и доступном в системе JScript.

Совместимость — начиная с Windows XP

Перевод справки BAT-файла.

HEXDUMP [/Опция [Значение]]...

Записывает содержимое стандартного ввода в шестнадцатеричном виде в стандартный вывод, по 16 байт на строку, используя следующий формат:

ООООООО ХХ ХХ ХХ ХХ ХХ ХХ ХХ ХХ ХХ ХХ ХХ ХХ ХХ ХХ ХХ ХХ ХХ ХХ ХХ ХХ ААААААААААААААААА

где:

0000000 = шестнадцатеричное смещение в пределах файла
XX = шестнадцатеричное значение байта
AAAAAAAAAAAAAAAA = байты в формате ASCII (управляющие коды и не-ASCII в виде . [символ точка])

Вывод кодируется как ASCII, каждая строка завершается символом CarriageReturn — перевод строки.

Поведение можно изменить, добавив любую комбинацию следующих параметров:

/I InFile — ввод из InFile вместо стандартного ввода
/O OutFile — вывод в OutFile вместо stdout: — перезаписывает InFile
/NA — отключить вывод ASCII-символов.
/NO — отключить вывод смещений
/R — Необработанный шестнадцатеричный код в одной строке без пробелов между байтами.
/LF — LineFeed как признак конца строки (UNIX-формат) вместо CarriageReturn LineFeed (по умолчанию, формат Windows)
/NL — без разделителей строк, весь вывод в одной строке без разделителей строк
/U — вывод в кодировке Unicode с BOM (UTF-16)
/V — Вывести информацию о версии
/? — Вывести эту справку

HEXDUMP.BAT версии 2.1 был написан Дэйвом Бенхамом.
и поддерживается на https://www.dostips.com/forum/viewtopic.php?f=3&t=8816

Нужные (мне) параметры

Вывод в файл (пример):

hex_dump.bat /I test.temp /O test.temp.dump /NA /NO

Вывод на консоль:

hex_dump.bat /I test.temp /NA /NO

Пример вывода на консоль:

60 ab 2b b8 4a 3f 0d 91  a0 a4 09 f0 8f 4b 51 95
3a 22 1b 0e 5b 6d d0 3f  80 96 c5 22 98 dc 4a 2b
89 38 52 96 42 c0 ab 04  c4 8e b8 87 dd 7c 4a b2
e1 6a b1 c2 30 66 82 54  21 5a 40 a2 bb f8 19 89

Скачать BAT-файл

С GitHub
Перевод помощи к скрипту

Источник

Аналог линуксовой команды cat в Windows

Внезапно, есть.

Это команда type.

Использование:

type <путь_и_имя_файла>

Справка по команде

Формат командной строки:

TYPE [диск:][путь]имя_файла

Примеры: type /? — отобразить подсказку по использованию.

type mytextfile.txt — вывести на экран содержимое текстового файла mytextfile.txt текущего каталога.

type mytextfile.txt | more — вывести на экран содержимое текстового файла mytextfile.txt в постраничном режиме.

type mytextfile.txt > D:\newfile.txt — перенаправление вывода команды type в файл, т.е. копирование текстового файла mytextfile.txt в текстовый файл D:\newfile.txt.

type bigfile.iso > nul — вывод файла на фиктивное устройство nul, что эквивалентно просто чтению заданного файла.

При выводе на экран нетекстовых файлов, байты, содержимое которых представлено неотображаемой частью таблицы ASCII (0x00 – 0x1F) интерпретируется как служебные символы, что выражается в непредсказуемом перемещении курсора, выводе звука, очистке окна и т.п.

Источник

Совместимость: DOS 6.x и выше.

Новое кумулятивное обновление Windows 7 от любимейшего Simplix

Преамбула

Понадобилось в одном из офисов массово обновить винды.

Проблемы

1. Теперь пакет с сайта не скачать с российских IP.
2. Не установится, если обнаружит российский IP при запуске, надо физически отключать интернеты, выдернув сетевой кабель из компа.

Понятно, в связи с чем.

Миф

На форумах (дурацких) люди (дурацкие) говорят, что последний пакет обновлений грохает русскую винду, даже если предыдущие и следующие условия соблюдены. Все работает, проблем не возникло, проверено 15 раз.

Пасхалочка


Как ответить на вопросы правильно, думаю, догадаетесь сами.
И да, минутку надо подождать, после появления второго окна (на совсем медленных ведрах лучше две).

Ссылки

Скачать обновление (последняя версия)

Последняя довоенная версия (копия), если кому надо для успокоения души. Ключик спрашивать лично в Телеграме, вате не дам.

UPD к предыдущему посту про tcplay.

TCPLAY: шифрование несистемного раздела. (копия)

7. Отмонтирование и отключение раздела (поместить в скрипт /etc/rc.d/rc.local_shutdown):

umount /mnt/sdb2c
tcplay --unmap=sdb2c
rmdir /mnt/sdb2c

7. Отмонтирование и отключение раздела (поместить в скрипт /etc/rc.d/rc.local_shutdown):

umount /mnt/sdb2cи rmdir /mnt/sdb2c

Можно поместить для успокоения души, tcplay и xpartx сами должны при получении KILL-сигнала корректно завершить работу и ничего не попортить, как они делают с разделами на системном диске.

Как найти Полярную звезду. И немного про эффект Манделы.

Пост Леонида Каганова напомнил историю.

Во-первых, расскажу, как найти ее правильно, а во-вторых, вспомню, как несколько лет назад, со мной и друзьями случился «эффект Манделы» ИРЛ.

Как найти Полярную звезду.

Чтобы найти Полярную звезду, надо сначала найти характерную конфигурацию из семи ярких звёзд — созвездие Большой Медведицы, напоминающее ковш (астеризм Большой Ковш), затем через две звезды (Дубхе и Мерак) «стенки» ковша, противоположной «ручке», мысленно провести линию, на которой отложить пять раз расстояние между этими крайними звёздами. Примерно в конце этой линии находится Полярная звезда. Направление на Полярную звезду совпадает с направлением на север, а её высота над горизонтом совпадает с широтой наблюдателя.

В Википедии есть правильная инструкция

И про «эффект Манделы».

Сидим с друзьями, Тема спрашивает, помню ли я, как найти полярную звезду. Вообще, это такой школьный вопрос по астрономии, который мы обычно задаем новым членам нашего общества, типа такой вопрос на профпригодность.

— Конечно, ищешь Большую Медведицу (ковш), потом направляешь взгляд вверх, там будет Малая Медведица, от хвоста Большой Медведицы (от последней звезды в хвосте Большой) проводишь линию, получается, третья звезда в ковше Малой, если считать сверху и слева направо, это она и есть.

Скай и Санек это дело подтверждают. А они наблюдатели гораздо лучше меня, у них вся карта северного полушария в голове.

— А теперь, парни, загуглите-ка вики! Звезда-то Полярная в хвосте ковша Малой Медведицы.

Оказывается, все так, в хвосте, и схема есть в Википедии, как ее найти. И по бумажной карте, которая висит в нашем «офисе» я сверился, да, Полярная — последняя звезда в «ручке» ковша Малой Медведицы.

Причем, Тема помнит оба варианта, а мы только неправильный. Во всяком случае, неправильный в этой вселенной.

Вот ще це було? Были ж абсолютно трезвые и без веществ, а с ума поодиночке сходят, вместе только гриппом болеют.

До сих пор тот случай иногда вспоминаем.