Что значит пропатчить файл
Перейти к содержимому

Что значит пропатчить файл

  • автор:

Что означает слово «патч» в компьютере и как его использовать

Многим пользователям компьютеров и мобильной техники встречалось слово «патч». Но не все понимают, что это такое и как им пользоваться.

Определение патча

Само слово «Патч» не является русским. Точное понимание можно получить при переводе с английского: patch – это заплатка. А по сути заплатка – попытка прикрыть дыру с помощью имеющихся материалов. Примечательно, что такое определение как нельзя точнее описывает назначение патчей в программном обеспечении. Они выпускаются для улучшения функционирования или для закрытия «дыр».

Установка патча

Начало процесса установки «патча» для Diablo III.

Особенно в плане «закрытия дыр» можно выделить исправления, которые закрывают уязвимости в системе. Собственно, такая уязвимость считается «дырой», а patch – набор команд и инструкций, которые эту самую дыру закроют.

Историческая справка

Слово «заплатка» используется не просто так. В годы, когда передача информации производилась на перфокартах, места с ошибками вырезались физически, а исправленная перфорация вклеивалась на их место. Таким образом установка «заплаток» имела не фигуральное, а реальное значение. Изменять слово со временем не стали, и по сей день обновления и исправления именуются «заплатками».

Виды патчей в компьютере

Естественно, существует несколько характерных разновидностей «заплаток». Зависят они от нескольких факторов, но назвать это полноценной классификацией нельзя. Связано это с тем, что факторы зачастую перекликаются, а «исправления» могут одновременно классифицироваться по разным параметрам:

Автоматический патч

  1. HotFix. Быстрое (дословно — горячее) исправление, которое выпускается в результате появления уязвимости в последнем крупном обновлении. Выпускаются иногда на следующий день и содержат минимальное количество изменений.
  2. ServicePack. Огромный набор исправлений и улучшений, которые зачастую меняют принципы работы программы. Примером являются «паки» для Windows, которые можно отнести к патчам, но фактически они «стоят» отдельно и перестали классифицироваться, как «заплатки».
  3. Плановые исправления. Чаще всего встречаются в играх, направленных на сезонный контент. Плановые «заплатки» завершают активность сезона и запускают следующий. Можно встретить в «Diablo» и «Path of Exile» (также, в целом легионе игр с сезонными рейтинговыми таблицами и событиями).
  4. Взаимодействие с ПО. Самым распространённым вариантом является «графический патч», который адаптирует работу программы к новым реалиям, ОС или расширяет возможности графики. Самым ярким примером является patch13d для Diablo II, выпущенный спустя 10 лет, после последнего обновления.
  5. Игровые. Можно сразу отметить, что патчи для игр обладают собственной классификацией и разбирать их следует отдельно. Такие вещи, как плановые, интерфейсные, балансные, и прочие изменения в играх называются патчами. Даже смена номерной версии (адд-он) тоже будет патчем не смотря на расширение контента.
  6. Принудительные. Когда, программа без обновления перестаёт работать. Это исправления уязвимостей в клиент-банках или эксплойтов в играх.
  7. Автоматические. Которые закачиваются и распаковываются через саму программу или специальный «launcher».
  8. Ручные. Такие исправления нужно загружать и запускать самостоятельно. Примером является обновление «S.T.A.L.K.E.R», которое нужно было скачивать с сайта и запускать самостоятельно.

Вместе с видами стоит упомянуть и выражение – пропатчить файл или программу. Это значит, что целевой файл или программу нужно определенным образом обновить.

Например, русификация также является «заплаткой». И, чтобы русифицировать программу нужно пропатчить ее, т.е. установить патч, который добавит русский язык в приложение.

Функции патчей

