Рус Eng Cn Перевести страницу на:  
Коробейников А.Г., Кутузов И.М. - Обфускация сокрытия вызовов при помощи инструкции invokedynamic

(Опубликовано в журнале «Кибернетика и программирование» №5, 2016)

24/10/2016

Введение

Защита интеллектуальной собственности и конкурентных преимуществ в современных условиях является обязательными требованиями. В настоящее время для защиты программного обеспечения используются различные технологии, затрудняющие анализ приложений потенциальными злоумышленниками. Обфускация, как защита программного кода является очень перспективным направлением по защите программных продуктов от несанкционированных действий [1-6].

Ява - программы принадлежат к семейству уязвимых для декомпиляции программ. Это связано с тем, что язык программирования и бинарный формат содержат много метаинформации о вызываемых процедурах и функциях. Так, например, не имея исходных кодов программы можно выявить все имена вызываемых функций, подключившись к работающему приложению через отладочный порт. Если же имеется возможность выполнять свой код совместно с анализируемым, то технология Reflection позволяет загрузить все классы, все пакеты, все методы и поля, а также изменить их видимость. Данная технология направлена на открытость программного обеспечения с переиспользованием компонент. К сожалению, эта технология позволяет доподлинно узнать зависимость не только классов, но и методов, а также без труда восстановить имена полей и методов исходя из логики работы приложения, даже если они были затерты обфускатором. В рамках данной статьи будет рассматриваться сокрытие зависимости методов при помощи технологии invokedynamic.

Анализ существующих методов сокрытия вызовов

Одной из самых сложных задач обфускации является сокрытие вызовов методов. Сокрытие вызовов необходимо для того, чтобы скрыть зависимости сущностей, скрыть логику обработки данных, скрыть алгоритмы. Методы, используемые для сокрытия вызовов сильно ограничены технологиями языка и их производительностью. Вызов метода может осуществляться напрямую, через бутстрап-метод, из нативного кода (JNI), через Reflection и, с JRE 1.7, InvokeDynamic [7,8].

Читать статью