stringtranslate.com

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

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

Обзор

Архитектура и характеристики некоторых языков могут сделать их более запутанными, чем другие. [2] [3] C , [4] C++ , [5] [6] и язык программирования Perl [7] — вот некоторые примеры языков, которые легко запутать. Haskell также довольно запутан [8], несмотря на то, что он довольно сильно отличается по структуре.

Свойства, которые делают язык запутанным, не очевидны сразу.

Методы

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

По словам Ника Монтфорта , методы могут включать:

  1. запутывание имен, которое включает присвоение переменным бессмысленных или вводящих в заблуждение имен;
  2. путаница с данными/кодом/комментариями, которая включает в себя создание некоторого фактического кода, выглядящего как комментарии, или путаницу с синтаксисом и данными;
  3. двойное кодирование, которое может отображать код в форме поэзии или интересных фигур. [9]

Автоматизированные инструменты

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

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

Рекреационный

Написание и чтение запутанного исходного кода может быть головоломкой . Ряд конкурсов по программированию награждают наиболее креативно запутанный код, например, Международный конкурс запутанного кода на C и Конкурс запутанного кода на Perl .

Короткие обфусцированные программы Perl могут использоваться в подписях программистов Perl. Это JAPHs (« Just another Perl hacker »). [16]

Криптографический

Криптографы исследовали идею запутывания кода, чтобы обратная разработка кода была криптографически трудной. Это формализовано во многих предложениях по неразличимости запутывания , криптографического примитива, который, если его можно построить безопасно, позволит построить много других видов криптографии, включая совершенно новые типы, которые никто не знает, как сделать. (Более сильное понятие, запутывание черного ящика , как известно, в общем случае невозможно.) [17] [18]

Недостатки обфускации

Уведомление пользователей о запутанном коде

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

Mozilla и Google запрещают размещать в своих магазинах дополнений расширения браузеров, содержащие запутанный код. [21] [22]

Запутывание и лицензии Copyleft

Были дебаты о том, является ли незаконным обходить лицензии на программное обеспечение с копилефтом , выпуская исходный код в запутанной форме, например, в случаях, когда автор менее склонен предоставлять исходный код. Проблема решается в GNU General Public License , требуя, чтобы «предпочтительная форма для внесения изменений» была доступна. [23] На веб-сайте GNU указано: «Запутанный „исходный код“ не является настоящим исходным кодом и не считается исходным кодом». [24]

Декомпиляторы

Декомпилятор может выполнить обратную разработку исходного кода из исполняемого файла или библиотеки. Декомпиляцию иногда называют атакой man-in-the-end (mite), основанной на традиционной криптографической атаке, известной как « man-in-the-middle ». Она передает исходный код в руки пользователя, хотя этот исходный код часто трудно читать. Исходный код, скорее всего, будет иметь случайные имена функций и переменных, неправильные типы переменных и использовать другую логику, чем исходный код (из-за оптимизаций компилятора).

Модель запутывания

Обфускация модели — это метод сокрытия внутренней структуры модели машинного обучения . [25] Обфускация превращает модель в черный ящик. Это противоречит объяснимому ИИ . Модели обфускации также можно применять к обучающим данным перед их подачей в модель для добавления случайного шума. Это скрывает конфиденциальную информацию о свойствах отдельных образцов и групп образцов. [26]

Смотрите также

