Обфускация (программное обеспечение)

Поделись знанием:
Перейти к: навигация, поиск

Обфуска́ция (от лат. obfuscare — затенять, затемнять; и англ. obfuscate — делать неочевидным, запутанным, сбивать с толку) или запутывание кода — приведение исходного текста или исполняемого кода программы к виду, сохраняющему её функциональность, но затрудняющему анализ, понимание алгоритмов работы и модификацию при декомпиляции.

«Запутывание» кода может осуществляться на уровне алгоритма, исходного текста и/или ассемблерного текста. Для создания запутанного ассемблерного текста могут использоваться специализированные компиляторы, использующие неочевидные или недокументированные возможности среды исполнения программы. Существуют также специальные программы, производящие обфускацию, называемые обфускаторами (англ. obfuscator).





Цели обфускации

Технологии

На уровне исходных текстов

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

Исходный текст:

 int COUNT = 100;
 float TAX_RATE = 0.2;
 for (int i=0; i<COUNT; i++)
 {
   tax[i] = orig_price[i] * TAX_RATE;
   price[i] = orig_price[i] + tax[i];
 }

Код после обфускации:

 for(int a=0;a<100;a++){b[a]=c[a]*0.2;d[a]=c[a]+b[a];}

На уровне машинного кода

Как правило, обфускация на уровне машинного кода уменьшает скорость выполнения и соответственно увеличивает время выполнения программы. Поэтому она применяется в критичных к безопасности, но не критичных к скорости местах программы, таких как проверка регистрационного кода[1].

Простейший способ обфускации машинного кода — вставка в него недействующих конструкций (таких как or ax, ax)

На уровне промежуточного кода

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

Назначение

Усложнение исследования кода

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

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

Простейший пример обфусцированного HTML:

 <b>Маш</b><b>ина</b>

При просмотре пользователь увидит слово «Машина», в то время как в исходном коде оно расчленено и воспринимается как два раздельных слова.

Оптимизация

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

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

Недостатки

Потеря гибкости кода

Код после обфускации может стать более зависимым от платформы или компилятора.

Трудности отладки

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

Недостаточная безопасность

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

Ошибки в обфускаторах

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

Вызов класса по имени

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

См. также

Напишите отзыв о статье "Обфускация (программное обеспечение)"

Примечания

  1. [www.rfcmd.ru/+book_08/h10_2 10.2. Методы проверки регистрационных кодов]. www.rfcmd.ru. Проверено 2 февраля 2016.

Литература

  • Бойцев О. М. Защити свой компьютер на 100% от вирусов и хакеров. — Питер, 2008. — ISBN 9785388003478.
  • [www.citforum.ru/security/articles/analysis/ Чернов А. В. Анализ запутывающих преобразований программ]
  • [xakep.ru/2007/04/10/37614/ Декоративная обфускация PERL-кода: JAPH] Журнал «Хакер», 10 апреля 2007 года
  • [www.cise.ufl.edu/research/ParallelPatterns/PatternLanguage/Background/Psychology/CognitiveModel.htm Tim Mattson, A Cognitive Model for Programming, UF CISE]

Отрывок, характеризующий Обфускация (программное обеспечение)