Выше, вместе с классификацией уже затронута тема назначения. Также применение заплаток рассматривалось и ранее по тексту. Поэтому вопрос будет рассмотрен перечислением только некоторых моментов:

  • исправление предыдущих ошибок;
  • откат изменений предыдущего исправления (когда выбирается ошибочное исправление, приводящее к ещё большим проблемам);
  • улучшение графической составляющей или взаимодействия с ПО/железом;
  • добавление новых функций.

Перечисленные варианты являются составляющей почти любого «patch-notes», которые сопровождают обновления при нормальных условиях. Особенно такие «заметки об исправлениях» интересуют геймеров, ведь в них указывает перечень изменений, способный пошатнуть привычный баланс.

Patch Notes

Patch Notes

Заслуживают отдельного упоминания. Это документы, которые распространяются вместе с патчами. Они могут называться «история изменений» или также, как данный раздел. В них, в текстовом и удобном формате указывается какие именно изменения поставляются в указанном обновлении.

Такая информация крайне важна для геймеров, но иногда доходит до абсурда. Примером служит Diablo III “Reaper of Souls”, где 2 строки было отведено, под следующую информацию:

  • уменьшено количество кучек золота, выпадающих с убитых монстров;
  • увеличено количество золота в кучках, выпадающих с убитых монстров.

При этом с точки зрения игрока разработчики вообще ничего не изменили. С другой стороны, это немного улучшило оптимизацию в самой игре (уменьшив количество объектов на экране). Поэтому нелогичные пункты в «исправлениях» часто имеют скрытый смысл, который направлен на улучшение работы программы.

Примеры использования

В классификации было указано, что есть разные виды патчей. Они могут быть ориентированы на самые разные аспекты работы программы, поэтому рассматривать их следует в комплексе с источником (программой).

Операционные системы

Журнал обновлений

Упомянутые выше «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% случаев.

Ну что, напугал? 🙂 А теперь меньше слов, больше дела!

Готовим ингредиенты

Будем собирать «родную» версию, но с нужным нам патчем. Я опишу весь процесс на случай, когда мы правим что-то с нуля, а также расскажу о более коротких путях, на случай, когда патч уже существует.

Итак, создадим каталог для экспериментов и перейдём в него:

Для начала нам понадобятся исходники ровно той версии, которая установлена у Вас в системе. Это делается не просто, а очень просто:

Но для этого у вас наравне с основными репозиториями должны быть подключены репозитории с исходниками:

Итак, получили ровно те исходники, из которых был собран тот пакет, который находится репозитории. Большинство (если не все) пакетов имеют дистро-специфичные патчи, которые в случае Debian-based дистрибутивов лежат в подкаталоге debian/patches. Эти патчи применяются перед самой сборкой, и наша задача — положить туда деб-патч с нужным нам исправлением. Для этого нам понадобится утилита dpatch. Устанавливаем её (а также несколько других утилит, которые понадобятся нам при сборке) и переходим в основной каталог с программой:

Добавляем основную изюминку

Мы видим, что в каталоге debian/patch находятся 3 файла: файл 00list и 2 файла с расширением .dpatch. Как нетрудно догадатся, файл 00list содержит список патчей, а оставшиеся файлы — это патчи и есть. Чтобы не возникало путаницы, те патчи, которые находятся в каталоге debian/patches и которые предназначены для программы dpatch, я буду называть деб-патчами, а просто патчами будут называться обычные исправления, которые могут быть созданны программой diff и которые обычно используются программой patch для внесения изменений.

Те, кого интересует результат, а сам процесс — не особо, могут скачать готовый деб-патч тут, положить его в каталог debian/patches и перейти к абзацу в конце данного раздела, который начинается словами «Если теперь мы заглянем в каталог debian/patches. »
Те же, кого интересует сам процесс, читают дальше инструкцию, как изготовить такой деб-патч самостоятельно.

Чтобы создать свой собственный деб-патч, находясь в основном каталоге программы выполним команду dpatch-edit-patch <patch_name>, где <patch_name> — имя нового деб-патча. При этом будет создана временная копия всего каталога исходных текстов, и наш шелл будет автоматически перенаправлен в неё. Тут мы можем править исходники так, как считаем нужным, после чего просто выходим из этого «вложенного шелла» командой 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:

