Понятие упаковщика и распаковщика.




ИССЛЕДОВАТЕЛЬСКИЙ УНИВЕРСИТЕТ»

(НИУ «БелГУ»)

ИНСТИТУТ ИНЖЕНЕРНЫХ ТЕХНОЛОГИЙ И ЕСТЕСТВЕННЫХ НАУК

КАФЕДРА МАТЕМАТИЧЕСКОГО И ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ИНФОРМАЦИОННЫХ СИСТЕМ

 

Курсовая работа

по предмету «Информатика и основы программирования»

на тему «Разработка упаковщика»

 

Выполнил:

Студент группы 07001701

Яцков Максим Александрович

 

Проверил:

доцент

Чашин Юрий Геннадиевич

 

БЕЛГОРОД 2018

Содержание

Введение

Справочные системы. Основные сведения.

Понятие упаковщика. Понятие распаковщика.

Алгоритм работы.

Описание методов (алгоритмов) кодирования.

2.1. Кодирование длин серий.

2.2. Словарное сжатие (алгоритмы LZ).

2.3. Кодирование с помощью деревьев Шеннона-Фано.

2.4. Кодирование с помощью деревьев Хаффмана.

Разработка консольного приложения упаковщика.

Программная реализация консольного приложения упаковщика.

Тестирование программы (консольного приложения).

Заключение.

Список используемой литературы.

Приложение.

 


Введение

 

Программы-архиваторы, или программы-упаковщики, предназначены для архивации файлов с целью их длительного хранения. Под архивацией файлов обычно понимают помещение одного или нескольких исходных файлов в архивный файл (архив) в сжатом (упакованном) виде. Такой файл содержит в себе служебную информацию об именах файлов, датах и времени их создания или модификации, объемах, способах сжатия информации. Сжатием информации называют процесс уменьшения ее избыточности и, следовательно, сокращения объема памяти для хранения. Уменьшение избыточности достигается различными способами: упрощением кодов, исключением из кодов постоянных битов или представлением повторяющихся символов в виде коэффициента повторения. Программы-архиваторы файлов представляют интерес с нескольких точек зрения:

 

• позволяют пополнять архивный файл новыми файлами или изымать из архивного файла требуемые файлы. При пополнении архива в него заносятся только модифицированные (обновленные) файлы;

 

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

 

• упакованные файлы занимают малый объем (в среднем от 20 до 90% своего первоначального объема);

 

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

 

• при архивации сохраняются в архиве имена каталогов вместе с именами файлов, что позволяет сохранить всю файловую структуру при разархивировании файла.

 

Одним из важнейших показателей качества архивации файлов является коэффициент сжатия

 

 

где Vc, V0 – соответственно объемы сжатого и исходного файлов.

 

Степень сжатия зависит от используемой программы-архиватора, способа сжатия, типа исходного файла и других факторов. Высокую степень сжатия (малое значение Кс) имеют графические и текстовые файлы, файлы данных, для которых KC составляет 5–40%. Меньшей степенью сжатия обладают файлы исполняемых программ и загрузочных модулей, для которых Кс составляет 60–90%. Практически не подвергаются сжатию архивные файлы.

 

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

Справочные системы. Основные сведения.

 

Понятие упаковщика и распаковщика.

 

Упако́вка исполняемых фа́йлов заключается в сжатии исполняемого файла и прикреплении к нему кода, необходимого для распаковки и выполнения содержимого файла. Упаковка применяется по ряду причин:

 

Упакованный файл занимает меньше места на носителе информации, что помогает ускорить его загрузку в память.

Некоторые виды упаковки совмещены с шифрованием содержимого файла для предотвращения обратной разработки программы.

Упаковка с шифрованием может использоваться и злонамеренно при создании вирусов, чтобы зашифровать и видоизменить код вируса для затруднения его обнаружения системами, основанными на сигнатурах (антивирусами, СОВ и т. п.)

Распаковщики.

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

 

Многие распаковщики (например, procdump) запускают файл и создают распакованный вариант файла из образа, загруженного в память. Однако в случае, если этот файл содержал вирус, система может быть повреждена. Кроме того, у упаковщиков существует ряд приёмов борьбы с динамической распаковкой: например, расшифровывать код не полностью, а лишь по мере исполнения, или, например, расшифровывать и запускать вирус целиком только в определённый день недели.

 

Статические распаковщики, которые пытаются распаковать файл, не запуская его (например, CUP386 или UNP), оказываются бесполезны, если алгоритм упаковки требует запуска файла.

 

Алгоритм работы

Вот есть у нас, например, notepad.exe. В обычном своем 32-битном виде он весит где-нибудь 60 Кб. Мы хотим его существенно уменьшить, сохранив при этом всю его функциональность. Какими должны быть наши действия? Ну, для начала мы наш файлик от первого до последнего байтика прочтем в массив. Теперь мы можем делать с ним всё что угодно. А нам угодно его сжать. Берем его и отдаем какому-нибудь простому компрессору, в результате чего получаем массив уже не в 60 Кб, а, например, в 20 Кб. Это круто, но в сжатом виде образ нашего «Блокнота» — это просто набор байтов с высокой энтропией, это не экзешник, и его нельзя запустить, записав в файл и кликнув. Для массива со сжатым образом нам нужен носитель (загрузчик), очень маленький исполняемый файл, к которому мы прицепим наш массив и который его разожмет и запустит. Пишем носитель, компилируем, а затем дописываем к нему в конец наш сжатый «Блокнот». Соответственно, если полученный в результате всех действий файл (размер которого немного больше, чем у просто сжатого «Блокнота») запустить, он найдет в себе упакованный образ, распакует, распарсит его структуру и запустит.
Как видишь, нам предстоит автоматизировать не слишком сложный процесс. Нужно будет просто написать две программы, загрузчик и, собственно, упаковщик.
Алгоритм работы упаковщика:

· считать PE-файл в массив;

· сжать массив каким-нибудь алгоритмом сжатия без потерь;

· в соответствии с форматом PE дописать сжатый массив к шаблону-загрузчику.

Алгоритм работы загрузчика:

· найти в конце себя массив со сжатым PE-файлом;

· разжать его;



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2019-01-11 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: