Научная статья на тему 'Алгоритмы и методы защиты программного кода на базе обфускации'

Алгоритмы и методы защиты программного кода на базе обфускации Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
1446
182
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
ОБФУСКАЦИЯ / ЗАЩИТА ПРОГРАММНОГО ПРОДУКТА / БЕЗОПАСНОСТЬ ИНТЕЛЛЕКТУАЛЬНОЙ СОБСТВЕННОСТИ / OBFUSCATION / SOFTWARE PRODUCT PROTECTION / ЗАПУТЫВАНИЯ КОДА / CODE OBFUSCATION / INTELLECTUAL PROPERTY SECURITY

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Красов Андрей Владимирович, Зуев Игорь Павлович, Карельский Павел Владимирович, Радынская Виктория Евгеньевна, Гераськина Вероника Сергеевна

Предметом исследования является эффективность комбинированного и раздельного использования методов обфускации. Целью работы является повышение безопасности интеллектуальной собственности на основе методов обфускации, путем проведения анализа существующих методов и алгоритмов обфускации машинного и программного кода. Теоретическая значимость разработанной методики заключается в повышении уровня защищенности информации, увеличении структурированности методов и алгоритмов защиты информации на базе обфускации. Исследованы алгоритм защиты байт-кода Java приложений на базе обфускации, метод запутывания, который осуществляется с помощью создания виртуальной машины. Показаны преимущества и недостатки описанных методов и алгоритмов обфускации программного и машинного кодов. Представлена структурированная оценка методов и алгоритмов защиты информации на базе запутывания кода. Для определения эффективности применения того или иного метода обфускации к конкретному программному коду, методы оценки принято разделять на две группы: аналитические и эмпирические. Данные оценки могут быть численными и экспертными. В качестве основного критерия качества, отвечающего за защищенность приложения в рамках обфускации, выбрано требование изучаемости. Представлена блок-схема защиты Java-приложения на базе обфускации. Описаны методы обфускации для Java. Вывод: в работе производится обзор наиболее актуальных технологий и стандартов в области обфускации и оценки эффективности защиты информации на базе обфускации. На базе этих подходов строится дальнейшее развитие области защиты программных продуктов на базе обфускации. Благодаря рассмотренным технологиям складывается базис информационной безопасности в сфере защиты программного обеспечения. Разработка эффективных методик обфускации программных продуктов, позволяющих гарантированно добиться желаемого результата, являются одним из приоритетных направлений исследований.

i Надоели баннеры? Вы всегда можете отключить рекламу.

Похожие темы научных работ по компьютерным и информационным наукам , автор научной работы — Красов Андрей Владимирович, Зуев Игорь Павлович, Карельский Павел Владимирович, Радынская Виктория Евгеньевна, Гераськина Вероника Сергеевна

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

ALGORITHMS AND METHODS OF PROTECTING THE SOFTWARE CODE ON THE BASIS OF OBFUSCATION

Object of research is efficiency of combined and separate use of methods of an obfuskatsiya. The purpose of work is increase of safety of intellectual property on the basis of obfuskatsiya methods, by carrying out the analysis of existing methods and algorithms of an obfuskatsiya of a machine and program code. The theoretical importance of the developed technique consists in increase of level of security of information, increase in structure of methods and algorithms of protection of information on the basis of an obfuskatsiya. Are investigated algorithm of protection of bytes codes of Java of appendices on the basis of an obfuskatsiya, a method of complication which is carried out by means of creation of the virtual car. Advantages and shortcomings of the described methods and algorithms of an obfuskatsiya of program and machine codes are shown. The structured assessment of methods and algorithms of protection of information on the basis of code complication is presented. For determination of efficiency of application of this or that method of an obfuskatsiya to a concrete program code, methods of an assessment can be divided into two groups: analytical and empirical. These estimates can be numerical and expert. As the main criterion of the quality which is responsible for security of the appendix within an obfuskatsiya, the izuchayemost requirement is chosen. The block diagram of protection of a Java-application on the basis of an obfuskatsiya is presented. Obfuskatsiya methods for Java are described. Conclusion: in work the review of the most actual technologies and standards in the field of an obfuskatsiya and an assessment of efficiency of protection of information on the basis of an obfuskatsiya is made. On the basis of these approaches the further development of the region of protection of software products on the basis of an obfuskatsiya is under construction. Thanks to the considered technologies there is a basis of information security in the sphere of protection of the software. Development of effective techniques of an obfuskatsiya of the software products allowing with guarantee to achieve desirable result, are one of the priority directions of researches.

Текст научной работы на тему «Алгоритмы и методы защиты программного кода на базе обфускации»

i-methods

ИНФОРМАТИКА, ВЫЧИСЛИТЕЛЬНАЯ ТЕХНИКА И УПРАВЛЕНИЕ

том 12. № 1. 2020 http://intech-spb.com/i-methods/

Алгоритмы и методы защиты программного кода на базе обфускации

Красов Андрей Владимирович

к.т.н., доцент Санкт-Петербургского государственного университета телекоммуникаций им. проф. М.А. Бонч-Бруевича, г.Санкт-Петербург, Россия, krasov@inbox.ru

Зуев Игорь Павлович

студент Санкт-Петербургского государственного университета телекоммуникаций им. проф. М.А. Бонч-Бруевича, г. Санкт-Петербург, Россия, zuyev.i.p@mail.ru

Карельский Павел Владимирович

студент Санкт-Петербургского государственного университета телекоммуникаций им. проф. М.А. Бонч-Бруевича, г. Санкт-Петербург, Россия, pasha.karelscky@yandex.ru

Радынская Виктория Евгеньевна

студент Санкт-Петербургского государственного университета телекоммуникаций им. проф. М.А. Бонч-Бруевича, г. Санкт-Петербург, Россия, radynskaya.v@gmail.com

Гераськина Вероника Сергеевна

студент Санкт-Петербургского государственного университета телекоммуникаций им. проф. М.А. Бонч-Бруевича, г. Санкт-Петербург, Россия, nikusya96@yandex.ru

АННОТАЦИЯ_________________________________________________________

Предметом исследования является эффективность комбинированного и раздельного использования методов обфускации. Целью работы является повышение безопасности интеллектуальной собственности на основе методов обфускации, путем проведения анализа существующих методов и алгоритмов обфускации машинного и программного кода. Теоретическая значимость разработанной методики заключается в повышении уровня защищенности информации, увеличении структурированности методов и алгоритмов защиты информации на базе обфускации. Исследованы алгоритм защиты байт-кода Java приложений на базе обфускации, метод запутывания, который осуществляется с помощью создания виртуальной машины. Показаны преимущества и недостатки описанных методов и алгоритмов обфускации программного и машинного кодов. Представлена структурированная оценка методов и алгоритмов защиты информации на базе запутывания кода. Для определения эффективности применения того или иного метода обфускации к конкретному программному коду, методы оценки принято разделять на две группы: аналитические и эмпирические. Данные оценки могут быть численными и экспертными. В качестве основного критерия качества, отвечающего за защищенность приложения в рамках обфускации, выбрано требование изучаемости. Представлена блок-схема защиты Java-приложения на базе обфускации. Описаны методы обфускации для Java. Вывод: в работе производится обзор наиболее актуальных технологий и стандартов в области обфускации и оценки эффективности защиты информации на базе обфускации. На базе этих подходов строится дальнейшее развитие области защиты программных продуктов на базе обфускации. Благодаря рассмотренным технологиям складывается базис информационной безопасности в сфере защиты программного обеспечения. Разработка эффективных методик обфускации программных продуктов, позволяющих гарантированно добиться желаемого результата, являются одним из приоритетных направлений исследований.

КЛЮЧЕВЫЕ СЛОВА: обфускация; защита программного продукта; запутывания кода; безопасность интеллектуальной собственности.

Введение

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

Разработка наиболее эффективной методики защиты для различных видов I II I в настоящее время становится одной из важнейших задач большинства программистов, которые занимаются разработкой специализированного платного программного обеспечения (ПО), так как это позволяет им продавать свой интеллектуальный труд и исключить возможности его нелегального использования среди потребителей [1]. Говоря иными словами, пользователь не сможет использовать оригинальную лицензионную копию определенного ПП, предварительно не купив лицензионную копию ПП. Для решения данной задачи используются различные системы лицензирования, не позволяющие запустить отдельные части приложения без подтверждения оплаты продукта и ввода валидной лицензии на него.

Обфускация — процесс запутывания ПП, позволяющий видоизменить исходный код ПО таким образом, что пользовательский интерфейс и поведение программы останутся неизменными. Другими словами, в отношении защиты информации, обфускация — это процесс приведения исходного текста или исполняемого кода программы к виду, сохраняющему ее функциональность, но затрудняющему анализ, понимание алгоритмов работы и модификацию после процесса декомпиляции [2,3].

На сегодняшний день компьютерное «пиратство» широко распространено среди потребителей ПП и приняло глобальные масштабы. Согласно исследованиям, проведенным компанией «Международное планирование и исследования» (International Planning and Research), 25% программ, устанавливаемых ныне в мире, являются поддельными, а в большинстве других регионов мира этот показатель может доходить до уровней в 50-76%. Такие же данные были получены экспертами Союза производителей деловых программ (Business Software Alliance) и Ассоциации программной и информационной промышленности (Software & Information Industry Association): Это значит, что более 1/3 всего компьютерного программного обеспечения в мире распространяется с нарушением прав интеллектуальной собственности и сопряжено с обманом потребителя. Восточная Европа во главе с Россией является лидером закупки пиратских программ. Удельный вес использования поддельного программного обеспечения в этом регионе в 2015 г. достиг 92% (в 2014 г.— 89%). В странах Восточной Европы (без России) — 76%. При этом потери России от этого "пиратства" оценивались в 273 млн. долл., Польши — в 142 млн. долл., а остальных стран Восточной Европы — в 125 млн. долл. На Ближнем Востоке и в Африке удельный вес использования пиратской продукции в 2016 г. составил — 69%. Лидерами по использованию пиратской продукции здесь являются Ливан, Оман, Бахрейн, Катар и Пакистан. Однако более половины потерь в регионе из-за засилья пиратского программного обеспечения несут ЮАР, Израиль и Турция (213 млн. долл.).

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

нию с другими пользователями продукта. Так, например, нарушитель может отключить проверку лицензионного кода, разблокировать платные возможности, увеличить свой баланс в приложении для осуществления внутренних взаиморасчетов в приложении [4]. Любое из подобных действий нарушает не только права автора ПП, но и потенциально ущемляет права остальных пользователей, которые должны обладать равными возможностями при прочих одинаковых условиях. Именно поэтому данный аспект защиты ПП является наиболее приоритетным на текущий момент. По сравнению с шифрованием кода, обфускация имеет следующий ряд преимуществ:

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

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

- для того, чтобы приложение работало, требуется получить доступ к его байт-коду. Байт-код выполняется процессором или виртуальной машиной [5]. Если байт-код изначально зашифрован, то для дальнейшей работы требуется его расшифровка. Данный процесс может быть времязатратным при использовании более надежных алгоритмов, тогда как при обфу-скации дополнительного времени на шифровку и расшифровку байт-кода не требуется;

- при шифровании всех исходных кодов вместе и использовании поточных алгоритмов шифрования, становится невозможным случайный доступ к участкам исходного кода [6,7]. Это означает, что для работы приложения требуется изначально расшифровать его полностью. При использовании запутывания кода данного недостатка не наблюдается — возможность случайного доступа к определенным участкам кода сохраняется.

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

Основная часть

Одним из вариантов алгоритма обфускации Java приложения представлен в качестве блок-схемы (рис.1).

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

Рис. 1. Блок схема алгоритма обфускации

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

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

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

В рамках данного исследования будут рассмотрены наиболее популярные методы обфускации, которые могут быть применены к языку программирования Java [5,8]. Некоторые из рассмотренных методов могут быть применены и к другим языкам программирования.

При модификации байт-кода существуют особенности, накладывающие свои ограничения на применимость тех или иных методов обфускации. В частности, иногда связь классов друг с другом вынесена в специальный конфигурационный файл (прим. библиотека Spring). Изменение любых сигнатур должно сопровождаться специальным анализом сопутствующих ресурсных файлов и связанного нативного кода. Изменение логики приложения также сильно зависит от применяемых библиотек в связи с необходимостью гарантировать определенную очередность загрузки классов. Добавление связей с другими классами может привести к блокировке загрузчика классов. В связи с этим все последующие методы должны применяться с крайней осторожностью.

Метод обфускации вычислений

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

жения на несколько выражений, т.е. упрощение одного большого выражения и его запись несколькими отдельными, что, в итоге, приводит к одному и тому же результату, а также вычисление одного выражения с дополнительными неэффективными операндами [8].

Метод изменения имен переменных

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

Основной задачей изменения имен переменных может служить введение деобфускато-ра в заблуждение. Когда деобфускатор изучает исходный код, то для понимания приложения ему требуется абстрагироваться от конкретного именования для анализа алгоритма. В частности, могут использоваться очень похожие имена с различиями в непечатаемых символах. Изменение имен переменных главным образом добивается увеличения абстракций информатики.

Метод смешивания однотипных полей

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

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

Метод переименования имен полей

Помимо переименования имен переменных внутри метода, имеется возможность переименовать имена полей класса. Основной проблемой переименования имен полей классов является проверка доступности этих полей в других классах. Одним из наиболее оптимальных способов отслеживания такой доступности полей является предварительный анализ исходных кодов с построением списка ссылок для каждого поля. Так как структура класс-файлов не предполагает однозначной связи между ними, эти связи требуется построить вруч-

ную. В рамках исследуемого приложения можно предположить, что приложение консистент-но и дубликаты классов отсутствуют.

Язык не обязывает программиста использовать удобочитаемые имена и именовать классы и поля согласно какому-либо правилу, а лишь предлагает общие правила, которые обеспечивают удобочитаемость. Удобочитаемость при обфускации не является самоцелью, а даже наоборот. Язык позволяет именовать поля любыми символами стандарта кодирования unicode, в частности, непечатаемыми [9]. Это означает, что часть функций может иметь «невидимые различия» в сигнатуре, что также затрудняет анализ кода. Не только статические, но и другие поля класса могут быть переименованы аналогично. Любые поля сохраняют свои названия вне зависимости от модификатора static. Однако стоит отметить, что доступ к полям может быть не столь тривиальным в случае наследования от другого класса.

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

Метод переименования имен методов

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

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

Метод изменения имени пакета

Метод изменения имени пакета — процедура аналогичная изменению имени класса. В отличии от класса, сигнатура пакета может присутствовать отдельно в приложениях. Так, например, библиотека Spring умеет самостоятельно сканировать классы, входящие в определенный пакет. В остальном, переименование метода производится аналогично изменению имени класса. Изменение имен пакетов производится аналогично изменению имени класса. В связи с этим и результат данного метода является увеличение количества абстракций информатики.

Метод добавления недостижимого кода

Далее стоит рассмотреть такой метод, как добавление недостижимого кода. Данный метод является простейшей операцией, которая добавляет произвольный исходный код в те участки программы, которые никогда не могут быть выполнены. Эти преобразования позволяют увеличить количество связей между классами и методами, но легко устраняются при анализе исполнения программы. Также большинство компиляторов, оптимизирующих приложение, самостоятельно удаляют некоторые конструкции, которые никогда не будут исполнены. Добавление недостижимого кода осуществляется вместе с изменением графа управления, а именно на условные операции, позволяющие добавить ветвление. Добавляются ветки программы, которые не могут быть выполнены, однако содержат дополнительные инструкции. Помимо ветвления кода методов или конструкторов, можно добавлять статические блоки инициализации классов, которые могут инициализировать какие-либо переменные в зависимости от глобальных переменных [10,11].

Метод виртуализации кода

Эффективным методом обфускации, является метод, основанный на виртуализации кода.

Предположим, программа Р, содержащая реальный машинный код, терпит преобразование Т, тогда программа Р' = Т(Р), содержит байт-код некоторой виртуальной машины (машинный код виртуального процессора) УМ. Таким образом, программа Р' исполняется специализированной виртуальной машиной УМ (рис. 2).

Рис. 2. Схема преобразований

Программа Р' будет являться обфусцированной, если будет удовлетворять следующим требованиям:

1) Р' имеет то же поведение, что и Р, то есть преобразование Т сохраняет семантику;

2) неясность Р' максимизирована, то есть понимание и обратная разработка Р' занимает больше времени, чем обратная разработка Р, при одних и тех же условиях;

3) эффективность преобразования Т(Р) максимизирована, то есть крайне трудно разработать автоматический инструмент снятия защиты.

4) отличие производительностей Р' и Р минимизировано.

Следует отметить, что данная виртуальная машина не имеет ничего общего с виртуальными машинами вроде VMware или УirtualBox. Создание виртуальной машины, предназначен-

ной для запутывания кода, сводится к простейшему эмулированию работы процессора и памяти [12]. Для эмуляции памяти используется реализация собственного стека. В современных системах стек организован по принципу LIFO (last in, first out). Данный способ организации хранения данных позволяет использовать только данные, которые «лежат» сверху. Для доступа к этим данным в архитектуре x86 используется регистр esp, который содержит указатель на вершину стека. В создаваемой виртуальной машине, стек будет работать аналогичным образом. Кроме того, он станет оперативной памятью VM. Для работы со стеком будет использоваться две операции: положить на стек и достать со стека. Необходимо обеспечить проверки выхода за пределы массива данных стека и обращение к данным, когда память пуста [13].

Далее необходимо создать команды, которые будет понимать виртуальный процессор. Каждой мнемонике присваивается шестнадцатеричное значение, представляющее собой реальный машинный код. Пример приведён в таблице.

Пример созданных команд

Мнемоника Значение Описание

PUSH 0x00c867 Положить значение на стек

POP 0x00c967 Извлечь значение со стека

ADD 0x00c887 Сумма двух верхних значений стека

SUB 0x00c888 Разница двух верхних значений стека

DIV 0x00c889 Частное двух верхних значений стека

MUL 0x00c890 Произведение двух верхних значений стека

CMP 0x00c891 Сравнение двух верхних значений стека

QUIT 0x00d68970 Выход

Для перемещения по коду понадобится еще один указатель. В архитектуре x86 регистр eip содержит адрес следующей команды, которая будет исполняться. В создаваемой виртуальной машине будет аналогичная переменная.

Основный цикл виртуальной машины будет представлять собой трансляцию команд виртуального процессора в команды реального процессора. Алгоритм работы представлен на рис. 3. Для команд SUB, DIV, MUL принцип работы аналогичен команде ADD.

Для того чтобы распутать код, необходимо загрузить его в дизассемблер, найти цикл сравнения машинных кодов и посмотреть за что отвечает та или иная инструкция [14]. В итоге, потратив определённое время на анализ виртуальной машины, можно автоматизировать процесс снятия данной защиты. Для усложнения данного процесса можно воспользоваться примитивным шифрованием значений каждой мнемоники, например, применить операцию xor.

Заключение

Обфускация является одной из самых перспективных технологий защиты информации на текущий момент. Растущие темпы развития программных продуктов и растущая стоимость