Если теперь мы заглянем в каталог debian/patches, то увидим, что там появился ещё один файл с именем 03_autocomplete.dpatch. Всё, что нам осталось сделать — это добавить его имя (без расширения .dpatch) в файл 00list. Если вы забудете это сделать, то пакет соберётся без наших изменений и ничем не будет отличаться от того, что лежит в репозитории.

Варим! То есть собираем

Находясь всё так же в основном каталоге исходников, выполняем

Он обязательно ругнётся, что удовлетворены не все зависимости для сборки. Устанавливаем всё, что он просит. На совершенно чистой машине для этого потребуется скачать 46.7 МБ архивов, после распаковки которых будет занято 181 МБ на диске. Если что-то из этого у вас уже установлено — то качать придётся меньше. Львиную долю составляют девелоперские библиотеки Qt4 (30.6 МБ и 124 МБ соответственно).

В комментариях ниже хабраюзер arty совершенно справедливо заметил, что зависимости можно установить при помощи

и таким образом не придётся руками перечислять все требуемые пакеты.
После установки всего требуемого запускаем сборку ещё раз:

Теперь всё должно пойти без вопросов.
Если вы всё сделали правильно на предыдущих этапах, то через некоторе время сборка окончится (ругнувшись на отсутствие цифровой подписи, но это можно проигнорировать), и в каталоге уровнем выше появится несколько deb-пакетов. Нас интересует один из них: 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

Как пользоваться патчем для программы

Ни для кого не секрет, что в нашей стране 90% установленных программ на компьютерах не являются лицензионными. Программы уже взломаны, но чтобы их установить требуются некоторые навыки. В статье рассмотрены самые распространенные способы установки пиратских программ. Как пользоваться keygen? Как пользоваться crack? Что такое request code? Как пользоваться patch?

Изучаем содержимое папки с установочным файлом

Открываем папку с установочными файлами программы и изучаем ее содержимое. Возможно, в ней вы найдете папку crack, тогда открываем ее. Вот возможные варианты, что вы можете найти.

  1. Текстовый файл (.txt)
  2. Файл с инструкцией (readme, инструкция, . )
  3. Файл с серийным номером (serial, ключ, . )
  4. Файл-приложение (.exe). Открываем.
  5. В нем генерируется серийный номер (keygen, crack, . )
  6. В нем есть поле Request code и еще одно поле (keygen, crack, . )
  7. В нем нет полей для серийного номера. Есть кнопка Patch, Apply patch или Crack (patch, keygen, crack, . )
  8. В папке нет ничего кроме установочного файла
  9. Поиск решения в интернете

1. Инструкция по установке в текстовом файле

Первое, на что надо обратить внимание, есть ли в этой папке файл «readme.txt» или «прочти меня.txt» (могут быть и другие названия). Очень часто в нем написана инструкция по правильной установке программы. Если файл с инструкцией есть, то, смело, открываем его и следуем инструкции. Если файла нет, то ситуация немного усложняется.

2. Серийный номер в текстовом файле

Для подтверждения прав на программу иногда требуется серийный номер. Имея его, вы сможете установить программу бесплатно.

Серийный номер может потребоваться либо при установке программы, либо при первом запуске уже после установки. Пропустить этот шаг вы не сможете, дальше программа не пойдет, пока вы не введете серийный номер (рис.1).

Пример серийного номера: ADE-R119-F196-k9BA-17CD

В папке с программой (в той же папке что и установочный файл) может находиться файл с серийным номером. Чаще всего он называется «Серийный номер», «Serial number», «Ключ», «key», «crack». Открываем этот файл, копируем серийный номер и вставляем его в нужное место.

3. Как пользоваться keygen

