что такое пропатчить файл
Установка патчей в Linux – работа с утилитой patch
Практически каждый разработчик программного обеспечения (ПО), программист или верстальщик сталкивается (и довольно часто) с необходимостью модификации некоторой части рабочего проекта или даже нескольких строк кода. Особенно это актуально, когда в разработке участвует несколько человек, которые могут вносить правки в разных частях проекта. Для удобства и автоматизации действий по составлению таких правок используются специализированные утилиты. Одной из таких является утилита patch и о ней более подробно будет рассказано в данной статье.
Что такое патч?
Говоря о патчах вкупе с утилитой patch, следует подразумевать, что это касается исключительно текстовых данных. Другими словами, происходит работа с исходными кодами проекта, будь то код C++, PHP, HTML и т. д. Вообще, все самые «суровые» программисты или разработчики в процессе своей совместной работы над проектом обмениваются исключительно отдельными правками, а не пересылают друг другу актуальные версии проектов целиком.
Сама правка, т. е. текстовые изменения в исходном коде проектов (для одного его файла или сразу для нескольких) и есть патч или «заплатка». Патч, помимо самих изменений кода содержит также и некоторую служебную информацию, необходимую для правильного «наложения заплатки», т. е. для установки патча. Таким образом, патч — это текстовый файл определённого формата, содержащий в себе данные и инструкции для приведения конечного файла (или проекта) к нужному или актуальному виду.
Утилита patch умеет быстро и эффективно распоряжаться данными из файла-патча, используя для этого хранящиеся в нём инструкции. И таким образом выполняет все рутинные действия по редактированию. Пользователю (разработчику) необходимо лишь правильно выполнить соответствующую команду, задав все необходимые аргументы и опции.
Синтаксис и основные опции команды patch
Нет ничего удивительного в том, что утилита patch относится к категории ПО, которое обязательно должно быть установлено на любой машине для разработки программ, да и вообще для ведения разработки. Практически любой дистрибутив Linux предоставляет утилиту patch предустановленной по-умолчанию.
Стоит также отметить, что по своей функциональности, patch довольно сложна и обладает, без преувеличения, просто огромным набором опций. По этой причине в данной статье будут приведены только самые распространённые приёмы при работе с этой утилитой и только сопутствующие им опции команд. Синтаксис команды patch следующий:
Здесь originalfile – это файл, который необходимо «пропатчить» до актуального состояния. А patchfile – файл-патч. Сразу возникает вопрос: а откуда берётся этот файл-патч? Ответ: он генерируется другой утилитой — diff, которая находит построчные различия между файлами. Либо же патч может быть составлен вручную, автором, если он знаком с соответствующим форматом. Но это бывает крайне редко, обычно прибегают к помощи diff или её аналогов.
В следующей таблице приведены опции команды patch, которые используются наиболее часто:
Применение патчей к отдельным файлам
Пусть имеется файл с кодом 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:
Следует обратить внимание, что в данных примерах указываются относительные пути. Файл-патч будет помещён в текущий активный каталог.
Чтобы применить патч нужно выполнить следующую команду:
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Что означает слово «патч» в компьютере и как его использовать
Многим пользователям компьютеров и мобильной техники встречалось слово «патч». Но не все понимают, что это такое и как им пользоваться.
Определение патча
Само слово «Патч» не является русским. Точное понимание можно получить при переводе с английского: patch – это заплатка. А по сути заплатка – попытка прикрыть дыру с помощью имеющихся материалов. Примечательно, что такое определение как нельзя точнее описывает назначение патчей в программном обеспечении. Они выпускаются для улучшения функционирования или для закрытия «дыр».
Начало процесса установки «патча» для Diablo III.
Особенно в плане «закрытия дыр» можно выделить исправления, которые закрывают уязвимости в системе. Собственно, такая уязвимость считается «дырой», а patch – набор команд и инструкций, которые эту самую дыру закроют.
Историческая справка
Слово «заплатка» используется не просто так. В годы, когда передача информации производилась на перфокартах, места с ошибками вырезались физически, а исправленная перфорация вклеивалась на их место. Таким образом установка «заплаток» имела не фигуральное, а реальное значение. Изменять слово со временем не стали, и по сей день обновления и исправления именуются «заплатками».
Виды патчей в компьютере
Естественно, существует несколько характерных разновидностей «заплаток». Зависят они от нескольких факторов, но назвать это полноценной классификацией нельзя. Связано это с тем, что факторы зачастую перекликаются, а «исправления» могут одновременно классифицироваться по разным параметрам:
Вместе с видами стоит упомянуть и выражение – пропатчить файл или программу. Это значит, что целевой файл или программу нужно определенным образом обновить.
Например, русификация также является «заплаткой». И, чтобы русифицировать программу нужно пропатчить ее, т.е. установить патч, который добавит русский язык в приложение.
Функции патчей
Выше, вместе с классификацией уже затронута тема назначения. Также применение заплаток рассматривалось и ранее по тексту. Поэтому вопрос будет рассмотрен перечислением только некоторых моментов:
Перечисленные варианты являются составляющей почти любого «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 и нередко обозревает самые крупные патчи.
пропатчить
Только что установил игру и не могу пропатчить.
Я слышал, что можно как-то патчить образ для игры по инету на пиратских дисках.
Смотреть что такое «пропатчить» в других словарях:
Как пропатчить KDE2 под FreeBSD? — популярный интернет мем, изначально вопрос из цитаты, долгое время бывшей на первом месте в рейтинге «Цитатника Рунета», в базе данных которого эта цитата хранится под номером 42. Содержание 1 Текст цитаты … Википедия
Как пропатчить KDE2 — под FreeBSD? популярный интернет мем, изначально вопрос из цитаты, долгое время бывшей на первом месте в рейтинге «цитатника Рунета» 42. Содержание 1 Текст цитаты 2 Происхождение цитаты 2.1 … Википедия
Как пропатчить KDE2 под FreeBSD — Как пропатчить KDE2 под FreeBSD? популярный интернет мем, изначально вопрос из цитаты, долгое время бывшей на первом месте в рейтинге «цитатника Рунета» 42. Содержание 1 Текст цитаты 2 Происхождение цитаты 2.1 … Википедия
Как пропатчить KDE под FreeBSD — Как пропатчить KDE2 под FreeBSD? популярный интернет мем, изначально вопрос из цитаты, долгое время бывшей на первом месте в рейтинге «цитатника Рунета» 42. Содержание 1 Текст цитаты 2 Происхождение цитаты 2.1 … Википедия
Как пропатчить KDE под FreeBSD? — Как пропатчить KDE2 под FreeBSD? популярный интернет мем, изначально вопрос из цитаты, долгое время бывшей на первом месте в рейтинге «цитатника Рунета» 42. Содержание 1 Текст цитаты 2 Происхождение цитаты 2.1 … Википедия
Ющенко, Виктор Андреевич — Виктор Андреевич Ющенко Віктор Андрійович Ющенко … Википедия
Ющенко — Ющенко, Виктор Андреевич Виктор Андреевич Ющенко Віктор Андрійович Ющенко … Википедия
Teh rei — Интернет мем вошедшее в употребление в середине первого десятилетия XXI века название явления спонтанного распространения некоторой информации или фразы, часто бессмысленной, спонтанно приобретшей популярность в интернет среде посредством… … Википедия
В. Ющенко — Виктор Андреевич Ющенко Віктор Андрійович Ющенко Президент Украины Виктор Ющенко … Википедия
Видеомем — Интернет мем вошедшее в употребление в середине первого десятилетия XXI века название явления спонтанного распространения некоторой информации или фразы, часто бессмысленной, спонтанно приобретшей популярность в интернет среде посредством… … Википедия
Кое-что о том, как можно патчить приложения
Ищем, что патчить
Если тебе повезло и ты поймал программу в процессе ввода серийника на одной из этих API, то, выйдя из дебрей системных библиотек и немного потрассировав код, ты, скорее всего, найдешь место проверки или какой-нибудь другой манипуляции введенных тобой данных. Можно также ловить место регистрации функциями ShowWindow, MessageBoxA, MessageBoxExA, MessageBoxIndirectA и недокументированной MessageBoxTimeoutA, отвечающими за выводы различных окошек с сообщениями. Соответственно, если выдаются сообщения вида “Вы ввели неправильный код” или что-то очень похожее, то, когда вылезешь из системных дебрей, посмотри на код, находящийся выше/раньше вызова этого сообщения, чтобы найти код, критичный для взлома.
Если же программа проверяет, запустили ее с оригинального диска или нет, то, как правило, бывает достаточно брякнуться на API GetDriveTypeA. Эта функция просто проверяет тип заданного диска (в данном случае диска, с которого запущена программа). Если возвращенное значение равно пяти, значит это CD/DVD-привод. После запуска этой функции должны идти разные проверки на соответствие метки диска, наличия какого-нибудь файла и т.п. Их и нужно патчить.
Нашли? Патчим!
Существует несколько методов патчинга. Результаты их применения не отличаются: в любом случае будут модифицированы одни и те же байты и программа перестанет напоминать о регистрации, однако реализация методов различается. Разберемся с каждым.
Прямой патчинг
Сразу же попытаемся отловить процедуру регистрации, поставив бряки на описанные в начале статьи API-функции. Итак, жмем на кнопку Already Paid в NAG’е и видим окно с приглашением ввести регистрационный код.
Итак, анализируя выведенные строки (благо из-за размера exe-файла их там не очень много), я наткнулся на подозрительную:
0040631B PUSH game.0041DAA8 ASCII “radll_HasTheProductBeenPurchased”
Не нужно быть reverse engineer’ом, чтобы, взглянув на инструкцию call esi и на esi = 77E7B332 kernel32.GetProcAddress, сообразить, что из какой-то библиотеки берется адрес функции radll_HasTheProductBeenPurchased и он записывается в некоторую переменную по адресу 0042319C. Если посмотреть на строку Reflexiv.00A70000, можно сделать вывод, что эта функция берется из библиотеки ReflexiveArcade.dll. Ее мы обнаружим в папке игры в директории ReflexiveArcade.
Чтобы отучить игру от вредной привычки просить зарегистрироваться, достаточно пропатчить функцию с длинным названием в найденной библиотеке так, чтобы она все время утверждала, что программа успешно зарегистрирована. Но зачем патчить DLL, если можно пойти более изящным путем: просто записать по адресу 0042319C адрес не radll_HasTheProductBeenPurchased, а адрес своей функции, которая всегда возвращала бы единицу, означающую, что игра зарегистрирована.
Все. Нажмем Cancel для отмены дальнейшего ввода кода. Получена мини-функция из шести байт. Теперь вернемся к месту, где записывался адрес функции radll_HasTheProductBeenPurchased. Для этого выделим в окне регистров EIP, тыкнем по нему правой кнопкой мыши и выберем Origin. Окажемся по адресу 0040631B. В принципе, весь местный код нужно вырезать совсем: нам ни на что не сдался этот GetProcAddress. Поэтому, стоя на адресе 0040631B, нажмем пробел и введем MOV EAX,419900, то есть подставим вместо оригинального адреса функции свой. Остальные команды нам не нужны, поэтому вводим далее инструкции nop до адреса 00406329 включительно.
Нам остается только сохранить все изменения в программе и протестировать ее. Выделяем весь код с 00401000 по 00419FFF, выбираем в контекстном меню Copy to executable->Selection и указываем в появившемся окне файл, куда хотим сохранить пропатченную версию игры. После этого можно закрывать отладчик и пробовать запустить игру. Вуаля! Она прекрасно запустилась и, обращаю на это твое внимание, без всяких приглашений зарегистрироваться. При выходе из игры нас мило благодарят за приобретение.
Кстати, не могу не заметить, что подобным образом ломается любая игра с сайта www.reflexive.net.
Патчинг загрузчиком
Суть метода заключается в следующем: уже после того, как был обнаружен код для патчинга, пишется некоторая специальная утилитка-загрузчик (лоадера), которая запускает программу, ждет, пока она распакуется, и проверяет код на целостность, после чего патчит код. Использование этого метода позволяет, во-первых, обходить разнообразные противные проверки, работающие в начале программы, а во-вторых, уменьшить размер крэка до минимума.
; заголовок окна с сообщением об ошибке
; сообщение об ошибке
; имя файла программы
; записываемый в память процесса байт
write_buffer db 90h
; адрес, по которому будет
check_addr DWORD 401050h
; переменная, в которую производится
; считывание байта процесса
; структура информации о процессе
; структура информации о параметрах
start : ;начало программы
; запускаем нужные нам программы.
;если результат выполнения равен 0,
; то программа не найдена и не запустилась
; информируем об ошибке
; считываем память процесса по
; адресу check_addr в буфер buffer размером в 1 байт
; проверка на успешность считывания
; проверка на распакованность
; программы по этому адресу
;ждем проверку целостности кода
; записываем 1 байт write_buffer
; по адресу check_addr
; продолжаем выполнение программы
; закрываем хэндл процесса и
; завершаем свой процесс
= «text-align: justify;» > end start
Тут, я думаю, тебе все понятно. Просто запускаем процесс с помощью CreateProcess и модифицируем после некоторой паузы и нескольких проверок код программы, ответственный за регистрацию с помощью WriteProcessMemory. Кстати, по такому же принципу пишутся трейнеры к играм.
Inline-патчинг
На дорожку
Патч (программный)
Запла́тка, или па́тч (англ. patch /pætʃ/ — заплатка) — автоматизированное отдельно поставляемое программное средство, используемое для устранения проблем в программном обеспечении или изменения его функционала, а также сам процесс установки патча («пропатчивание»). Исправление может применяться к уже установленной программе, либо к её исходным кодам. Сюда входит исправление ошибок, изменение внешнего вида, улучшение эргономичности или производительности программ, а также любые другие изменения, которые разработчик пожелал сделать.
Размер патчей может варьироваться от нескольких килобайт до сотен мегабайт. В частности, очень большими патчи могут быть при изменении или замене непрограммных данных, таких как файлы с графикой и звуком. Такие ситуации часто возникают при обновлении компьютерных игр. Тем не менее, большой размер может быть вызван и многочисленностью вносимых изменений. При этом слова «патч», «заплатка» обычно используются для обозначения небольших исправлений, большие же патчи, серьёзно меняющие или обновляющие программу, часто называются «service pack» или «software updates».
По сравнению с первоначальной установкой программы применение патчей, как правило, занимает меньше времени, так как установливаются не все файлы программы, а только некоторая их часть (за исключением случаев глобального обновления программы или если обновление происходит сразу через несколько версий). Патчи, загружаемые из интернета, могут устанавливаться несколько дольше, поскольку помимо установки предварительно требуют время для загрузки на компьютер пользователя.
Если было выпущено несколько патчей, то разработчик может (обычно после наиболее полных изменений) сделать кумулятивный патч (лат. cumulatio – «увеличение, скопление»). Такой патч включает в себя изменения, находящиеся во всех предыдущих патчах, и вносит их в программу во время своей установки вместе с новыми. Это позволяет сэкономить время на поиск, загрузку и установку всех прежних версий патча.
Бывает, что сами патчи становятся причиной новых ошибок в работе. Поэтому опытные пользователи предпочитают выждать некоторое время, пока не появятся первые отзывы о результатах использования новой версии пропатченного ПО, и уже потом решают, стоит ли устанавливать данный патч. Особенно критичен данный момент для системных администраторов и при установке больших обновлений операционной системы.
Содержание
История
Позже для распространения патчей стали использоваться магнитные ленты. Когда же были изобретены дискеты, патчи стали отправляться на дискетах в конвертах по почте. Сегодня, в эру повсеместного интернета, конечные пользователи скачивают патчи с сайтов разработчиков.
Виды патчей
Разработчики программного обеспечения публикуют патчи в различной форме.
Применение
Коротко выполняемые патчами задачи можно описать следующими действиями:
Операционные системы
В случае обновления операционных систем и серверного программного обеспечения патчи играют важную роль в поддержании безопасности и устранении дыр в защите. Чтобы облегчить установку таких обновлений, операционные системы часто поддерживают автоматические или полуавтоматические механизмы обновления. При этом осторожные пользователи (в частности, системные администраторы) обычно отключают автоустановку патчей, пока не убедятся в стабильной работе исправленных версий на чужих примерах. В случае больших или очень важных патчей разработчики часто сначала сами проводят предварительное тестирование (бета-тестирование).
Программное обеспечение
В разработке программного обеспечения патчи иногда требуются для устранения проблем с часто используемыми или важными библиотеками и частями исходного кода. Такое обычно происходит в широкомасштабных проектах, и значительно реже — в малых.
В open source-проектах патчи, исправляющие частные проблемы или добавляющие некоторую функциональность, такую как поддержка других языков, обычно отправляются авторам или публикуются в сети. Например, на ранних стадиях разработки ядра операционной системы — Линус Торвальдс, его автор, получал тысячи писем с патчами к его версии от множества программистов.
Сервер веб-мастерами для добавления функциональности к NCSA HTTPd. По легенде, отсюда и возникло название — означающее, что это есть по сути коллекция патчей: «a patchy server».
Все изменения кода Firefox и других продуктов Mozilla Foundation существуют в виде патчей, которые учитываются с помощью «багов» в системе
Компьютерные игры
В отличие от обычных приложений, в которых исправляются обнаруженные ошибки и недочеты и вводятся новые функции, для компьютерных игр патчи играют особую роль. В них они могут быть предназначены для изменения правил или алгоритмов игры. Необходимость в выпуске таких патчей возникает порой при обнаружении возможности жульничества игроков.
Особенно важны такого рода патчи в многопользовательских играх, где превосходство за счет недоработок игры одного игрока над другими имеет более серьезные последствия, чем при одиночной игре против компьютерных соперников. Чтобы сделать невозможным дальнейшее распространение найденной возможности читерства, исправленной с выходом патча, а также избежать конфликта версий, многопользовательские игры часто не допускают к игре игрока, использующего версию игры, отличную от официальной.
Другим примером является защита от копирования. Патч может параллельно внести изменения в систему защиты игры, что может выражаться, например, в невозможности устанавливать последующие патчи и обновления, если установлена «пиратская» версия игры.
Патч встроенного ПО
Во многих устройствах программное обеспечение находится в памяти самого устройства в виде т.н. прошивки, которая включает в себя сразу и операционную систему, управляющую работой устройства, и собственно набор программ, обеспечивающих выполнение тех или иных его функций. Поэтому если разработчиком предусмотрена возможность замены его прошивки (перепрошивка), то применение патча на программное обеспечение устройства чаще всего представляет собой полную замену целиком всей прошивки на более новую версию. Обычно такой патч состоит из файла, содержащего обновленный программный код в двоичном виде, и специальной программы, записывающей его в память устройства вместо прежней версии. Пример такого вида патчей — перепрошивка БИОСа материнской платы компьютера или современного мобильного телефона, подключенного к компьютеру.
Поскольку по сути перезаписывается не какая-то часть программ или функций, а вся операционная система устройства, любая неожиданная ошибка или вмешательство в процесс перепрошивки (например, выключение питания) могут помешать корректно записать ее до конца, что в свою очередь чаще всего приводит к полной неработоспособности устройства.
Разработка патчей
Автоматизация установки
Зачастую современные программы обновлений могут управлять патчами. Автоматизация всего процесса упрощает задачу конечного пользователя — ему достаточно запустить программу, а та уже решит, нужно ли ставить патчи, и в каком порядке. Бывает и так, что программа скачивает обновления из интернета без участия пользователя. Такой способ часто применяется в поддержке серверного программного обеспечения и операционных систем. В ситуации, когда администратору приходится следить за несколькими компьютерами такой подход помогает поддерживать надёжность системы в целом. Обычно таким способом происходит установка обновлений безопасности.
Вспомогательные утилиты
Чтобы все изменения, совершаемые патчем, происходили автоматически без участия пользователя существуют специальные утилиты, с помощью которых создают самоустанавливающиеся патчи. В них записывается информация, какие файлы и должны быть заменены, или какие программы запущены после распаковки, если должны быть изменено содержимое файлов. Чаще всего полученный таким образом патч представляет собой самораспаковывающийся архив, содержащий обновленные файлы целиком.
Интересные факты
Microsoft Flight Simulator выпустила специальный патч после атак 11 сентября 2001-го на World Trade Center в Нью-Йорке. Из карты города были изъяты башни торгового центра. Это редкий пример патча, выпущенного из уважения к чувствам людей, а не для исправления ошибки в программе или усиления защиты от копирования.