Патч
содержит улучшенный или обновленный код для операционной системы или приложения. Большинство поставщиков программного обеспечения не публикуют свой исходный код: таким образом, исправления обычно представляют собой фрагменты двоичного кода, которые встраиваются в существующую программу (с помощью программы установки).
Поиск
Алфавитный указатель
Пакет эксплойтов (exploit kit)
Парсер
Партнерская программа, партнерка
Патч
Паук
Пентест, тест на проникновение
Пентестер
Перебор по словарю
Переполнение буфера
Переполнение стека (Stack overflow)
Перехват TCP/IP (TCP/IP hijacking)
Перехват функции (хукинг)
Персистентность
Персональные данные
Песочница (sandbox)
Плагин
ПО с открытым исходным кодом
Побег из песочницы (Sandbox Escape)
Поведенческий анализ
Поверхность атаки
Подделка запросов со стороны сервера (SSRF)
Подмена DLL (DLL hijacking)
Подмена DNS (DNS spoofing)
Подмена MAC-адреса (MAC spoofing)
Подмена SIM-карты
Подстановка учетных данных
Поисковый робот
Полезная нагрузка (payload)
Полиморфизм
Политика BYOD
Порт
Порт TCP/IP
Посадочная страница, лендинг
Потенциально нежелательные программы
Потенциально опасная программа
Права cуперпользователя (root-доступ)
Предотвращение утечек информации (DLP)
Претекстинг (Pretexting)
Принцип минимальных привилегий (Principle of least privilege)
Проверка концепции (proof of concept, PoC)
Программа-блокировщик
Программа-вымогатель
Программа-вымогатель как услуга (Ransomware-as-a-Service, RaaS)
Программа-шифровальщик
Программно-определяемая сеть (SDN)
Программное обеспечение как услуга (Software as a Service, SaaS)
Программное обеспечение с закрытым исходным кодом (closed source software, проприетарное ПО)
Программный интерфейс приложения (application program interface, API)
Программный модуль
Продолжительные атаки повышенной сложности (advanced persistent threats, APT)
Прокси-сервер
Прошивка (Firmware)
Продукты для дома
Наши передовые решения помогают защитить то, что для вас ценно. Узнайте больше о нашей удостоенной наград защите.
Бесплатные утилиты
Наши бесплатные утилиты помогают обеспечить защиту ваших устройств на базе Windows, Mac и Android.
О компании
Узнайте больше о том, кто мы, как мы работаем и почему наша главная цель – сделать цифровой мир безопасным для всех.
Пробные версии
Попробуйте наши решения. Всего за несколько кликов вы можете скачать бесплатные пробные версии нашего продукта и проверить их в действии.
Связаться с нами
Наша главная цель – обеспечить вашу безопасность. Мы всегда готовы ответить на ваши вопросы и оказать техническую поддержку.
Что означает слово «патч» в компьютере и как его использовать
Многим пользователям компьютеров и мобильной техники встречалось слово «патч». Но не все понимают, что это такое и как им пользоваться.
Определение патча
Само слово «Патч» не является русским. Точное понимание можно получить при переводе с английского: patch – это заплатка. А по сути заплатка – попытка прикрыть дыру с помощью имеющихся материалов. Примечательно, что такое определение как нельзя точнее описывает назначение патчей в программном обеспечении. Они выпускаются для улучшения функционирования или для закрытия «дыр».
Особенно в плане «закрытия дыр» можно выделить исправления, которые закрывают уязвимости в системе. Собственно, такая уязвимость считается «дырой», а patch – набор команд и инструкций, которые эту самую дыру закроют.
Историческая справка
Слово «заплатка» используется не просто так. В годы, когда передача информации производилась на перфокартах, места с ошибками вырезались физически, а исправленная перфорация вклеивалась на их место. Таким образом установка «заплаток» имела не фигуральное, а реальное значение. Изменять слово со временем не стали, и по сей день обновления и исправления именуются «заплатками».
Виды патчей в компьютере
Естественно, существует несколько характерных разновидностей «заплаток». Зависят они от нескольких факторов, но назвать это полноценной классификацией нельзя. Связано это с тем, что факторы зачастую перекликаются, а «исправления» могут одновременно классифицироваться по разным параметрам:
- HotFix. Быстрое (дословно — горячее) исправление, которое выпускается в результате появления уязвимости в последнем крупном обновлении. Выпускаются иногда на следующий день и содержат минимальное количество изменений.
- ServicePack. Огромный набор исправлений и улучшений, которые зачастую меняют принципы работы программы. Примером являются «паки» для Windows, которые можно отнести к патчам, но фактически они «стоят» отдельно и перестали классифицироваться, как «заплатки».
- Плановые исправления. Чаще всего встречаются в играх, направленных на сезонный контент. Плановые «заплатки» завершают активность сезона и запускают следующий. Можно встретить в «Diablo» и «Path of Exile» (также, в целом легионе игр с сезонными рейтинговыми таблицами и событиями).
- Взаимодействие с ПО. Самым распространённым вариантом является «графический патч», который адаптирует работу программы к новым реалиям, ОС или расширяет возможности графики. Самым ярким примером является patch13d для Diablo II, выпущенный спустя 10 лет, после последнего обновления.
- Игровые. Можно сразу отметить, что патчи для игр обладают собственной классификацией и разбирать их следует отдельно. Такие вещи, как плановые, интерфейсные, балансные, и прочие изменения в играх называются патчами. Даже смена номерной версии (адд-он) тоже будет патчем не смотря на расширение контента.
- Принудительные. Когда, программа без обновления перестаёт работать. Это исправления уязвимостей в клиент-банках или эксплойтов в играх.
- Автоматические. Которые закачиваются и распаковываются через саму программу или специальный «launcher».
- Ручные. Такие исправления нужно загружать и запускать самостоятельно. Примером является обновление «S.T.A.L.K.E.R», которое нужно было скачивать с сайта и запускать самостоятельно.
Spaces.ru – обзор сайта для обмена музыкой, фильмами и другой информацией
Вместе с видами стоит упомянуть и выражение – пропатчить файл или программу. Это значит, что целевой файл или программу нужно определенным образом обновить.
Например, русификация также является «заплаткой». И, чтобы русифицировать программу нужно пропатчить ее, т.е. установить патч, который добавит русский язык в приложение.
Функции патчей
Выше, вместе с классификацией уже затронута тема назначения. Также применение заплаток рассматривалось и ранее по тексту. Поэтому вопрос будет рассмотрен перечислением только некоторых моментов:
- исправление предыдущих ошибок;
- откат изменений предыдущего исправления (когда выбирается ошибочное исправление, приводящее к ещё большим проблемам);
- улучшение графической составляющей или взаимодействия с ПО/железом;
- добавление новых функций.
Перечисленные варианты являются составляющей почти любого «patch-notes», которые сопровождают обновления при нормальных условиях. Особенно такие «заметки об исправлениях» интересуют геймеров, ведь в них указывает перечень изменений, способный пошатнуть привычный баланс.
Patch Notes
Заслуживают отдельного упоминания. Это документы, которые распространяются вместе с патчами. Они могут называться «история изменений» или также, как данный раздел. В них, в текстовом и удобном формате указывается какие именно изменения поставляются в указанном обновлении.
Такая информация крайне важна для геймеров, но иногда доходит до абсурда. Примером служит Diablo III “Reaper of Souls”, где 2 строки было отведено, под следующую информацию:
- уменьшено количество кучек золота, выпадающих с убитых монстров;
- увеличено количество золота в кучках, выпадающих с убитых монстров.
При этом с точки зрения игрока разработчики вообще ничего не изменили. С другой стороны, это немного улучшило оптимизацию в самой игре (уменьшив количество объектов на экране). Поэтому нелогичные пункты в «исправлениях» часто имеют скрытый смысл, который направлен на улучшение работы программы.
Примеры использования
В классификации было указано, что есть разные виды патчей. Они могут быть ориентированы на самые разные аспекты работы программы, поэтому рассматривать их следует в комплексе с источником (программой).
PAC-MAN 256: время вспомнить классику
Операционные системы
Упомянутые выше «Service Pack» для ОС Windows служат отличным примером крупных патчей для операционных систем. Также существует такое явление, как обновления ОС. Особенно знакомо это пользователям Windows 10, которые вынуждены сталкиваться с обновлениями иногда по нескольку раз в неделю. Каждое отдельное исправление из списка в таком случае является отдельной «заплаткой» для указанных в списке компонентов.
Также примером является «lucky patcher» для Андроид, который позволяет отключить рекламу и прочие подобные элементы в самой ОС.
Программное обеспечение
Здесь исправления либо более глобальные, либо важные. Следует отметить, что они направлены на корректировку проблемных моментов в программе или улучшения (расширения) функционала. Примером можно назвать новые версии «adobe flash player», которые постоянно развивают быстродействие графических компонентов при обработке.
Игры
Здесь явление обновлений более глобально. Каждая новая «заплатка» может нести, как новый контент (например, с технической точки зрения аддоны в World Of WarCraft тоже являются патчами), так и незначительные исправления баланса (patch 1.0001 в Stalker Shadow of Chernobyl, где было исправлено повреждение костюмов).
В некоторых играх исправления выходят настолько часто, что появляются отдельные каналы, которые занимаются их разбором. Примером, является канал Ярослава Кузнецова (aka NS), который занимается разбором интересных моментов игры Dota 2 и нередко обозревает самые крупные патчи.
Патчим всё, что ни попадя или Open source в действии
Возможно, многие сталкивались с ситуацией, когда программа или библиотека из дистрибутива не содержит некоторой (нужной вам) функциональности, которая была добавлена в следующей версии. Или содержит баг, который был исправлен в следующей версии (или его исправление не было включено в основную ветку), а в репозитории вашего дистрибутива всё ещё содержится старая версия.
Именно с таким багом столкнулся я, а также все пользователи редактора JuffEd (новая версия которого, кстати, вышла на днях), использующие в качестве рабочего окружения среду GNOME под Linux. Баг этот заключается в том, что при использовании автокомплита его окошко появляется на мгновение, после чего пропадает, «унося» за собой фокус. На данном примере я покажу, как можно самостоятельно патчить программы из дистрибутива.
Описанный баг — это баг библиотеки QScintilla, который проявляется во всех программах, использующих данный компонент (например, аналогичное поведение наблюдается в Eric4). Если вы не пользуетесь ни одной из перечисленных программ, но руки чешутся попробовать — можете установить одну из них чисто в экспериментальных целях. Но, повторяю, баг проявляется только под GNOME, а под KDE всё работает.
Я отправил патч разработчикам и провёл некоторое его тестирование, но если они и включат этот патч, то в следующей версии. А что делать тем, кто использует не самые новые дистрибутивы? В данном случае ситуация ещё осложняется тем, что новая версия библиотеки (2.4) бинарно несовместима с предыдущей (2.3, которая содержится, например, в Ubuntu 9.04), поэтому просто собрать и установить версию 2.4 после того, как они решат данную проблему, будет нельзя — программы, собранные с использованием «родной» версии 2.3, при использовании версии 2.4 падают в 100% случаев.
Ну что, напугал? 🙂 А теперь меньше слов, больше дела!
Готовим ингредиенты
Будем собирать «родную» версию, но с нужным нам патчем. Я опишу весь процесс на случай, когда мы правим что-то с нуля, а также расскажу о более коротких путях, на случай, когда патч уже существует.
Итак, создадим каталог для экспериментов и перейдём в него:
$ mkdir -p experiments/qscintilla
$ cd experiments/qscintilla
Для начала нам понадобятся исходники ровно той версии, которая установлена у Вас в системе. Это делается не просто, а очень просто:
$ apt-get source libqscintilla2-3
Но для этого у вас наравне с основными репозиториями должны быть подключены репозитории с исходниками:
Итак, получили ровно те исходники, из которых был собран тот пакет, который находится репозитории. Большинство (если не все) пакетов имеют дистро-специфичные патчи, которые в случае Debian-based дистрибутивов лежат в подкаталоге debian/patches. Эти патчи применяются перед самой сборкой, и наша задача — положить туда деб-патч с нужным нам исправлением. Для этого нам понадобится утилита dpatch. Устанавливаем её (а также несколько других утилит, которые понадобятся нам при сборке) и переходим в основной каталог с программой:
$ sudo aptitude install dpatch cdbs fakeroot build-essential patch
$ cd qscintilla2-2.3.2/
Добавляем основную изюминку
Мы видим, что в каталоге debian/patch находятся 3 файла: файл 00list и 2 файла с расширением .dpatch. Как нетрудно догадатся, файл 00list содержит список патчей, а оставшиеся файлы — это патчи и есть. Чтобы не возникало путаницы, те патчи, которые находятся в каталоге debian/patches и которые предназначены для программы dpatch, я буду называть деб-патчами, а просто патчами будут называться обычные исправления, которые могут быть созданны программой diff и которые обычно используются программой patch для внесения изменений.
Те, кого интересует результат, а сам процесс — не особо, могут скачать готовый деб-патч тут, положить его в каталог debian/patches и перейти к абзацу в конце данного раздела, который начинается словами «Если теперь мы заглянем в каталог debian/patches. »
Те же, кого интересует сам процесс, читают дальше инструкцию, как изготовить такой деб-патч самостоятельно.
Чтобы создать свой собственный деб-патч, находясь в основном каталоге программы выполним команду dpatch-edit-patch , где — имя нового деб-патча. При этом будет создана временная копия всего каталога исходных текстов, и наш шелл будет автоматически перенаправлен в неё. Тут мы можем править исходники так, как считаем нужным, после чего просто выходим из этого «вложенного шелла» командой exit, и результатом всех этих действий будет нужный нам деб-патч, содержащий все сделанные изменения. Править можно как вручную, так и при помощи команды patch (обычной patch, не dpatch), накладывая патчи, созданные кем-то другим.
Итак, правку вручную я оставляю за кадром, т.к. у каждого она может быть индивидуальна (можно убрать что-нибудь ненужное, а можно просто добавить в About-диалог «Мир, Труд, Май!» или что-нибудь ещё), а покажу как использовать готовые патчи на примере рассматриваемого случая, а именно для исправления автодополнения в QScintilla. Вот патч, который я послал разработчикам QScintilla. Сохраните его себе на диск.
— Qt4/SciClasses.cpp 2009-10-16 10:09:48.000000000 -0400
+++ Qt4/SciClasses.cpp 2009-10-16 10:11:01.000000000 -0400
@@ -128,7 +128,7 @@
SciListBox::SciListBox(QWidget *parent, ListBoxQt *lbx_)
: QListWidget(parent), lbx(lbx_)
— setWindowFlags(Qt::Tool|Qt::FramelessWindowHint);
+ setWindowFlags(Qt::ToolTip|Qt::WindowStaysOnTopHint);
setAttribute(Qt::WA_StaticContents);
Итак, теперь всё то, что я рассказал выше многими непонятными словами, проделаем при помощи коротких и понятных команд 🙂 Мы находимся в основном каталоге исходников qscintilla2-2.3.2:
$ dpatch-edit-patch 03_autocomplete (создаём новый деб-патч и попадаем в каталог с копией исходников)
$ patch -p0 < /path/to/our/qscintilla_autocomplete.patch (патчим исходники существующим патчем)
$ exit (выходим из «виртуального шелла»)
Если теперь мы заглянем в каталог debian/patches, то увидим, что там появился ещё один файл с именем 03_autocomplete.dpatch. Всё, что нам осталось сделать — это добавить его имя (без расширения .dpatch) в файл 00list. Если вы забудете это сделать, то пакет соберётся без наших изменений и ничем не будет отличаться от того, что лежит в репозитории.
$ echo «03_autocomplete» >> debian/patches/00list
Варим! То есть собираем
Находясь всё так же в основном каталоге исходников, выполняем
$ dpkg-buildpackage -rfakeroot
Он обязательно ругнётся, что удовлетворены не все зависимости для сборки. Устанавливаем всё, что он просит. На совершенно чистой машине для этого потребуется скачать 46.7 МБ архивов, после распаковки которых будет занято 181 МБ на диске. Если что-то из этого у вас уже установлено — то качать придётся меньше. Львиную долю составляют девелоперские библиотеки Qt4 (30.6 МБ и 124 МБ соответственно).
$ sudo aptitude install libqt4-dev python-all-dev sip4 python-sip4 python-sip4-dev python-qt4-dev python-qt4
В комментариях ниже хабраюзер arty совершенно справедливо заметил, что зависимости можно установить при помощи
apt-get build-dep [package name]
и таким образом не придётся руками перечислять все требуемые пакеты.
После установки всего требуемого запускаем сборку ещё раз:
$ dpkg-buildpackage -rfakeroot
Теперь всё должно пойти без вопросов.
Если вы всё сделали правильно на предыдущих этапах, то через некоторе время сборка окончится (ругнувшись на отсутствие цифровой подписи, но это можно проигнорировать), и в каталоге уровнем выше появится несколько deb-пакетов. Нас интересует один из них: libqscintilla2-3_2.3.2-0ubuntu2_i386.deb. Устанавливаем его
$ sudo dpkg -i ../libqscintilla2-3_2.3.2-0ubuntu2_i386.deb
и [пере]запускаем программы, которые используют данную библиотеку (например, JuffEd).
Вуаля! Автокомплит работает!
Если есть дополнения или замечания — добро пожаловать в комментарии.
UPD1: прошу прощения, залил не тот пакет. Если скачали deb, установили и ничего по-прежнему не работает — скачайте ещё раз:
$ md5sum libqscintilla2-3_2.3.2-patched-1ubuntu2_i386.deb
e5047bb52011d80b06e82fafe5063a73 libqscintilla2-3_2.3.2-patched-1ubuntu2_i386.deb
При подготовке материала использовались источники:
Что означает слово «патч» в компьютере и как его использовать
https://habr.com/ru/articles/72609/