В папке с программой может находиться файл-программа (keygen, crack, . ).

Вот пример такой программы, если ее запустить (рис.2):

Нажимаем на кнопку «Generate» (рис.3)

Копируем серийный номер, вставляем в нужное место и все готово. Продолжаем установку, либо нажимаем "Ок" (возможно "Готово", "далее" . ), если установка уже завершена.

4.Получение доступа при помощи "Request code"

Еще один вариант. Во время установки программы или после запуска установленной программы, на экране появляется окно с регистрацией. В папке с установочным файлом должен быть keygen.exe, crack.exe или что-то еще.
Пример окна регистрации (рис.4):

Иногда нужно выбрать режим регистрации, например, выбрать «ввести серийный номер». На экране появляется окно для ввода серийного номера. (рис.5)

В данном случае:
— Get an activation code – получить код активации
— Enter an activation code – ввести код активации (нужный нам вариант)

Открываем из папки с установкой программы файл keygen.exe (crack.exe, . ) (рис.6).

Теперь нам нужно скопировать "Request code" из окна на рис.4 (рис.5) и вставить в окно на рис.6. Выделяем Request code и нажимаем Cntr+C (горячая клавиша копировать).
Вставляем в последнее окно скопированный код (Cntr+V).

Обратите внимание.
Код скопировался не полностью, а только первая строчка. Вторую строчку кода нужно скопировать отдельно, в окне на рис.6 нужно поставить пробел, скопировать и вставить оставшуюся часть "Request code". Должно получиться так (рис.7):

После этого в программе на рис.7 нажимаем кнопку «Calculate» (иногда называется Generate). Должно получиться так (рис.8):

Копируем "Auth code" из программы рис.7 в окно на рис.5 и получаем так (рис.9):

Нажимаем Next или Ok. Нам должны сообщить, что регистрация прошла успешно. Теперь программой можно пользоваться бесплатно.

Такая ситуация встречается довольно часто. Главное не забывайте, что Request code состоит из двух строчек.

5. Как пользоваться patch

Иногда для бесплатной установки программы нельзя просто сгенерировать серийный номер. В таких случаях используют специальные программы, которые изменяют файлы так, чтобы программа не требовала денег. В папке с установщиком программы должен находиться файл "Patch" (он может называться — patch, keygen, crack, . ). Это и есть программа, которую еще называют патч.

Первое, что мы должны сделать, это установить программу (ту, которую мы хотим сделать бесплатной). После установки открывать программу не надо.

Дальше, надо переписать patch (или другой файл-патч) в папку, в которую мы установили программу. Скорее всего это диск С, папка Program files, папка с название программы (C:/Program files/«название программы»).

Дальше открываем файл patch (или другой файл-патч)

Вот пример файла patch.exe (рис.10):

Чаще всего в этом файле только одна кнопка. В данном случае это кнопка Apply patch. В некоторых случаях она может называться Crack. Нажимаем на эту кнопку и программой можно пользоваться бесплатно.

6. Файлы, для установки программы бесплатно, отсутствуют

Может быть и такое, что программу вы скачали без пиратского «лекарства». То есть, без готовых серийных номеров, кейгенов или патчей. Тогда задача усложняется. Лучше конечно скачивать программы с готовыми «лекарствами». Но что если все-таки такая проблема встала?

Заключение

Возможно совмещение нескольких способов регистрации. Например, в папке с установочным файлом может быть серийный номер в текстовом документе, а также Patch. В таком случае при установке вводите серийный номер, а после установки используете Patch. Но для этого надо знать как пользоваться keygen, crack, patch, серийным номером по отдельности.

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

Если вы нашли ошибку в тексте, то выделите текст и нажмите Cntr+Enter.

По любым вопросам по данной статье пишите в комментариях. Также если вам понравилась статья, напишите это в комментариях.

Как пользоваться keygen, crack, patch

