stringtranslate.com

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

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

Обзор

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

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

Техники

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

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

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

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

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

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

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

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

Короткие запутанные программы Perl могут использоваться в сигнатурах Perl-программистов. Это JAPH (« Просто еще один хакер Perl »). [16]

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

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

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

Уведомление пользователей об обфусцированном коде

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

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

Лицензии на обфускацию и авторское лево

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

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

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

Обфускация модели

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

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

Рекомендации

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

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

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