Ссылки

  1. ^ "Что такое обфускация (obfu)? - Определение с сайта WhatIs.com". SearchSoftwareQuality . Архивировано из оригинала 2 февраля 2019 г. Получено 1 февраля 2019 г.
  2. Бинсток, Эндрю (6 марта 2003 г.). «Запутывание: сокрытие кода от любопытных глаз». Архивировано из оригинала 20 апреля 2008 г. Получено 25 ноября 2013 г.
  3. Этвуд, Джефф (15 мая 2005 г.). "Джефф Этвуд, 15 мая 2005 г.". Codinghorror.com. Архивировано из оригинала 9 января 2010 г. Получено 25 ноября 2013 г.
  4. ^ "Запутывание". Kenter.demon.nl. Архивировано из оригинала 4 марта 2016 года . Получено 25 ноября 2013 года .
  5. ^ "Учебники C++ – Запутанный код – Простое введение". DreamInCode.net. Архивировано из оригинала 28 июня 2008 г. Получено 25 ноября 2013 г.{{cite web}}: CS1 maint: неподходящий URL ( ссылка )
  6. ^ "C Tutorials – Obfuscated Code in C". 7 июля 2011 г. Архивировано из оригинала 27 декабря 2013 г. Получено 25 ноября 2013 г.
  7. По состоянию на 2013-11-25 18:22 GMT. «Pe(a)rls in line noise». Perlmonks.org. Архивировано из оригинала 16 января 2009 года . Получено 25 ноября 2013 года .{{cite web}}: CS1 maint: числовые имена: список авторов ( ссылка )
  8. ^ "Obfuscation – Haskell Wiki". 16 февраля 2006 г. Архивировано из оригинала 30 августа 2017 г. Получено 3 марта 2020 г.
  9. ^ Монфор, Ник. "Запутанный код" (PDF) . Архивировано из оригинала (PDF) 24 апреля 2019 г. . Получено 24 ноября 2017 г. .
  10. ^ Бен Куртович. «Запутывание «Hello world!»». benkurtovic.com . Архивировано из оригинала 14 сентября 2017 г. . Получено 18 октября 2017 г. .
  11. ^ "Obfuscated Python". wiki.c2.com . Архивировано из оригинала 14 февраля 2017 г. . Получено 18 октября 2017 г. .
  12. ^ "Первый ежегодный обфусцированный контент Python". code.activestate.com . Архивировано из оригинала 25 мая 2023 г. Получено 18 октября 2017 г.
  13. ^ domas (3 ноября 2022 г.), xoreaxeaxeax/movfuscator, заархивировано из оригинала 12 ноября 2022 г. , извлечено 5 ноября 2022 г.
  14. ^ Break Me00 The MoVfuscator Превращаем mov в душераздирающий кошмар RE Кристофер Домас, архивировано из оригинала 21 октября 2022 г. , извлечено 5 ноября 2022 г.
  15. ^ Уильямс, Эл (21 марта 2021 г.). «Одна инструкция, которая правит всеми: компилятор C выдает только MOV». Hackaday . Получено 23 октября 2023 г. .
  16. ^ "JAPH – Just Another Perl Hacker". pm.org . Perl Mongers. Архивировано из оригинала 16 мая 2013 г. Получено 27 февраля 2015 г.
  17. ^ "Прорыв в криптографии может сделать программное обеспечение невзламываемым". Wired . ISSN  1059-1028. Архивировано из оригинала 14 апреля 2022 г. Получено 14 марта 2021 г.
  18. ^ Джейн, Ааюш; Лин, Хуэйцзя ; Сахай, Амит (2020). «Неразличимость обфускации от обоснованных предположений». Архив Cryptology ePrint . arXiv : 2008.09317 . Архивировано из оригинала 3 марта 2022 г. Получено 14 марта 2021 г.
  19. ^ ""Can We Obfuscate Programs?" Боаз Барак". Math.ias.edu. Архивировано из оригинала 23 марта 2016 г. Получено 25 ноября 2013 г.
  20. ^ "Блокировка веб-сайта и единственный способ исправить это — отключить HTTPS-с... | AVG". support.avg.com . 21 июля 2020 г. Архивировано из оригинала 4 февраля 2022 г. Получено 4 февраля 2022 г.
  21. ^ в 05:01, Томас Клэберн в Сан-Франциско 2 октября 2018 г. «Google принимает меры против замаскированного кода в Chrome Web Store». www.theregister.co.uk . Архивировано из оригинала 12 ноября 2019 г. . Получено 12 ноября 2019 г. .{{cite web}}: CS1 maint: числовые имена: список авторов ( ссылка )
  22. ^ Cimpanu, Catalin. «Mozilla объявляет о запрете расширений Firefox, содержащих запутанный код». ZDNet . Архивировано из оригинала 5 марта 2020 г. Получено 12 ноября 2019 г.
  23. ^ "Обоснование формулировки "предпочтительной формы произведения для внесения в него изменений" в GPL". Lwn.net. Архивировано из оригинала 2 декабря 2013 г. Получено 25 ноября 2013 г.
  24. ^ "Что такое свободное программное обеспечение?". gnu.org. Архивировано из оригинала 14 октября 2013 г. Получено 18 декабря 2014 г.
  25. ^ Чжоу, Минъи; Гао, Сян; Ву, Цзин; Гранди, Джон К.; Чен, Сяо; Чен, Чуньян; Ли, Ли (2023). «Обфускация моделей для защиты развернутых нейронных сетей». {{cite journal}}: Цитировать журнал требует |journal=( помощь )
  26. ^ Чжан, Тяньвэй; Хэ, Цзэчэн; Ли, Руби Б. (12 июля 2018 г.). «Машинное обучение с сохранением конфиденциальности посредством запутывания данных». arXiv : 1807.01860 [cs.CR].

Дальнейшее чтение

Внешние ссылки