Ни для кого не секрет, что в нашей стране 90% установленных программ на компьютерах не являются лицензионными. Программы уже взломаны, но чтобы их установить требуются некоторые навыки. В статье рассмотрены самые распространенные способы установки пиратских программ. Как пользоваться keygen? Как пользоваться crack? Что такое request code? Как пользоваться patch?

1. Инструкция по установке в текстовом файле

Первое, на что надо обратить внимание, есть ли в этой папке файл «readme.txt» или «прочти меня.txt» (могут быть и другие названия). Очень часто в нем написана инструкция по правильной установке программы. Если файл с инструкцией есть, то, смело, открываем его и следуем инструкции. Если файла нет, то ситуация немного усложняется.

2. Серийный номер в текстовом файле

Для подтверждения прав на программу иногда требуется серийный номер. Имея его, вы сможете установить программу бесплатно.

Серийный номер может потребоваться либо при установке программы, либо при первом запуске уже после установки. Пропустить этот шаг вы не сможете, дальше программа не пойдет, пока вы не введете серийный номер (рис.1).

Пример серийного номера: ADE-R119-F196-k9BA-17CD

В папке с программой (в той же папке что и установочный файл) может находиться файл с серийным номером. Чаще всего он называется «Серийный номер», «Serial number», «Ключ», «key», «crack». Открываем этот файл, копируем серийный номер и вставляем его в нужное место.

  1. Начать установку программы, пока не потребует серийный номер
  2. Открыть текстовый файл, скопировать серийный номер (Cntr+C)
  3. Вставить его в то место, где требуется (Cntr+V)
  4. Все

3. Как пользоваться keygen

В папке с программой может находиться файл-программа (keygen, crack, . ).

Вот пример такой программы, если ее запустить (рис.2):

Нажимаем на кнопку «Generate» (рис.3)

Копируем серийный номер, вставляем в нужное место и все готово. Продолжаем установку, либо нажимаем "Ок" (возможно "Готово", "далее" . ), если установка уже завершена.

  1. Начать установку программы, пока не потребует серийный номер
  2. Открыть файл Keygen
  3. Сгенерировать серийный номер и скопировать (Cntr+С)
  4. Вставить его в то место, где требуется (Cntr+V)
  5. Все

4.Получение доступа при помощи "Request code"

Еще один вариант. Во время установки программы или после запуска установленной программы, на экране появляется окно с регистрацией. В папке с установочным файлом должен быть keygen.exe, crack.exe или что-то еще.
Пример окна регистрации (рис.4):

Иногда нужно выбрать режим регистрации, например, выбрать «ввести серийный номер». На экране появляется окно для ввода серийного номера. (рис.5)

В данном случае:
— Get an activation code – получить код активации
— Enter an activation code – ввести код активации (нужный нам вариант)

Открываем из папки с установкой программы файл keygen.exe (crack.exe, . ) (рис.6).

Теперь нам нужно скопировать "Request code" из окна на рис.4 (рис.5) и вставить в окно на рис.6. Выделяем Request code и нажимаем Cntr+C (горячая клавиша копировать).
Вставляем в последнее окно скопированный код (Cntr+V).

Обратите внимание.
Код скопировался не полностью, а только первая строчка. Вторую строчку кода нужно скопировать отдельно, в окне на рис.6 нужно поставить пробел, скопировать и вставить оставшуюся часть "Request code". Должно получиться так (рис.7):

После этого в программе на рис.7 нажимаем кнопку «Calculate» (иногда называется Generate). Должно получиться так (рис.8):

Копируем "Auth code" из программы рис.7 в окно на рис.5 и получаем так (рис.9):

Нажимаем Next или Ok. Нам должны сообщить, что регистрация прошла успешно. Теперь программой можно пользоваться бесплатно.

