Диплом: Алгоритмы упаковки и шифрования исполняемого кода

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам
2
Оглавление
ВВЕДЕНИЕ ................................................................................................................ 4
ГЛАВА 1. ИСПОЛЬЗОВАНИЕ АЛГОРИТМОВ УПАКОВКИ И
ШИФРОВАНИЯ ИСПОЛНЯЕМОГО КОДА ............................................................ 9
1.1. Актуальность темы .................................................................................... 9
1.1.1. Алгоритмы упаковки ............................................................................. 10
1.1.2. Алгоритмы шифрования ....................................................................... 11
1.2. Основные цели использования алгоритмов упаковки и
шифрования на разных платформах ......................................................................... 12
1.2.1. Мобильные устройства.......................................................................... 12
1.2.2. Веб-разработка ....................................................................................... 15
1.2.3. Прикладное ПО ...................................................................................... 17
1.2.4. Системное ПО ........................................................................................ 22
1.3. Распаковка кода ....................................................................................... 24
1.3.1. Практические аспекты ........................................................................... 24
1.3.2. Reverse engineering ................................................................................. 24
1.3.3. Декомпиляторы ...................................................................................... 26
1.3.4. Дизассемблеры ....................................................................................... 26
1.3.5. Взлом ПО ................................................................................................ 27
ГЛАВА 2. ОБЗОР МЕТОДОЛОГИЙ .............................................................. 31
2.1. Методы упаковки ..................................................................................... 31
2.1.1. Алгоритмы сжатия ................................................................................. 31
2.1.2. Компрессоры .......................................................................................... 36
3
2.1.3. Архиваторы ............................................................................................ 38
2.2. Методы шифрования............................................................................... 41
2.2.1. Шифрование ........................................................................................... 43
2.2.2. Мутация кода .......................................................................................... 50
2.2.3. Обфускация ............................................................................................ 53
2.2.4. Самомодифицирующийся код .............................................................. 56
2.3. «Ненормальное» программирование ................................................... 57
ГЛАВА 3. РАЗРАБОТКА ПО ДЛЯ ШИФРОВАНИЯ И УПАКОВКИ
ИСХОДНОГО КОДА .................................................................................................... 61
3.1. Выбор инструментов ............................................................................... 61
3.2. Практическая реализация ...................................................................... 67
3.2.1. Структура ПО ......................................................................................... 67
3.2.2. Особенности реализации ....................................................................... 69
3.3. Тестирование ПО ..................................................................................... 72
ЗАКЛЮЧЕНИЕ ...................................................................................................... 78
СПИСОК ИСТОЧНИКОВ ................................................................................... 81
4
ВВЕДЕНИЕ
В современном мире упаковка и шифрование исполняемого кода находятся в
стагнации относительно других технологий в IT-индустрии, несмотря на то что эти
два аспекта являются крайне важными и актуальными.
Кажется, что современные скорости процессоров и пропускные способности
каналов с легкостью нивелируют большой размер исходного кода, но это не так:
пользователи не хотят ждать, пока загрузится большой веб-сайт, хотят, чтобы на
устройстве после установки нужных приложений оставалось место для фотографий,
хотят, чтобы данные были в безопасности.
IT-компании хотят, чтобы у них было больше пользователей (которые будут
уходить, если продукт будет медленно работать) и чтобы конкуренты не могли
украсть важные для проекта и технически сложные решения. Однако балансировать
на грани удобства использования и сохранением коммерчески важных реализаций
сейчас не позволяет почти ни одно программное обеспечение. Безопасность
приложений относится к первым десяти трендам и угрозам информационной
безопасности уже много лет. Современные бизнес-процессы все больше зависят от
различных приложений, будь это приложения для управления конвейерами на
производстве, внутренние корпоративные инструменты, устройства Internet-of-
Things (IoT) или другие. Однако специализированных средств защиты приложений
практически нет, обычно эта ответственность возложена на разработчиков продукта,
которые пользуются различными мониторингами, фреймворками, средствами
очистки и нормализации данных и многими другими инструментами.
Наконец, упаковка исходного кода актуальна и на скрытой от бизнеса и
конечных пользователей стороне: разработчики хотят, чтобы среда разработки
разворачивалась парой команд, а системные администраторы - чтобы сервисы
обновлялись не десятком строк в консоли, а одной-двумя.
5
Актуальность темы исследования обусловлена вступлением мировой экономики
в эпоху цифровых перемен. И хотя традиционно от IT считаются зависимыми
телекоммуникационные компании и компании, связанные с банковской сферой, в
ближайшие годы эта тенденция станет определяющим факторов развития
подавляющего большинства организаций. Предприятия будут активно наращивать
свои информационные активы, чтобы устанавливать новые рекорды операционной
эффективности, использовать самые современные возможности по привлечению
клиентов и выходу на рынки и создавать продукты и услуги, в которых ИТ-
составляющая будет если не главным, то одним из центральных факторов успеха. В
этих условиях защита информационных активов становится одним из ключевых
направлений цифровой трансформации. [1]
Среди важнейших информационных активов – приложения, которые лежат в
основе предоставления бизнесу и внешним клиентам большинства современных
сервисов для предоставления. Часто процесс ввода в эксплуатацию новой
программной систем сопровождается серьезным риском для информационной
безопасности. Это могут быть как уязвимости, вызванные невнимательностью
разработчиков (забытые в исходном коде ключи, комментарии относительно
внутреннего устройства продукта и т.д.), так и более серьезные: неправильное
программирование, проектирование или использование инструментов, которые
больше не поддерживаются, с известными и описанными не раз уязвимостями может
привести к появлению серьезнейших пробелов в безопасности системы, которыми
могут воспользоваться злоумышленники.
Наибольший интерес в выстраивании процесса создания безопасного
программного обеспечения высказывают компании, которые создают системы,
связанные с различного рода биллингом, банковской сферой, предоставлением
ежедневно используемых миллионами людей сервисов (почта, мессенджеры), а
также телекоммуникациями (сотовые операторы, агрегаторы и т.п.).
6
Научная новизна работы заключаются в том, что на сегодняшний день не
существует универсального программного обеспечения для упаковки и шифрования
исполняемого кода. Существуют отдельные решения для упаковки, отдельные
решения для шифрования, однако комплексно эти возможности не предоставляет ни
один инструмент.
Шифрование – это разновидность криптографического преобразования
открытой информации на основе алгоритма и ключа, в результате которого
возникает шифрованный текст, нечитаемый для неавторизованных лиц.
Авторизованные лица при этом могут провести обратную процедуру
(дешифрование) и прочитать исходную информацию. Следует отличать шифрование
от кодирования: кодирование тоже преобразует данные, но лишь с целью удобства и
оптимизации из передачи или хранения, секретность не является для кодирования
приоритетом.
Цель исследования заключается в создании программного обеспечения,
сочетающего в себе функции упаковщика и шифровальщика. Особенностью данного
программного обеспечения является нацеленность на исходный код: в упакованном
и зашифрованном виде он должен работать так же корректно, как и в исходном.
Задачами исследования являются:
изучение рынка упаковщиков и шифровальщиков исходного кода
изучение профильной литературы
анализ и классификация методологий упаковки и шифрования исходного
кода
создание программного обеспечения для упаковки и шифрования
исходного кода
тестирование созданного программного обеспечения
Практическая ценность исследования может быть сформулирована двумя
тезисами:
7
более безопасное распространение программного обеспечения с точки
зрения коммерческой тайны
более удобное распространение программного обеспечения с точки
зрения объема распространяемой информации.
При подготовке работы использованы различные источники:
зарубежная литература по криптографии, антивирусной защите, взлому,
декомпиляции, обратной разработке и созданию безопасного
программного обеспечения,
отечественная справочная литература по алгоритмам архивации и сжатия,
обратной разработке и дизассемблировании программного обеспечения,
спецификации алгоритмов и встроенных инструментов семейства
операционных систем *nix,
официальные спецификации для разработчиков мобильных приложений
и библиотек для *nix, статьи по оптимизации web-performance,
документация языка Python 3.5.6 и его стандартных модулей, а также
документации сопутствующих разработке программного обеспечения
инструментов,
статьи с сайта «Хабр», крупнейшего в Европе ресурса для IT-
специалистов, издаваемого компанией «ТМ», и с сайта журнала «Мир
ПК»,
независимые сравнительные бенчмарки алгоритмов сжатия.
В связи с высокими темпами развития ИТ-индустрии значительная часть литературы
не имеет перевода на русский язык, поэтому при подготовке были использованы
оригинальные версии текста на английском языке.
В ходе работы над магистерской диссертацией был произведен анализ
методологий упаковки и шифрования, подходящих для работы с исходным кодом.
Было выявлено, что сфера действительно развивается слишком медленно
8
относительно других в IT-индустрии – за последние 30 лет появилось всего лишь
пара алгоритмов сжатия, получивших широкую популярность. Также было написано
и протестировано программное обеспечение для упаковки и шифрования исходного
кода на языке Python с использованием технологий токенизации, обфускации, и
сжатия данных.
9
ГЛАВА 1. ИСПОЛЬЗОВАНИЕ АЛГОРИТМОВ УПАКОВКИ И
ШИФРОВАНИЯ ИСПОЛНЯЕМОГО КОДА
1.1. Актуальность темы
Упаковка исполняемых файлов заключается в сжатии исполняемого файла и
прикреплении к нему кода, необходимого для распаковки и выполнения
содержимого файла, в один исполняемый файл. В момент выполнения финального
файлы, код, необходимый для распаковки, восстанавливает оригинальную версию
файлов, перед тем как их выполнить. В большинстве случаев эта процедура
прозрачна настолько, что упакованный исполняемый файл может быть использован
точно так же, как и оригинальная программа.
Упакованный код можно воспринимать как самораспаковывающийся архив, где
упакованные исходные данные лежат в исполняемом файле рядом с кодом, который
будет их распаковывать. Большинство упакованных исполняемых файлов
загружают исходный код в память, поэтому могут требовать немного больше памяти
для запуска. Более того, некоторые упакованные исполняемые файлы могут
требовать дополнительных зависимостей, например, для того чтобы записать
исходный код в файловую систему перед тем, как исполнять его.
Упаковка исходного кода не ограничена только бинарными исполняемыми
файлами, она также может применяться к скриптам, например, написанным на языке
JavaScript. Так как большинство скриптовых языков спроектированы так, чтобы их
код был человекочитаемым, что является некоторой избыточностью, упаковка может
быть очень эффективной, включая в себя примитивнейшие преобразования, такие
как замена длинных имен переменных и функций более короткими и/или удаление
отступов, переносов строк и пробельных символов.
Производители программного обеспечения используют упаковку исполняемого
кода по ряду причин, в первую очередь, чтобы уменьшить требования к размеру
10
дискового пространства, необходимого для дистрибуции их программ. Так как
упаковщики исполняемого кода специально спроектированы так, чтобы в том числе
сжимать исходный код, они часто достигают гораздо более высокого коэффициента
сжатия по сравнению с инструментами для сжатия стандартных данных, такими как
gzip, zip или bzip2.
Упаковка исполняемых файлов также часто применяется, чтобы предотвратить
обратную разработку или для обфускации содержимого исполняемого файла,
например, чтобы скрыть наличие вредоносного кода от антивирусных сканеров. Для
этого используются методы сжатия, в том числе с возможным добавлением
шифрования. Подобная упаковка может использоваться для предотвращения
прямого дизассемблирования, маскирования строковых переменных и изменения
содержимого подписей.
1.1.1. Алгоритмы упаковки
Программа для уменьшения размера исполняемых файлов называется
упаковщиком. Упаковщиками также часто называют программы:
для упаковки исходного кода
для защиты программного обеспечения
т.н. “file binders” – программы, объединяющие несколько файлов в один
[2]. Среди них также “polymorphic packers” – программы, меняющие
сигнатуру при каждой упаковке, из-за чего их сложнее обнаружить и
удалить.
для обфускации, или «запутывания» исходного кода
Упаковщики встроены во многие компиляторы и средства разработки, но
существует ряд инструментов для более специфических задач, например PELock
программа, представляющая собой систему защиты от несанкционированного
копирования исполняемых файлов Windows.
11
Упаковка может применяться, чтобы:
уменьшить размер финального файла, что помогает ускорить его загрузку
в память (при хранении на диске) и на диск (при загрузке, например, с
сайта). Упаковщики специально разработаны для уменьшения размера
исходного кода, это позволяет им достигать большей эффективности в
сжатии, чем стандартным инструментам, таким как gzip, bzip2 или zip. С
другой стороны, перед выполнением программы, требуется некоторое
время на распаковку исходного файла. Как бы то ни было, именно
скорость считывания с диска варьируется и не идет в среднем в сравнении
со скоростью процессора, поэтому обычно является узким местом.
зашифровать содержимое файла для предотвращения обратной
разработки программы, так как некоторые виды упаковки подразумевают
криптографическую обработку данных. Сжатие исходного кода может
быть использовано для предотвращения прямого дизассемблирования,
маскирования строковых данных и для скрытия подписей. Несмотря на
то, что все вышеперечисленные методы не защищают от обратной
разработки на 100%, они делают ее более дорогой.
зашифровать и изменить код вредоносной программы, чтобы затруднить
его обнаружение сигнатурными системами, например, антивирусами.
1.1.2. Алгоритмы шифрования
Давая пользователям доступ к установочным файлам программ, компании
неизбежно раскрывают свои профессиональные секреты и наработки, и ничто не
останавливает конкурентов от копирования и воровства чужих алгоритмов.
Важные обновления (патчи), исправляющие ошибки в операционных системах
практически сразу анализируется хакерами и другими специалистами по
безопасности. Они выявляют проблему, которую исправляет это обновление, и

Смотрите также:

"Автоматизация обработки заявок ООО "Проектно-Строительная Компания"
"Автоматизация процесса аттестации персонала для ООО "Нэт Бай Нэт Холдинг"
"Анализ интернет-активности конкурентов ( на примере конкурентов "Газпром нефть")
"Бухгалтерский учёт и аудит расчётов с подотчётними лицами в организации на примере ООО "ЛОЦ 10""
«Психологическое сопровождение персонала в организации на примере ООО «Крокус»
Cовершенствование деловой оценки персонала в организации (на примере ООО "Даймонд кейтеринг развитие")
IPO - инструмент финансирования деятельности организации. На примере ПАО «Нефтяная компания «Лукойл»
PR как средство продвижения организации (на примере ПАО "Тамбовский завод "Комсомолец им. Н.С. Артемова")
PR-коммуникации в сфере общественного питания (на примере кафе-кондитерской «Cream Cheese»)
SMM как средство повышения эффективности работы учреждений социокультурной сферы (на примере Малого театра)