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

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам
72
3.3. Тестирование ПО
Тестирование созданного программного обеспечения проводилось с помощью
фреймворков Unittest [37] и Green на языке Python.
Unittest изначально был вдохновлен Junit фреймворк для юнит-тестов на языке
Java) и достаточно сильно похож на фреймворки для юнит-тестирования в других
языках, когда речь заходит об основных инструментах. Он поддерживает:
автоматизацию тестов
совместное использование кода методов для подготовки данных к
тестированию и последующего очищения тестовой среды
агрегацию тестов в коллекции
независимость тестов от других фреймворков.
Для этого в unittest существует ряд важных концепций в парадигме объектно-
ориентированного программирования, перечисленных ниже.
Испытательный стенд (test fixture) представляет собой различные
подготовительные действия, необходимые для выполнения тестов, а также очистку
среды выполнения после того, как тесты закончили свою работу. Эти действия могут
включать в себя такие операции, как создание временных или проксирующих баз
данных, директорий или запуск серверного процесса.
Тестовым случаем (test case) называется минимальный блок тестирования. Он
проверяет результаты работы исследуемого кода на разных наборах данных. Модуль
unittest предоставляет базовый класс TestCase, который можно использовать для
создания новых тестовых случаев. Эта стратегия является рекомендуемой при
написании тестов.
Набор тестов (test suite) – это несколько тестовых случаев, наборов тестов или и
того, и другого. Обычно используется для объединения тестов, которые должны быть
73
выполнены вместе, проверяют один и тот же модуль или функцию разными
наборами данных, или просто семантически близки.
Исполнителем тестов (test runner) называют компонент, который управляет
выполнением тестов и предоставляет пользователю результат. Исполнитель может
использовать графический или текстовый интерфейс, или возвращать специальное
значение, которое сообщит контролирующей программе о результатах выполнения
тестов.
Green – это фреймворк-«исполнитель тестов» [38]. Его преимущества
перечислены в Табл. 4.
чистота
количество выходных данных легко
регулируется, что позволяет держать в
зависимости от целей тестирования иметь
минимум или максимум информации на
экране
цвет
стандартные исполнители тестов выводят
информацию стандартным для терминала
цветом. Green раскрашивает падения тестов
в красный, а успехи – в зеленый, что
позволяет легче ориентироваться в
успешности прохождения кодом тестового
покрытия.
74
скорость
тесты запускаются в независимых
процессах, что позволяет распараллелить их
выполнение
соответствие стандартам
поддерживает интерфейс модуля Unittest
гибкость
при использовании с Unittest позволяет
запускать отдельные тесты и их наборы,
отключать или пропускать их выполнение.
основательность
имеет встроенную интеграцию с сервисами,
позволяющими контролировать процент
покрытия кода тестами и успешность
текущей версии кода
встраиваемость
может быть встроен в установочные
инструкции для контроля успешности
установки библиотеки
современный
поддерживает Python 2.7 и Python 3.4+
кроссплатформенный
работает на операционных системах MacOS,
Linux, *BSD и Windows.
75
поддерживаемый
проект постоянно растет и улучшается,
включая в себя все новые функции и
инструменты
Табл. 4. Преимущества фреймворка Green
Все тесты написаны в соответствии со стандартом структуризации тестового
покрытия в проектах на языке Python, то есть: располагаются в подмодуле “tests”,
каждый файл с тестами имеет префикс “test_”, каждый набор тестов наследуется от
класса unittest.TestCase для более удобной работы со встроенными инструментами и
имеет в названии префикс “Test” и каждый тестовый случай также имеет префикс
test_” и строку документации, сообщающую, что в данном случае тестируется и
какой ожидается результат. Более подробно пример стандартизированной структуры
проекта изображен на Рис. 15.
76
Рис. 15. Стандарт структуры проекта с тестовым покрытием на языке Python
В результате работ по созданию упаковывающего и шифрующего программного
обеспечения написан и протестирован продукт на динамическом языке
программирования Python 3.5, сочетающий в себе обычно поставляющиеся
раздельно инструменты: обфускаторы, минификаторы, шифраторы и упаковщики
исходного кода.
При разработке использовались следующие программные модули:
Cython
tokenize
zlib
project
__init__.py
foo.py
subpkg
// подмодуль
__init__.py
bar.py
tests
// подпапка с
тестами
__init__.py
test_bar.py
tests
// подпапка с
тестами
__init__.py
test_foo.py
77
PyCrypto
unittest
Наличие и использование тестового покрытия обеспечило корректность работы
созданного программного обеспечения.
78
ЗАКЛЮЧЕНИЕ
В работе выполнен системный анализ актуальности алгоритмов упаковки и
шифрования исходного кода.
В первой главе автор анализирует применимость данных методов в различных
сферах разработки:
в разработке под мобильные устройства
в веб-разработке
в прикладном программном обеспечении
в системном ПО.
Рассмотрены мотивы применения алгоритмов упаковки и шифрования как со
стороны конечного пользователя продукта, так и со стороны разработчика или
компании-разработчика программного обеспечения.
Приводится обзор современных методологий распаковки кода:
декомпиляции
дизассемблирования,
обратной разработки и др.
Проанализирована применимость вышеперечисленных методов в целях
улучшения программного обеспечения, а также в целях создания вредоносного ПО.
Во второй главе дан обзор технологиям упаковки и шифрования.
Рассмотрено историческое развитие алгоритмов сжатия, приведена их
классификация и примеры современных инструментов. Введено разделение на
компрессоры и архиваторы.
Проанализированы классические методы шифрования, введена их
классификация. Рассмотрены различные стратегии сокрытия исходного кода:
79
шифрование
обфускация
мутация кода
использование самомодифицирующегося кода.
Рассмотрены нестандартные стратегии «запутывания» кода. Также в главе
рассмотрена применимость тех или иных методов на практике.
Результатом работы над магистерской диссертацией является оригинальный
программный продукт, описанный в третьей главе, который сочетает в себе функции,
обычно разрозненные по разным инструментам:
обфускация кода,
минификация,
сжатие,
шифрование
упаковка в бинарные файлы.
Данное программное обеспечение принимает на вход исходный код на языке
Python. Результатом работы созданного ПО является бинарный исполняемый файл,
обратная разработка которого значительно затруднена всеми вышеперечисленными
преобразованиями. Данный файл при запуске полностью повторяет
функциональность, заложенную в исходном коде до всех произведенных над ним
преобразований.
При помощи обширного тестового покрытия системы обеспечена
работоспособность финального бинарного файла.
Созданное программное обеспечение облегчает дистрибуцию других программ,
сокращая размер исходных файлов. Это поможет авторам различных программных
продуктов улучшить пользовательский опыт в отношении их программ. Также
80
данное программное обеспечение обеспечивает более защищенную дистрибуцию
исходного кода в контексте коммерческой тайны.
Данный программный продукт представляет собой коммерческий интерес
компаний, распространяющих свое программное обеспечение в свободном режиме.
81
СПИСОК ИСТОЧНИКОВ
1.
Медведев А. Защита цифровых активов — задача стратегическая
// Мир ПК. Май 2016.
2.
McMahon M. What Is a File Binder? [Электронный ресурс] //
wiseGEEK: [сайт]. [2018]. URL: https://www.wisegeek.com/what-is-a-
file-binder.htm
3.
Николаенко В. Обфускация программ // Habr. 2015. URL: https://
habr.com/post/255871/
4.
Inside the Android Application Framework // Google I/O Session
Videos and Slides. 2008.
5.
Application Fundamentals [Электронный ресурс] // Google
Developers: [сайт]. [2018]. URL: https://developer.android.com/guide/
components/fundamentals?hl=en
6.
Akulov I. webpack for real tasks: decreasing front-end size and
improving caching // Ivan Akulov Blog. 2017. URL: https://iamakulov.com/
notes/webpack-for-real-tasks-part-1/
7.
Documentation [Электронный ресурс] // Webpack: [сайт]. URL:
https://webpack.js.org
8.
Солдатенкова Е. Обзор современных инструментов для
разработки и упаковки кода клиенткой части web-приложений, 2018.
9.
Козуля В. Как унизить джаваскриптера: теория и практика.
Москва: Вильямс, 2014.

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

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