Толик Панков
hex_laden
............ .................. ................

October 2025
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

Толик Панков [userpic]
Преобразование двоичных (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
Перевод помощи к скрипту

Источник

Это репост с сайта http://tolik-punkoff.com
Оригинал: https://tolik-punkoff.com/2023/07/25/preobrazovanie-dvoichnyh-raw-dannyh-v-tekstovyj-shestnadtsaterichnyj-format/

Comments

немного не то.

base64 хуево в сканере распознается, HEX-значения гораздо лучше.

Нет такого скрипта чтобы Волга в Каспийское море впадала? Очень нужно прямо сейчас

(Anonymous)

Есть скрипт с посылом тебя нахуй, вонючий глист из жопы гг

Это какой-то тонкий гомосексуальный юмор?

Тут скриптом не получится. Для достижения искомого эффекта Вам надо отсосать у негра, как Ваш любимый гуру. Много негров ему в Раю!

(Anonymous)

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

Ахуеть, ты это серьёзно?? ))) И куда они ходят для начала?

Ну если клиент говорит, что не ходят, значит не ходят. Я-то тут причем?

Что это за место такое, где интернета нету?

А распознавание не подвержено ошибкам? Можно было бы корректирующие коды тогда добавить.

Насколько я понимаю, челу ключи от банкинга надо за границу передать, обычно это делалось отправкой криптостойкого донгла, но теперь не доходят, видимо.

Английский прекрасно распознается тем же Fine Reader-ом, в конце-концов можно и секретаршу попросить с бумажки вбить в текстовый файл, а потом конвертнуть вбитое в бинарник.

Но как это отличается от пересылки того же файла по интернету?

Я в такие подробности не влезал - дали тз, я сделал.

Может там по протоколу надо 8 подписей, сургучную гербовую печать и все это спецкурьером доставляется, тому ще де в интернетах этих ваших боты, вирусы и спамы.

В госорганах, кстати, с передачей ключей был одно время похожий геморрой. Но там было все внутри ГОРФ, тем не менее, приходило два конверта - с донглом КриптоПро и отдельно отпечаток ключа и контрольная сумма на бумажке с печатью и подписью ответственного лица. Админу надо было подключить донгл и при первом запуске вбить цифры в софтину, потом вроде как отменили, но админу рекомендовалось проверять ключ, опять же, вбивая цифры с бумажки в софтину.

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

И вообще, подпись и печать ответственной морды - это до сих пор лучшее, что придумало человечество. От косяков это не избавит (как и все любое другое), но хотя бы понятно, кому ответственную морду набить на кого возложить ответственность.

Не, пока что лучшее, что придумало человечество в криптографии, - это RSA.

В области криптографии - да, а в поиске виноватых, подпись ответственной морды.