Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Боровков А.С. Методичка.doc
Скачиваний:
6
Добавлен:
09.06.2015
Размер:
210.43 Кб
Скачать

*Метод 2

Для реализации второго метода необходим контейнер с большим количеством пробелов. Так как для сокрытия одного бита (0 или 1) информации нам нужен один пробел и исходное сообщение содержит 15*8 (120) бит информации для сокрытия строки, состоящей из 15 букв необходим контейнер, который будет содержать минимум 15*8 пробелов.

Сокрытие. После того, как мы прочли файл с информацией для сокрытия и сформировали двоичную цепочку, начинаем чтение файла-контейнера по строкам. Для сокрытия всего сообщения двигаемся слева направо по двоичному ряду. Идем слева направо в строке файла-контейнера по символам. Как только встречаем пробел, анализируем символ из двоичной последовательности. Если символ равен 1, то пробел в строке удваивается, если ноль, то пробел остается пробелом. Когда строка файла-контейнера заканчивается, записываем измененную строку в третий файл, считываем из файла-контейнера новую строку и т.д., пока не закончится цепочка из нулей и единиц.

Извлечение. На входе имеем текстовый файл со строками, читаем файл по строкам. Идем по каждой строке слева направо. Пока не конец строки, анализируем каждый символ в строке. Если текущий и следующий символы равны пробелу, то к двоичной последовательности добавляем единицу, иначе – ноль. Когда длина последовательности доходит до восьми, осуществляем перевод из двоичной в десятичную СС и получившееся число записываем как байт в новый файл, очищая двоичную последовательность. И так до тех пор, пока не закончится файл со строками.

*Метод 3

Для реализации этого метода необходим файл-контейнер, содержащий много русских букв, которые по написанию схожи с английскими. Например, А, В, С, Е, О, М, Н, Р, е, о, к, T и так далее. Можно использовать как строчные, так и заглавные буквы. Таких букв в контейнере должно быть как минимум в 8 раз больше, чем в букв в предложении, которое мы хотим скрыть. Причина – точно такая же, как и в предыдущих методах.

Сокрытие. После того, как мы прочли файл с информацией для сокрытия и сформировали двоичную цепочку, начинаем чтение файла-контейнера по символам. Для сокрытия всего сообщения двигаемся слева направо по двоичному ряду. Анализируем очередной символ строки файла-контейнера. Если русский символ не имеет аналога с английским, оставляем этот символ без изменений и записываем его в третий файл. Если же имеет схожее написание с английской буквой, то смотрим на символ в двоичной последовательности. Если он равен 1, то русскую букву заменяем на английский аналог, иначе – русская буква остается русской. Записываем новый символ в третий файл. Таким образом, выполняем сокрытие, пока цепочка из нулей и единиц не закончилась.

Извлечение. На входе имеем символьный файл. Читаем файл по символам. Анализируем каждый символ. Если русский символ не имеет английских аналогов, мы его пропускаем, читая следующий символ. Если же аналог существует, то смотрим на сам символ. Для проверки принадлежности символа к русскому/английскому языку необходимо узнать код этого символа в кодировочной таблице ASCII.

Как уже было выше сказано, каждый символ имеет цифровое значение или код в диапазоне от 0 до 255. Например, русская буква «а» имеет код 116, а английская буква «a» имеет код 43. Причем, следует отметить, что строчные и заглавные буквы одного алфавита имеют различные кодировки.

Для того чтобы узнать, какое цифровое представление имеет тот или иной символ, следует воспользоваться функцией ord(X), где X – определенный символ.

Ord(X) – возвращает номер символа (от 0 до 255)

А функция char(d) возвращает по номеру соответствующий ему символ.

Char(d) – возвращает символ по номеру.

Вернемся к извлечению информации. Если значение функции ord(X) попадает в английский интервал (например, от 40 до 91), то очередной символ в двоичной последовательности станет равным 1. В противном случае, он равен 0. После того, когда входной файл будет полностью прочтен, сформируется двоичная цепочка. Эту цепочку следует разбит на группы из 8-ми символов (по байтам) и перевести из двоичной СС в десятичную. Затем каждый символ записать в новый выходной файл. Этот файл и будет содержать сообщение, которое было скрыто в файле-контейнере.

Анализ PE-файлов и поиск по сигнатуре.

*Что такое сигнатура?

Получив необходимые начальные сведения о структуре файлов и базовых функциях и процедурах в языке программирования Turbo Pascal, можно перейти к финальному заданию - осуществлению поиска файлов по сигнатуре.

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

*PE-файлы

Любая программа для Windows является исполняемым файлом, то есть программу можно запустить или выполнить. Большинство программ для Windows имеет расширение «.exe». То есть, расширение «.exe» говорит о том, что данный файл является программой. Аббревиатура «PE» означает «Portable Executable», то есть с английского – «переносной исполняемый». Кроме программ для Windows к PE-файлам относят динамические библиотеки с расширением «.dll» и некоторые другие.

Рассмотрим структуру PE-файлов более подробно. Для этого нам понадобится файловый менеджер far. Запуск и работа с ним описаны выше, поэтому будем считать, что вы уже умеете им пользоваться.

Для примера выберем диск «C:\» и зайдем в директорию «C:\Windows» и найдем файл «notepad.exe». Нажимать «Enter» не следует, запускать мы его не будем. Нам нужно лишь исследовать его. Для этого сначала нажмем клавишу «F3», а затем – «F4». Откроется шестнадцатеричное представление файла «notepad.exe». На экране монитора появится примерно следующее изображение:

Обратим внимание на самые первые символы, из которых состоит данный файл, а именно: «MZ». Их шестнадцатеричное представление – 4D и 5A. Любой PE-файл, в том числе и этот начинается с этих двух символов.

«MZ» – это сигнатура DOS-заголовка. DOS-заголовок необходим для того, чтобы программа могла запуститься в операционной системе MS-DOS. Если при анализе файла первые два символа не равны «MZ», то это не исполняемый файл. Теперь перейдем на смещение (позицию в файле относительно нулевого адреса) 18h. По этому адресу находится 4-х байтовая величина. В любом PE-файле она должна быть больше, либо равняться 40h. В нашем случае это выполняется. Если мы посмотрим на самый правый столбец в far-manager, то увидим строку «This program cannot be run in DOS mode». Этот фрагмент программы называется Stub (стаб) и выполняется, если программу для Windows пытаются запустить в операционной системе MS-DOS.

После DOS-заголовка, начинающегося с «MZ», идет PE-заголовок. PE-заголовок начинается с символов «PE». В PE-заголовке хранится служебная информация: таблица секций (ячеек), из которых состоит программа, список динамических библиотек, которые использует программа и др.