Князь Василий исполнил обещание, данное на вечере у Анны Павловны княгине Друбецкой, просившей его о своем единственном сыне Борисе. О нем было доложено государю, и, не в пример другим, он был переведен в гвардию Семеновского полка прапорщиком. Но адъютантом или состоящим при Кутузове Борис так и не был назначен, несмотря на все хлопоты и происки Анны Михайловны. Вскоре после вечера Анны Павловны Анна Михайловна вернулась в Москву, прямо к своим богатым родственникам Ростовым, у которых она стояла в Москве и у которых с детства воспитывался и годами живал ее обожаемый Боренька, только что произведенный в армейские и тотчас же переведенный в гвардейские прапорщики. Гвардия уже вышла из Петербурга 10 го августа, и сын, оставшийся для обмундирования в Москве, должен был догнать ее по дороге в Радзивилов.
У Ростовых были именинницы Натальи, мать и меньшая дочь. С утра, не переставая, подъезжали и отъезжали цуги, подвозившие поздравителей к большому, всей Москве известному дому графини Ростовой на Поварской. Графиня с красивой старшею дочерью и гостями, не перестававшими сменять один другого, сидели в гостиной.
Графиня была женщина с восточным типом худого лица, лет сорока пяти, видимо изнуренная детьми, которых у ней было двенадцать человек. Медлительность ее движений и говора, происходившая от слабости сил, придавала ей значительный вид, внушавший уважение. Княгиня Анна Михайловна Друбецкая, как домашний человек, сидела тут же, помогая в деле принимания и занимания разговором гостей. Молодежь была в задних комнатах, не находя нужным участвовать в приеме визитов. Граф встречал и провожал гостей, приглашая всех к обеду.
«Очень, очень вам благодарен, ma chere или mon cher [моя дорогая или мой дорогой] (ma сherе или mon cher он говорил всем без исключения, без малейших оттенков как выше, так и ниже его стоявшим людям) за себя и за дорогих именинниц. Смотрите же, приезжайте обедать. Вы меня обидите, mon cher. Душевно прошу вас от всего семейства, ma chere». Эти слова с одинаковым выражением на полном веселом и чисто выбритом лице и с одинаково крепким пожатием руки и повторяемыми короткими поклонами говорил он всем без исключения и изменения. Проводив одного гостя, граф возвращался к тому или той, которые еще были в гостиной; придвинув кресла и с видом человека, любящего и умеющего пожить, молодецки расставив ноги и положив на колена руки, он значительно покачивался, предлагал догадки о погоде, советовался о здоровье, иногда на русском, иногда на очень дурном, но самоуверенном французском языке, и снова с видом усталого, но твердого в исполнении обязанности человека шел провожать, оправляя редкие седые волосы на лысине, и опять звал обедать. Иногда, возвращаясь из передней, он заходил через цветочную и официантскую в большую мраморную залу, где накрывали стол на восемьдесят кувертов, и, глядя на официантов, носивших серебро и фарфор, расставлявших столы и развертывавших камчатные скатерти, подзывал к себе Дмитрия Васильевича, дворянина, занимавшегося всеми его делами, и говорил: «Ну, ну, Митенька, смотри, чтоб всё было хорошо. Так, так, – говорил он, с удовольствием оглядывая огромный раздвинутый стол. – Главное – сервировка. То то…» И он уходил, самодовольно вздыхая, опять в гостиную.
– Марья Львовна Карагина с дочерью! – басом доложил огромный графинин выездной лакей, входя в двери гостиной.
Графиня подумала и понюхала из золотой табакерки с портретом мужа.
– Замучили меня эти визиты, – сказала она. – Ну, уж ее последнюю приму. Чопорна очень. Проси, – сказала она лакею грустным голосом, как будто говорила: «ну, уж добивайте!»
Высокая, полная, с гордым видом дама с круглолицей улыбающейся дочкой, шумя платьями, вошли в гостиную.
«Chere comtesse, il y a si longtemps… elle a ete alitee la pauvre enfant… au bal des Razoumowsky… et la comtesse Apraksine… j'ai ete si heureuse…» [Дорогая графиня, как давно… она должна была пролежать в постеле, бедное дитя… на балу у Разумовских… и графиня Апраксина… была так счастлива…] послышались оживленные женские голоса, перебивая один другой и сливаясь с шумом платьев и передвиганием стульев. Начался тот разговор, который затевают ровно настолько, чтобы при первой паузе встать, зашуметь платьями, проговорить: «Je suis bien charmee; la sante de maman… et la comtesse Apraksine» [Я в восхищении; здоровье мамы… и графиня Апраксина] и, опять зашумев платьями, пройти в переднюю, надеть шубу или плащ и уехать. Разговор зашел о главной городской новости того времени – о болезни известного богача и красавца Екатерининского времени старого графа Безухого и о его незаконном сыне Пьере, который так неприлично вел себя на вечере у Анны Павловны Шерер.
– Я очень жалею бедного графа, – проговорила гостья, – здоровье его и так плохо, а теперь это огорченье от сына, это его убьет!
– Что такое? – спросила графиня, как будто не зная, о чем говорит гостья, хотя она раз пятнадцать уже слышала причину огорчения графа Безухого.
– Вот нынешнее воспитание! Еще за границей, – проговорила гостья, – этот молодой человек предоставлен был самому себе, и теперь в Петербурге, говорят, он такие ужасы наделал, что его с полицией выслали оттуда.
– Скажите! – сказала графиня.
– Он дурно выбирал свои знакомства, – вмешалась княгиня Анна Михайловна. – Сын князя Василия, он и один Долохов, они, говорят, Бог знает что делали. И оба пострадали. Долохов разжалован в солдаты, а сын Безухого выслан в Москву. Анатоля Курагина – того отец как то замял. Но выслали таки из Петербурга.
– Да что, бишь, они сделали? – спросила графиня.
– Это совершенные разбойники, особенно Долохов, – говорила гостья. – Он сын Марьи Ивановны Долоховой, такой почтенной дамы, и что же? Можете себе представить: они втроем достали где то медведя, посадили с собой в карету и повезли к актрисам. Прибежала полиция их унимать. Они поймали квартального и привязали его спина со спиной к медведю и пустили медведя в Мойку; медведь плавает, а квартальный на нем.
– Хороша, ma chere, фигура квартального, – закричал граф, помирая со смеху.
– Ах, ужас какой! Чему тут смеяться, граф?
Но дамы невольно смеялись и сами.
– Насилу спасли этого несчастного, – продолжала гостья. – И это сын графа Кирилла Владимировича Безухова так умно забавляется! – прибавила она. – А говорили, что так хорошо воспитан и умен. Вот всё воспитание заграничное куда довело. Надеюсь, что здесь его никто не примет, несмотря на его богатство. Мне хотели его представить. Я решительно отказалась: у меня дочери.