С помощью графического редактора Paint создать изображение прямоугольника с размером и цветом в соответствии с таблицей 6. При этом в Paint следует использовать опции Рисунок – Атрибуты…Переключатель Единицы измерения установить в положение точки. Размеры фигур умышленно выбраны малыми для того, чтобы просматриваемый объем файла был небольшим.
Порядок выбора атрибутов иллюстрирует следующий рисунок. Слева вверху виден белый прямоугольник в увеличенном масштабе.
Созданный рисунок сохранить в своей папке. Новому файлу целесообразно дать имя, которое характеризует его содержимое, например, Белый_10_4.С помощью программы Courier в созданный рисунок занести скрываемый текст из табл. 6. Порядок выполнения этой операции был изучен при выполнении Задания 2. Начиненный файл нужно сохранить в своей папке с любым именем, например, Белый_10_4_SeL.
С помощью программы HEdit32 изучить содержимое пустого и наполненного контейнера, то есть двух ранее созданных графических файлов.
Для примера ниже показано содержимое файла для черного прямоугольника размером 10х4 пикселя. Первые строки (54 байт) содержат служебную информацию (заголовок). Так как прямоугольник черный, то байты, отображающие цвет прямоугольника, содержат нули (00).
В левом столбце указаны восьмиразрядные шестнадцатеричные числа – адреса ячеек памяти. Правее приведено содержимое ячеек памяти в шестнадцатеричной системе счисления
Нужно обратить внимание на следующую деталь. При статическом распределение оперативной памяти (которое уже не используется в современных ЭВМ) адреса байтов будут совпадать с адресами ячеек памяти ОЗУ. При динамическом распределении памяти физические адреса определяются операционной системой в зависимости от наличия свободного места в ОЗУ.
В дальнейшем при описании принципа стеганографии будем использовать термин «ячейка памяти», понимая под этим адрес байта в исходном файле, не забывая, что при динамическом распределении памяти физический адрес в ОЗУ будет иным.
На следующем рисунке показана память контейнера, в который записана буква Z.
.
В первых строчках файла содержится служебная информация (ячейки 0…2FH). Ниже приведен фрагмент памяти, где выделены ячейки памяти, в которых размещена скрываемая в контейнере буква Z.
Код буквы Z в кодировке CP-1251 равен 90D = 01011010B.
Буква Z будет представлена (скрыта) в программе Courier последовательностью четырех байтов: 10B = 02H, 10B = 02H, 01B = 01H, 01B = 01H. Этот результат получен следующим образом: взяты по 2 бита из двоичного кода буквы, начиная с младших (правых) разрядов, и заменены ими 2 младших бита в соответствующих байтах изображения (файла-контейнера).
Процесс разбиения кода буквы Z на пары битов и порядок их размещения в памяти иллюстрирует следующая таблица:
Двоичная СС
Шестнадцатеричная СС
Адреса шестнадцатеричные
3B
6D
6A
Таким образом, в результате разбиения восьмиразрядного двоичного кода буквы Z на пары битов и переноса их в контейнер получим:
биты 2 и 1 (10B), записанные в байт 00H, преобразуют его в байт 02H;
биты 4 и 3 (10B), записанные в байт 00H, преобразуют его в байт 02H;
биты 5 и 6 (01B), записанные в байт 00H, преобразуют его в байт 01H;
биты 8 и 7 (01B), записанные в байт 00H, преобразуют его в байт 01H.
В соответствии с разработанным автором программы Courier алгоритмом младший (правый) байт будет расположен по адресу 67H, второй байт расположен по адресу 6AH, третий – по адресу 6DH. Старший байт будет храниться на некотором отдалении от этих трех байтов, в ячейке по адресу 3BH.
Рассмотрим еще один пример. Предположим, что требуется скрыть в файле с изображением черного прямоугольника 4x10 латинские буквы RSX.
Вначале приведем содержимое памяти начиненного контейнера, а затем дадим комментарии к полученному результату.