Преобразование вредоносного кода или доброкачественного кода в шкалу серого - PullRequest
0 голосов
/ 30 марта 2019

Как преобразовать двоичный код в серое изображение?

Недавно я видел, как вредоносное ПО конвертируется в изображение. Бинарное вредоносное ПО -> 8-битное векторное изображение -> Серое изображение. У меня меньше знаний об этом преобразовании изображений.Как это сделать?

1 Ответ

1 голос
/ 30 марта 2019

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

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

Это тривиально,например, с PGM-двоичным (P5) форматом изображения , который имеет очень короткий и простой текстовый заголовок, а затем двоичные данные.В заголовке также должна быть указана высота, поэтому вы должны рассчитать ее по выбранной ширине и размеру файла.

Например, этот быстрый взлом сценария оболочки:

#!/bin/bash
# args: filename  [width]
# writes to stdout, redirect to a file

fn=$1
width=${2:-32}   # default width=32 if there's no 2nd arg

size=$(stat -c %s "$fn")
echo -e "P5\n$width $((size/width))\n255"   # header
cat "$fn"

это вывод на 15kB a.out, сделанный gcc, это то, что я могу просматривать (и увеличивать) с помощью любого средства просмотра изображений, которое понимает изображения PNG.Например, qiv, geeqie, gwenview.

P5              (grayscale, binary version)
32 449          (width height)
255             (max grayscale value)
^?ELF^B^A^A...

Например, ./stick-in-pgm.sh a.out 64 > a.out.64.pgm правильно использует width = 64 и вычисляет высоту = 224 из размера файла.

Очевидно, большинство PGM-читая программы не заботятся, если точный размер файла равен полному числу строк, но они жалуются, что файл "заканчивается рано", если высота слишком велика.(Так что вы не можете просто echo 32 10000.) Деление размера на ширину дает высоту, которая заставляет их не жаловаться;Мне не нужно было использовать dd, чтобы заполнить вывод полным числом 32-байтовых блоков строк.

...