Рис. 3. Блок схема работы

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

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

Литература

1. Canetti R., Rothblum G. N., Varia M. Obfuscation of hyperplane membership // Proceedings of the 7-th Conference on Theory of Cryptography, TCC2010. Zurich, Switzerland, February 9-11, 2010. Springer, 2010. LNCS, Vol. 5978. Pp. 72-89.

2. Darwish S.M., Guirguis S. K., ZalatM. S. Stealthy code obfuscation technique for software security // Proceedings of the International Conference on Computer Engineering and Systems (Cairo, Egypt, 30 November — 2 December 2010). IEEE, 2010. Pp. 93-99.

3. Никольская К.Ю., Хлестов А. Д. Обфускация и методы защиты программных продуктов // Вестник УрФО. Безопасность в информационной сфере. 2015. № 2(16). С. 7-10.

4. Иванников В., Курмангалеев Ш., Белеванцев А., Белеванцев А., Нурмухаметов А., Савченко В., Матевосян Р., Аветисян А. Реализация запутывающих преобразований в компиляторной инфраструктуре LLVM // Труды Института системного программирования РАН. 2014. Т. 26. № . 1. С. 327-340.

5. Петриев Р. И., Соломатин Д. И. Обфускация JAVA байт-кода // Сборник студенческих научных работ факультета компьютерных наук ВГУ. 2015. Вып. 9. С. 179-186.

6. Пласковицкий В. А. Обфускация кода. Вещественные и мнимые методы // Материалы научно-практической конференции c международным участием «Неделя науки СПбГПУ» (Санкт-Петербург, 03-07 декабря 2013 г.) Санкт-Петербург, 2014. С. 314-316.

7. Алексеев Д. М., Иваненко К. Н., Убирайло В. Н. Обфускация программного кода // Шорник статей международной научно-практической конференции «Новая наука: история становления, современное состояние, перспективы развития» (Челябинск, 3 октября 2016 г.). В 2 ч. Уфа: МЦИИ ОМЕГА САЙНС, 2016. Ч. 1. С. 3-4.

8. Симаков О. В., Щерба В. В. Математическая обфускация. Криптографическая защита программного кода // Материалы Всероссийского Круглого стола «Актуальные проблемы обеспечения кибербезопасности» (Москва, 15 февраля 2018 г.). Москва, 2018. С. 120-125.

9. Комилджонов Р. Н., Косов Н. А. Обфускация кода на примере Javascrip // Colloquium-journal. 2019. № 13-2 (37). С. 71-75.

10. Ивченкова Ю. С., Савкин М. К. Виды и способы обфускации // Наука, техника и образование. 2016. № 2 (6). С. 60-66.

11. Красов А.В., Штеренберг С.И. Разработка методов защиты от копирования ПО на основе цифровых водяных знаков внедряемых в исполняемые и библиотечные файлы // Сборник трудов II Международной научно-технической и научно-методической конференции «Актуальные проблемы инфотелекоммуникаций в науке и образовании» (Санкт-Петербург, 27-28 февраля 2013 г.). СПб., 2013. С. 847-852.

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

12. Хомяков И.Н., Красов А.В. Возможность скрытого вложения информации в байт-код JAVA // Информационные технологии моделирования и управления. 2014. № 2 (86). С. 185-191.

13. Шариков П.И., Красов А.В., Штеренберг С.И. Методика создания и вложения цифрового водяного знака в исполняемые JAVA файлы на основе замен опкодов // T-Comm: Телекоммуникации и транспорт. 2017. Т. 11. № 3. С. 66-70.

14. Красов А.В., Шариков П.И. Методика защиты байт-кода JAVA-программы от деком-пиляции и хищения исходного кода злоумышленником // Вестник Санкт-Петербургского государственного университета технологии и дизайна. Серия 1: Естественные и технические науки. 2017. № 1. С. 47-50.

ALGORITHMS AND METHODS OF PROTECTING THE SOFTWARE CODE ON THE BASIS OF OBFUSCATION