Такая ситуация встречается довольно часто. Главное не забывайте, что Request code состоит из двух строчек.

  1. Установить программу
  2. Запустить программу
  3. Выбрать режим ввода серийного номера (Enter …)
  4. Открыть keygen
  5. Скопировать "Request code" из программы в "keygen" (обе строчки)
  6. В "keygen" нажать кнопку сгенерировать
  7. Скопировать код, полученный в "keygen"
  8. Вставить его в требуемое место в программе (Cntr+V)
  9. Нажать готово
  10. Все

5. Как пользоваться patch

Иногда для бесплатной установки программы нельзя просто сгенерировать серийный номер. В таких случаях используют специальные программы, которые изменяют файлы так, чтобы программа не требовала денег. В папке с установщиком программы должен находиться файл "Patch" (он может называться — patch, keygen, crack, . ). Это и есть программа, которую еще называют патч.

Первое, что мы должны сделать, это установить программу (ту, которую мы хотим сделать бесплатной). После установки открывать программу не надо.

Дальше, надо переписать patch (или другой файл-патч) в папку, в которую мы установили программу. Скорее всего это диск С, папка Program files, папка с название программы (C:/Program files/«название программы»).

Дальше открываем файл patch (или другой файл-патч)

Вот пример файла patch.exe (рис.10):

Чаще всего в этом файле только одна кнопка. В данном случае это кнопка Apply patch. В некоторых случаях она может называться Crack. Нажимаем на эту кнопку и программой можно пользоваться бесплатно.

  1. Установить программу
  2. Скопировать Patch.exe в папку, куда установили программу
  3. Открыть Patch.exe
  4. Нажать единственную кнопку в программе "Patch"
  5. Запустить программу
  6. Все

6. Файлы, для установки программы бесплатно, отсутствуют

Может быть и такое, что программу вы скачали без пиратского «лекарства». То есть, без готовых серийных номеров, кейгенов или патчей. Тогда задача усложняется. Лучше конечно скачивать программы с готовыми «лекарствами». Но что если все-таки такая проблема встала?

С патчами мы сталкиваемся не так часто, но и не так редко. В этой статье мы научимся патчить и создавать патчи. Патчить на самом деле легче, чем можно себе представить.

1) Учимся патчить.

Патчить будем на примере уязвимости для FreeBSD (http://www.securitylab.ru/vulnerability/368343.php). Качаем оттуда патч (wget http://security.FreeBSD.org/patches/SA-09:05/telnetd.patch). После этого нужно выяснить, куда же его положить, что бы патч прошёл успешно. Для этого можно вывести на экран первые несколько строк:

Index: contrib/telnet/telnetd/sys_term.c
===================================================================
— contrib/telnet/telnetd/sys_term.c (revision 188667)
+++ contrib/telnet/telnetd/sys_term.c (working copy)
@@ -1271,8 +1271,18 @@

Смотрим внимательно и видим, какой файл он патчит. Поскольку путь начинается с contrib/telnetто можно предполодить, что файл должен находится в папке /usr/src. Копируем его туда и пробуем патчить:

Если после этого у вас на экран вывелось похожее на то, что ниже — значит всё удалось. Обычно стоит прочесть, вывод и удостоверится, что всё прошло succeed:

Hmm. Looks like a new-style context diff to me.
The text leading up to this was:
—————————
|*** ../convert.sh Fri Dec 5 17:00:52 2008
|— convert.sh Sat Apr 11 13:52:43 2009
—————————
Patching file convert.sh using Plan A.
Hunk #1 succeeded at 6.
done

Если вдруг патчу не удаётся найти нужный файл, он выдаёт запрос на указания пути вручную:

Hmm. Looks like a new-style context diff to me.
The text leading up to this was:
—————————
|*** convert1.sh Sat Apr 11 13:40:58 2009
|— convert.sh Fri Dec 5 17:00:52 2008
—————————
File to patch:

после введения пути:

File to patch: ../convert.sh
Patching file ../convert.sh using Plan A.
Reversed (or previously applied) patch detected! Assume -R?
Hunk #1 succeeded at 6.
done

Хочу заметить, что утилита patch имеет так же параметры, которые можно использовать. Например, довольно позным может оказаться ключ -C (—check), который позволяет посмотреть, какие изменения будут произведены с файлом, но не пропатчит.

2) Создание патчей.

