Обфускация (программное обеспечение)
В разработке программного обеспечения обфускация — это процесс создания исходного или машинного кода , который трудно понять людям или компьютерам. Подобно обфускации в естественном языке , для составления утверждений он может использовать неоправданно окольные выражения. Программисты могут намеренно запутывать код, чтобы скрыть его назначение ( безопасность через неясность ) или его логику или неявные значения, встроенные в него, в первую очередь, чтобы предотвратить несанкционированный доступ, сдержать обратное проектирование или даже создать головоломку или развлекательную задачу для тех, кто читает исходный код. код. Это можно сделать вручную или с помощью автоматизированного инструмента, причем последний метод является предпочтительным в промышленности. [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» . ПоискКачествоПрограммного обеспечения . Архивировано из оригинала 2 февраля 2019 года . Проверено 1 февраля 2019 г.
- ^ Бинсток, Эндрю (6 марта 2003 г.). «Обфускация: скрытие вашего кода от посторонних глаз» . Архивировано из оригинала 20 апреля 2008 года . Проверено 25 ноября 2013 г.
- ^ Этвуд, Джефф (15 мая 2005 г.). «Джефф Этвуд, 15 мая 2005 г.» . Codinghorror.com. Архивировано из оригинала 9 января 2010 года . Проверено 25 ноября 2013 г.
- ^ «Обфускация» . Кентер.demon.nl. Архивировано из оригинала 4 марта 2016 года . Проверено 25 ноября 2013 г.
- ^ «Учебные пособия по C++. Обфусцированный код. Простое введение» . DreamInCode.net. Архивировано из оригинала 28 июня 2008 года . Проверено 25 ноября 2013 г.
- ^ «Учебники по C — запутанный код на C» . 7 июля 2011. Архивировано из оригинала 27 декабря 2013 года . Проверено 25 ноября 2013 г.
- ^ По состоянию на 25 ноября 2013 г., 18:22 по Гринвичу. «Пер(а)рлы в линейном шуме» . Perlmonks.org. Архивировано из оригинала 16 января 2009 года . Проверено 25 ноября 2013 г.
{{cite web}}
: CS1 maint: числовые имена: список авторов ( ссылка ) - ^ «Обфускация – Haskell Wiki» . 16 февраля 2006 года. Архивировано из оригинала 30 августа 2017 года . Проверено 3 марта 2020 г.
- ^ Монфор, Ник. «Запутанный код» (PDF) . Архивировано из оригинала (PDF) 24 апреля 2019 года . Проверено 24 ноября 2017 г.
- ^ Бен Куртович. «Запутывающее «Привет, мир!» » . benkurtovic.com . Архивировано из оригинала 14 сентября 2017 года . Проверено 18 октября 2017 г.
- ^ «Обфусцированный Питон» . wiki.c2.com . Архивировано из оригинала 14 февраля 2017 года . Проверено 18 октября 2017 г.
- ^ «Первый ежегодный запутанный контент Python» . code.activestate.com . Архивировано из оригинала 25 мая 2023 года . Проверено 18 октября 2017 г.
- ^ domas (3 ноября 2022 г.), xoreaxeaxeax/movfuscator , заархивировано из оригинала 12 ноября 2022 г. , получено 5 ноября 2022 г.
- ^ Break Me00 The MoVfuscator Превращение фильма в душераздирающий кошмар RE Кристофер Домас , заархивировано из оригинала 21 октября 2022 г. , получено 5 ноября 2022 г.
- ^ Уильямс, Эл (21 марта 2021 г.). «Одна инструкция, чтобы управлять ими всеми: компилятор C генерирует только MOV» . Хакадей . Проверено 23 октября 2023 г.
- ^ «JAPH — еще один Perl-хакер» . pm.org . Перл Монгеры. Архивировано из оригинала 16 мая 2013 года . Проверено 27 февраля 2015 г.
- ^ «Прорыв в криптографии может сделать программное обеспечение неуязвимым» . Проводной . ISSN 1059-1028 . Архивировано из оригинала 14 апреля 2022 года . Проверено 14 марта 2021 г.
- ^ Джайн, Ааюш; Линь, Хуэйцзя; Сахай, Амит (2020). «Обфускация неотличимости от вполне обоснованных предположений» . Архив электронной печати по криптологии . arXiv : 2008.09317 . Архивировано из оригинала 3 марта 2022 года . Проверено 14 марта 2021 г.
- ^ « Можем ли мы запутать программы?», Боаз Барак . Math.ias.edu. Архивировано из оригинала 23 марта 2016 года . Проверено 25 ноября 2013 г.
- ^ «Блокировка веб-сайта, единственный способ исправить это — отключение HTTPS… | AVG» . support.avg.com . 21 июля 2020 года. Архивировано из оригинала 4 февраля 2022 года . Проверено 4 февраля 2022 г.
- ^ в 05:01, Томас Клэберн, Сан-Франциско, 2 октября 2018 г. «Google принимает меры против замаскированного кода в Интернет-магазине Chrome» . www.theregister.co.uk . Архивировано из оригинала 12 ноября 2019 года . Проверено 12 ноября 2019 г.
{{cite web}}
: CS1 maint: числовые имена: список авторов ( ссылка ) - ^ Чимпану, Каталин. «Mozilla объявляет о запрете расширений Firefox, содержащих запутанный код» . ЗДНет . Архивировано из оригинала 5 марта 2020 года . Проверено 12 ноября 2019 г.
- ^ «Обоснование формулировки «предпочтительной формы произведения для внесения в него изменений» в GPL» . Lwn.net. Архивировано из оригинала 2 декабря 2013 года . Проверено 25 ноября 2013 г.
- ^ «Что такое свободное программное обеспечение?» . gnu.org. Архивировано из оригинала 14 октября 2013 года . Проверено 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. Архивировано (PDF) из оригинала 23 июня 2008 г. Проверено 28 июня 2008 г.