Обфускация (программное обеспечение)
В разработке программного обеспечения обфускация — это процесс создания исходного или машинного кода , который трудно понять людям или компьютерам. Подобно обфускации в естественном языке , он может использовать неоправданно окольные выражения для составления утверждений. Программисты могут намеренно запутывать код, чтобы скрыть его назначение ( безопасность через неясность ) или его логику или неявные значения, встроенные в него, в первую очередь, чтобы предотвратить несанкционированный доступ, сдержать обратное проектирование или даже создать головоломку или развлекательную задачу для тех, кто читает исходный код. код. Это можно сделать вручную или с помощью автоматизированного инструмента, причем последний метод является предпочтительным в промышленности. [1]
Обзор [ править ]
Архитектура и характеристики некоторых языков могут облегчить запутывание их, чем других. [2] [3] С , [4] С++ , [5] [6] и Perl язык программирования [7] Вот несколько примеров языков, которые легко запутать. Haskell также довольно запутан. [8] несмотря на то, что они совершенно разные по структуре.
Свойства, которые делают язык запутанным, не очевидны сразу.
Техники [ править ]
![]() | Этот раздел нуждается в расширении : объяснением дополнительных методов запутывания в целом. Вы можете помочь, добавив к нему . ( март 2023 г. ) |
Типы обфускаций включают простую замену ключевых слов, использование или неиспользование пробелов для создания художественных эффектов, а также самогенерирующиеся или сильно сжатые программы.
По словам Ника Монфора , методы могут включать в себя:
- запутывание именования, которое включает бессмысленное или вводящее в заблуждение именование переменных;
- путаница данных/кода/комментариев, которая включает в себя придание фактическому коду вида комментариев или путаницу синтаксиса с данными;
- двойное кодирование, которое может представлять собой отображение кода в поэтической форме или интересных формах. [9]
Автоматизированные инструменты [ править ]
Существует множество инструментов для выполнения или помощи в обфускации кода. К ним относятся инструменты экспериментальных исследований, созданные учеными, инструменты для любителей, коммерческие продукты, написанные профессионалами, и программное обеспечение с открытым исходным кодом . Также существуют инструменты деобфускации, которые пытаются выполнить обратное преобразование.
Хотя большинство коммерческих решений для запутывания работают путем преобразования либо исходного кода программы, либо независимого от платформы байт-кода, используемого Java и .NET , есть также такие, которые работают непосредственно с скомпилированными двоичными файлами.
- Некоторые примеры Python можно найти в официальном FAQ по программированию на Python и в других местах. [10] [11] [12]
- Компилятор movfuscator C инструкцию для x86_32 ISA использует только mov для запутывания. [13] [14] [15]
Рекреационный [ править ]
Написание и чтение запутанного исходного кода может оказаться непростой задачей . Ряд конкурсов по программированию награждает наиболее творчески запутанный код, например, International Obfuscated C Code Contest и Obfuscated Perl Contest .
Короткие запутанные программы Perl могут использоваться в сигнатурах Perl-программистов. Это JAPH (« Просто еще один хакер Perl »). [16]
Криптографический [ править ]
Криптографы исследовали идею запутывания кода, поэтому его реверс-инжиниринг становится криптографически сложным. Это формализовано во многих предложениях по обфускации неотличимости — криптографическому примитиву, который, если его можно будет построить безопасно, позволит создавать многие другие виды криптографии, включая совершенно новые типы, которые никто не знает, как создавать. что более сильное понятие — запутывание «черного ящика» — вообще невозможно.) ( Известно, [17] [18]
Недостатки обфускации [ править ]
- Хотя обфускация может затруднить чтение, запись и реверс-инжиниринг программы, это не обязательно сделает ее невозможной. [19]
- Это увеличивает время и сложность процесса сборки для разработчиков.
- Это может чрезвычайно затруднить отладку после того, как программное обеспечение было запутано.
- Как только код перестанет поддерживаться, любители могут захотеть поддерживать программу, добавлять моды или лучше понимать ее. Обфускация мешает конечным пользователям делать полезные вещи с кодом.
- Определенные виды обфускации (т. е. код, который не является просто локальным двоичным файлом и при необходимости загружает мини-двоичные файлы с веб-сервера) могут снизить производительность и/или потребовать подключения к Интернету.
Уведомление пользователей о запутанном коде [ править ]
Некоторые антивирусные программы, такие как AVG AntiVirus , [20] также будет предупреждать своих пользователей, когда они попадают на веб-сайт с кодом, который замаскирован вручную, поскольку одной из целей запутывания может быть сокрытие вредоносного кода. Однако некоторые разработчики могут использовать обфускацию кода с целью уменьшения размера файла или повышения безопасности. Среднестатистический пользователь может не ожидать, что его антивирусное программное обеспечение будет выдавать предупреждения о безвредном фрагменте кода, особенно от доверенных корпораций, поэтому такая функция может фактически удержать пользователей от использования законного программного обеспечения.
Mozilla и Google запрещают расширения браузера, содержащие запутанный код, в своем магазине дополнений. [21] [22]
Лицензии на обфускацию и авторское лево [ править ]
Ведутся споры о том, незаконно ли обходить с авторским левом лицензии на программное обеспечение , публикуя исходный код в запутанной форме, например, в тех случаях, когда автор менее желает сделать исходный код доступным. Эта проблема решена в Стандартной общественной лицензии GNU , требующей предоставления «предпочтительной формы для внесения изменений». [23] На веб-сайте GNU говорится: «Запутанный «исходный код» не является настоящим исходным кодом и не считается исходным кодом». [24]
Декомпиляторы [ править ]
Декомпилятор . может выполнить реверс-инжиниринг исходного кода из исполняемого файла или библиотеки Декомпиляцию иногда называют атакой «человек в конце» (клещ), основанной на традиционной криптографической атаке, известной как « человек посередине ». Он передает исходный код в руки пользователя, хотя этот исходный код часто трудно читать. Исходный код, скорее всего, будет иметь случайные имена функций и переменных, неправильные типы переменных и использовать логику, отличную от исходного исходного кода (из-за оптимизации компилятора).
Обфускация модели [ править ]
Обфускация модели — это метод, позволяющий скрыть внутреннюю структуру модели машинного обучения . [25] Обфускация превращает модель в черный ящик. Это противоречит объяснимому ИИ . Модели обфускации также можно применять к обучающим данным перед их подачей в модель для добавления случайного шума. Это скрывает конфиденциальную информацию о свойствах отдельных образцов и групп образцов. [26]
См. также [ править ]
- код ПРИРОДА
- Хвосты спагетти
- Декомпиляция
- Эзотерический язык программирования
- Куайн
- Перекрывающиеся инструкции
- Полиморфный код
- Аппаратная обфускация
- Конкурс «Закулисный C»
- Компилятор исходного кода
- ProGuard (Java-обфускатор)
- Дотфускатор (.Net Обфускатор)
- Управление цифровыми правами
- Запутывание неотличимости
- Украшение исходного кода
Ссылки [ править ]
- ^ «Что такое обфускация (обфу)? — Определение с сайта WhatIs.com» . ПоискКачествоПрограммного обеспечения . Проверено 1 февраля 2019 г.
- ^ Бинсток, Эндрю (6 марта 2003 г.). «Обфускация: скрытие вашего кода от посторонних глаз» . Архивировано из оригинала 20 апреля 2008 года . Проверено 25 ноября 2013 г.
- ^ Этвуд, Джефф (15 мая 2005 г.). «Джефф Этвуд, 15 мая 2005 г.» . Codinghorror.com . Проверено 25 ноября 2013 г.
- ^ «Обфускация» . Кентер.demon.nl. Архивировано из оригинала 4 марта 2016 года . Проверено 25 ноября 2013 г.
- ^ «Учебные пособия по C++. Обфусцированный код. Простое введение» . DreamInCode.net . Проверено 25 ноября 2013 г.
- ^ «Учебники по C — запутанный код на C» . 7 июля 2011 года . Проверено 25 ноября 2013 г.
- ^ По состоянию на 25 ноября 2013 г., 18:22 по Гринвичу. «Пер(а)рлы в линейном шуме» . Perlmonks.org . Проверено 25 ноября 2013 г.
{{cite web}}
: CS1 maint: числовые имена: список авторов ( ссылка ) - ^ «Обфускация – Haskell Wiki» . 16 февраля 2006 года. Архивировано из оригинала 30 августа 2017 года . Проверено 3 марта 2020 г.
- ^ Монфор, Ник. «Запутанный код» (PDF) . Архивировано из оригинала (PDF) 24 апреля 2019 года . Проверено 24 ноября 2017 г.
- ^ Бен Куртович. «Запутывающее «Привет, мир!» » . benkurtovic.com .
- ^ «Обфусцированный Питон» . wiki.c2.com .
- ^ «Первый ежегодный запутанный контент Python» . code.activestate.com .
- ^ domas (3 ноября 2022 г.), xoreaxeaxeax/movfuscator , получено 5 ноября 2022 г.
- ^ Break Me00 The MoVfuscator Превращает движение в душераздирающий кошмар RE Кристофер Домас , получено 5 ноября 2022 г.
- ^ Уильямс, Эл (21 марта 2021 г.). «Одна инструкция, чтобы управлять ими всеми: компилятор C генерирует только MOV» . Хакадей . Проверено 23 октября 2023 г.
- ^ «JAPH — еще один Perl-хакер» . pm.org . Перл Монгеры. Архивировано из оригинала 16 мая 2013 года . Проверено 27 февраля 2015 г.
- ^ «Прорыв в криптографии может сделать программное обеспечение неуязвимым» . Проводной . ISSN 1059-1028 . Проверено 14 марта 2021 г.
- ^ Джайн, Ааюш; Линь, Хуэйцзя; Сахай, Амит (2020). «Обфускация неотличимости от вполне обоснованных предположений» . Архив электронной печати по криптологии . arXiv : 2008.09317 .
- ^ « Можем ли мы запутать программы?», Боаз Барак . Math.ias.edu. Архивировано из оригинала 23 марта 2016 года . Проверено 25 ноября 2013 г.
- ^ «Блокировка веб-сайта, единственный способ исправить это — отключение HTTPS… | AVG» . support.avg.com . 21 июля 2020 г. Проверено 4 февраля 2022 г.
- ^ в 05:01, Томас Клэберн, Сан-Франциско, 2 октября 2018 г. «Google принимает меры против замаскированного кода в Интернет-магазине Chrome» . www.theregister.co.uk . Проверено 12 ноября 2019 г.
{{cite web}}
: CS1 maint: числовые имена: список авторов ( ссылка ) - ^ Чимпану, Каталин. «Mozilla объявляет о запрете расширений Firefox, содержащих запутанный код» . ЗДНет . Проверено 12 ноября 2019 г.
- ^ «Обоснование формулировки «предпочтительной формы произведения для внесения в него изменений» в GPL» . Lwn.net . Проверено 25 ноября 2013 г.
- ^ «Что такое свободное программное обеспечение?» . gnu.org . Проверено 18 декабря 2014 г.
- ^ Чжоу, Сян, Ву, Гранди, Чен, Сяо, Ли, Ли (2023 ) .
{{cite journal}}
: Для цитирования журнала требуется|journal=
( помощь ) - ^ Чжан, Тяньвэй; Он, Цзэчэн; Ли, Руби Б. (12 июля 2018 г.). «Машинное обучение с сохранением конфиденциальности посредством обфускации данных». arXiv : 1807.01860 [ cs.CR ].
Дальнейшее чтение [ править ]
- Сейедхамзе, Джавад, ABCME: Новый метаморфический двигатель , 17-я Национальная компьютерная конференция, Технологический университет Шарифа, Тегеран, Иран, 2012.
- Б. Барак, О. Гольдрейх, Р. Импальяццо, С. Рудич, А. Сахай, С. Вадхан и К. Янг. «О (не)возможности запутывания программ» . 21-я ежегодная международная конференция по криптологии , Санта-Барбара, Калифорния, США. Springer Verlag LNCS, том 2139, 2001 г.
- Матеас, Майкл; Ник Монфор. «Темная коробка: запутанность, странные языки и эстетика кода» (PDF) . Материалы 6-й конференции по цифровому искусству и культуре, ИТ-университет Копенгагена, 1–3 декабря 2005 г. стр. 144–153.