— обычный

Создание патчей происходит немного сложнее, чем патчить. Для этого берём 2 версии одного и того же файла, помещаем их в разные директории, называем одинаково. После этого будем пользоваться командой diff для выявления разницы между файлами. Здесь самое главное соблюсти порядок в котором подаются имена файлов. ИСХОДНЫЙ_ФАЙЛ — эталонный файл, ИЗМЕНЁННЫЙ_ФАЙЛ — файл, который содержит изменения.

$diff -u ИСХОДНЫЙ_ФАЙЛ ИЗМЕНЁННЫЙ_ФАЙЛ > file.patch

где -u — означает унифицированный вывод, то есть с —/+++.

После такой операции будет создан файл file.patch, который собственно будет патчем. Файл патча можно так же открыть в текстовом редакторе и подредактировать пути к файлам, если необходимо.

Вот это и всё. Если хотите большего функционала — читайте man к указанным здесь бинарникам.

— через svn

Расскажу на примере коммита . Это исправление не вышло в качестве патча, зато вошло в коммит 269687. Наша идея такова: делаем diff между 2-мя соседними (нашим 269687 и предыдущим 269686) коммитами и накладываем патч:

Установка патчей в Linux – работа с утилитой patch

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

Что такое патч?

Говоря о патчах вкупе с утилитой patch, следует подразумевать, что это касается исключительно текстовых данных. Другими словами, происходит работа с исходными кодами проекта, будь то код C++, PHP, HTML и т. д. Вообще, все самые «суровые» программисты или разработчики в процессе своей совместной работы над проектом обмениваются исключительно отдельными правками, а не пересылают друг другу актуальные версии проектов целиком.

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

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

Синтаксис и основные опции команды patch

Нет ничего удивительного в том, что утилита patch относится к категории ПО, которое обязательно должно быть установлено на любой машине для разработки программ, да и вообще для ведения разработки. Практически любой дистрибутив Linux предоставляет утилиту patch предустановленной по-умолчанию.

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

Здесь originalfile – это файл, который необходимо «пропатчить» до актуального состояния. А patchfile – файл-патч. Сразу возникает вопрос: а откуда берётся этот файл-патч? Ответ: он генерируется другой утилитой — diff, которая находит построчные различия между файлами. Либо же патч может быть составлен вручную, автором, если он знаком с соответствующим форматом. Но это бывает крайне редко, обычно прибегают к помощи diff или её аналогов.
В следующей таблице приведены опции команды patch, которые используются наиболее часто:

<td»>Помещает неудавшиеся (отклонённые) изменения в отдельный файл rejecfile вместо файла .rej по-умолчанию.

Опция Значение
-i patchfile Читает информацию из патч-файла, указываемого параметром patchfile.
-r rejectfile, —reject-file=rejectfile
-N, —forward Когда патч не применяется, то утилита patch обычно пытается определить, выглядит ли ситуация так, как если бы патч уже был применён. Опция -N отключает такое поведение.
-pnum, strip=num Обрезает части пути к файлу, разделяемые символом косой черты до уровня, указанного в параметре num. Например: p0 оставит путь /u/john/src/blurfl/blurfl.cpp неизменным, а p4 обрежет тот же путь до blurfl/blurfl.cpp.
-o outputfile, —output=outputfile Отправляет вывод в указываемый в параметре outputfile файл. Не следует использовать эту опцию, если в качестве outputfile указывается файл, который должен быть пропатчен. Если в качестве outputfile указать символ дефиса «-», то вывод будет направляться в стандартный поток STD_OUT.
-E, —remove-empty-file Удаляет файлы, оказавшиеся пустыми после применения патча. Эта опция имеет смысл, когда используемые патчи имеют не контекстный формат.
—dry-run Печатает результаты применения патча без реальной модификации файлов. Полезно для быстрого и безопасного тестирования патчей.
-R, —reverse Откатывает все изменения (если они возможны), т. е. отменяет установку патча.
-c, —context Интерпретирует файл патча как обычный контекстный формат, генерируемый утилитой diff.
-b, —backup Создаёт резервную копию оригинального файла вместо его удаления.