ANDREY KRASOV

PhD, Docent of The Bonch-Bruevich Saint-Petersburg State University of Telecommunications, St. Petersburg, Russia, krasov@inbox.ru

IGOR ZUYEV

student of The Bonch-Bruevich Saint-Petersburg State University of Telecommunications, St. Petersburg, Russia, walop9606@gmail.com

PAVEL KARELSKY

student of The Bonch-Bruevich Saint-Petersburg

State University of Telecommunications,

St. Petersburg, Russia, pasha.karelscky@yandex.ru

VICTORIA RADYNSKAYA

student of The Bonch-Bruevich Saint-Petersburg State University of Telecommunications, St. Petersburg, Russia, radynskaya.v@gmail.com

VERONIKA GERASKINA

student of The Bonch-Bruevich Saint-Petersburg State University of Telecommunications, St. Petersburg, Russia, nikusya96@yandex.ru

ABSTRACT

Object of research is efficiency of combined and separate use of methods of an obfuskatsiya. The purpose of work is increase of safety of intellectual property on the basis of obfuskatsiya methods, by carrying out the analysis of existing methods and algorithms of an obfuskatsiya of a machine and program code. The theoretical importance of the developed technique consists in increase of level of security of information, increase in structure of methods and algorithms of protection of information on the basis of an obfuskatsiya. Are investigated algorithm of protection of bytes codes of Java of appendices on the basis of an obfuskatsiya, a method of complication which is carried out by means of creation of the virtual car. Advantages and shortcomings of the described methods and algorithms of an obfuskatsiya of program and machine codes are shown. The structured assessment of methods and algorithms of protection of information on the basis of code complication is presented. For determination of efficiency of application of this or that method of an obfuskatsiya to a concrete program code, methods of an assessment can be divided into two groups: analytical and empirical. These estimates can be numerical and expert. As the main criterion of the quality which is responsible for security of the appendix within an obfuskatsiya, the izuchayemost requirement is chosen. The block diagram of protection of a Java-application on the basis of an obfuskatsiya is presented. Obfuskatsiya methods for Java are described. Conclusion: in work the review of the most actual technologies and standards in the field of an obfuskatsiya and an assessment of efficiency of protection of information on the basis of an obfuskatsiya is made. On the basis of these approaches the further development of the region of protection of software products on the basis of an obfuskatsiya is under construction. Thanks to the considered technologies there is a basis of information security in the sphere of protection of the software. Development of effective techniques of an obfuskatsiya of the software products allowing with guarantee to achieve desirable result, are one of the priority directions of researches. Keywords: obfuscation; software product protection, code obfuscation, intellectual property security.

REFERENCES

1. Canetti R., Rothblum G.N., Varia M. Obfuscation of hyperplane membership. Proceedings of the 7-th Conference on Theory of Cryptography, TCC 2010 (Zurich, Switzerland, February 9-11, 2010). Springer, 2010. LNCS, Vol. 5978. Pp. 72-89.

2. Darwish S.M., Guirguis S.K., Zalat M.S. Stealthy code obfuscation technique for software security. Proceedings of the International Conference on Computer Engineering and Systems (Cairo, Egypt, 30 November - 2 December 2010). IEEE, 2010. Pp. 93-99.

3. Hlestov A.D., Nikolskaya K.U. Obfuscation and methods of protection software. UrFR Newsletter. Information Security. 2015. Vol. 2(16). C. 7-10. (In Rus)

4. Ivannikov V., Kurmangaleev Sh., Belevantsev A., Nurmukhametov A., Savchenko V., Matevosyan H., Avetisyan A. Implementing Obfuscating Transformations in the LLVM Compiler Infrastructure. Trudy ISP RAN. 2014. Vol. 26. No. 1. Pp. 327-340. (In Rus)

5. Petriev R.I., Solomatin D.I. Obfuskacija JAVA bajt-koda [Obfuskatsiya JAVA of bytes codes]. Sbornik studencheskih nauchnyh rabot fakul'teta komp'juternyh nauk VGU [Collection of student's scientific works of faculty of computer sciences of VGU]. 2015. Iss. 9. Pp. 179-186. (In Rus)

6. Plaskovickij V.A. Obfuskacija koda. veshhestvennye i mnimye metody [Obfuskatsiya of a code]. Material and imaginary methods]. Materialynauchno-prakticheskojkonferenciic mezhdunarodnym uchastiem "Nedelya naukiSPbGPU"[Materials of scientific and practical conference c by the international participation "Week of science SPbGPU", St. Petersburg, December 03-07, 2013.]. St. Petersburg, 2014. Pp. 314-316. (In Rus)

7. Alekseev D.M., Ivanenko K.N., Ubirajlo V.N. Obfuskacija programmnogo koda [Obfuskatsiya of a program code]. Cbornik statej mezhdunarodnoj nauchno-prakticheskoj konferencii "Novaya nauka: istoriya stanovleniya, sovremennoe sostoyanie, perspektivy razvitiya" [Materials of the All-Russia Round table "Actual problems of ensuring cybersafety", Moscow, February 15, 2018]. In 2 pt. Ufa, 2016. Pt. 1. Pp. 3-4. (In Rus)

8. Simakov O.V., Scherba V.V. Matematicheskaja obfuskacija. Kriptograficheskaja zashhita programmnogo koda [Mathematical obfuskatsiya. Cryptographic protection of a program code]. Materialy Vserossijskogo Kruglogo stola "Aktual'nye problemy obespecheniya kiberbezopasnosti" [Materials of the All-Russia Round table "Actual problems of ensuring cybersafety", Moscow, on February 15, 2018]. 2018. Pp. 120-125. (In Rus)

9. Komiljonov R. N., Kosov N. A. Obfuscation Code Example Javascript. Colloquium-journal. 2019. No. 13-2 (37). Pp. 71-75. (In Rus)

10. Ivchenkova Ju.S., Savkin M.K. Obfuscation types and methods. Science, technology and education. 2016. № 2 (6). Pp. 60-66. (In Rus)

11. Krasov A., Shterenberg S. Development Ways of Protection Against Copy Based on Digital Watermarking Into Executable And Library Files. Sbornik trudov II Mezhdunarodnojnauchno-tehnicheskoj inauchno-metodicheskojkonferencii "Aktual'nye problemy infotelekommunikacij v nauke i obrazovanii II Mezhdunarodnaja nauchno-tehnicheskaja i nauchno-metodicheska-ja konferencija" [Proce. of the II International scientific and technical and scientific and methodical conference "Actual problems of information and telecommunications in science and education II International scientific-technical and scientific-methodical conference", St. Petersburg, on February 27-28, 2013.]. St. Petersburg, 2013. Pp 847-852. (In Rus)

12. Homyakov I., Krasov A. Vozmozhnost' skrytogo vlozhenija informacii v bajt-kod JAVA [Opportunity of hidden information integration in java byte code]. Informacionnye tehnologii modelirovanija i upravlenija [Information technology modeling and management]. 2014. No. 2 (86). Pp. 185-191. (In Rus)

13. Sharikov. P Krasov A., Shterenberg S. Method of creation and attachments digital watermark into an executable java file by means of substitutions. T-Comm. 2017. Vol. 11. No. 3. Pp. 66-70. (In Rus)

14. Krasov A., Sharikov P. Methods of protection byte code java-programs from decompilation and theft of source code by an attacker. Vestnik Sankt-Peterburgskogo gosudarstvennogo universiteta tehnologii i dizajna. Serija I: Estestvennye i tehnicheskie nauki [Vestnik of St. Petersburg State University of Technology and Design. Series 1. Natural and technical science]. 2017. No. 1. Pp. 47-50. (In Rus)

i Надоели баннеры? Вы всегда можете отключить рекламу.