Применение патчей к отдельным файлам

Прежде, чем начать рассмотрение практических примеров, необходимо сказать несколько слов о той самой утилите, которая и создаёт патчи — diff. Она может генерировать патчи трёх типов — простой, контекстный и контекстный унифицированный. Простой гораздо более компактный по размеру, чем контекстные, но последние гораздо более удобочитаемы и понятны для восприятия пользователем. Для того, чтобы сгенерировать простой патч, для команды diff никаких специальных опций не требуется. А для генерации контекстного или унифицированного контекстного патчей предназначены опции -с и -u соответственно:

Пусть имеется файл с кодом C++ ChildClass.cpp:

И пусть в этот файл было внесено следующее изменение: метод valueSqr() был переименован в calcSqr(). Тогда контекстный патч (файл contextpatch) будет выглядеть следующим образом:

Теперь, чтобы пропатчить старую версию ChildClass.cpp, нужно выполнить команду:

В результате будет получен файл ChildClass_new.cpp с актуальным содержимым.

Работа с проектами

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

Пусть имеется старый проект в каталоге base-project. Внутри него имеются подкаталоги include и src, в которых, в свою очередь находятся файлы с изменениями — ChildClass.h (в каталоге include) и ChildClass.cpp (в каталоге src). Сам изменённый (актуальный) проект был помещён в отдельный каталог new-project. Подготовка патча будет выглядеть следующим образом:

Сгенерированный файл-патч project-patch:

Следует обратить внимание, что в данных примерах указываются относительные пути. Файл-патч будет помещён в текущий активный каталог.
Чтобы применить патч нужно выполнить следующую команду:

Как видно, вместо ключа -i можно использовать символ «<» для перенаправления потока из файла на вход команды patch. Здесь также нужно обратить внимание и понимать, что при выполнении команды patch активным каталогом должен быть каталог уровнем выше, чем каталог проекта, к которому применяется патч, ведь используются относительные пути. Параметр -p0 (см. таблицу из главы «Синтаксис и основные опции команды patch») указывает, что применение патча должно затрагивать весь проект. Если бы этот параметр был бы равен -p1, то патч применялся не выше уровня каталогов include и src. Нередко бывают случаи, когда кроме изменений в содержимом файлов меняется также и содержимое каталогов проекта. Другими словами, добавляются новые или удаляются ранее существовавшие файлы и подкаталоги. Пусть, например, в проект из предыдущего примера в каталог include был добавлен файл Readme.txt с содержанием «This is Readme content.». В этом случае подготовка патча будет выглядеть следующим образом:

Сгенерированный файл-патч project-patch:

Теперь можно пропатчить проект:

Откат патчей

Если по каким-то причинам патч оказался бесполезен и необходимо вернуться к предыдущей версии файлов (проекта), то можно сделать откат изменений, используя опцию -R:

В результате будет удалён файл Readme.txt, который был внесён в проект в примере из предыдущей главы, т. е. фактически откат изменений.
Рекомендуется перед применением патчей проверять, подходят ли они. Для этого используется опция —dry-run:

При возникновении каких-либо ошибок во время применения патча, утилита patch создаёт файлы *.rej, по которым можно восстановить исходную версию файла. Однако, следует учитывать, что восстановление содержимого файлов таким способом — довольно долгое и нудное занятие. Практичнее создавать резервные копии файлов, указывая в команде patch опцию -b:

Заключение

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

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *