Что такое патчим файл. Материал из справочник исследователя программ

Патч (англ. patch - "заплатка")

Патч это многогранное понятие:

1. Процесс изменения байт в исполняемых EXE файлах. 2. Программа, реализующая пункт 1. 3. Еще патчат реестр , любые файлы с данными, значения в памяти.

Существует такая разновидность, как инлайн-патч . Лоадер в общем случае тоже является вариацией патча.

Вопросы и ответы

Как пропатчить исполняемый файл программы?

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

Мне нужно изменить работу программы для своих целей. Я хочу вставить на место инструкций, которые хочу изменить, свои инструкции. Но "не хватает места", т.е. мои инструкции занимают больше места, чем те, которые нужно заменить. Что делать?

В этом случае составляем нужный нам код (процедуру). В конце кода добавляем команду ret . Создаем новую секцию (с помощью LordPE или ProcDump) и помещаем наш код в эту секцию. В начале инструкций, которые нам надо изменить, ставим вызов добавленной процедуры (call), оставшиеся ненужные инструкции, до начала нужных, забиваем командами "nop ". Все. Только нужно будет быть внимательным с адресами, их надо будет смотреть в отладчике . Еще можно не добавлять новую секцию, а написать свой

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

Ищем, что патчить

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

Первый, самый простой, распространенный и довольно эффективный - нахождение в коде строк, имеющих какое-либо отношение к регистрации. Благо сообщения об успешной/неуспешной активации программы, о количестве оставшихся до окончания срока функционирования дней, содержимое NAG-окна, записи в About и т.п. - все хранится в программе и, как правило, в виде plain-текста, поэтому их поиск в программе будет не очень сложен. После успешного нахождения строки остается только поймать в программе код, который использует ее. Это можно сделать либо с помощью любого дизассемблера, либо с помощью OllyDbg. Обычно такие строчки встречаются в коде в виде инструкций наподобие “mov eax, prog.004FB613″ или “push prog.004FB613″, где по адресу 004FB613 как раз и лежит искомая строка. Далее путем статического или динамического метода (визуальный метод или метод трассировки) определяется, является ли найденный код важным для взлома.

Второй прием, кстати, не менее эффективный - останов на API-функциях, вызываемых в критичных для взлома участках. Для его применения нужны довольно глубокие познания в области набора API-функций для конкретной версии Windows, поэтому перед употреблением советую хорошенько изучить MSDN последней версии. Для того чтобы воспользоваться этим приемом, нужно хотя бы примерно представлять себе, что делает программа, пытаясь стрясти с тебя некоторую сумму денег за регистрацию. Как правило, она просит ввести что-нибудь вроде имени/рег. кода/e-mail. В этом случае нужно ловить место регистрации по API-функциям GetDlgItem, GetDlgItemTextA, GetWindowTextA.

Если тебе повезло и ты поймал программу в процессе ввода серийника на одной из этих API, то, выйдя из дебрей системных библиотек и немного потрассировав код, ты, скорее всего, найдешь место проверки или какой-нибудь другой манипуляции введенных тобой данных. Можно также ловить место регистрации функциями ShowWindow, MessageBoxA, MessageBoxExA, MessageBoxIndirectA и недокументированной MessageBoxTimeoutA, отвечающими за выводы различных окошек с сообщениями. Соответственно, если выдаются сообщения вида “Вы ввели неправильный код” или что-то очень похожее, то, когда вылезешь из системных дебрей, посмотри на код, находящийся выше/раньше вызова этого сообщения, чтобы найти код, критичный для взлома.

Также программа может издавать характерный звук при выводе ошибки - тут можно попробовать отловить код на MessageBeep. В случае неудачи в первых двух случаях можно попробовать поискать места чтения/записи значений из реестра, так как программисты порой очень любят хранить там регистрационные данные своей программы. Здесь тебе помогут API RegOpenKeyA, RegQueryValueA, RegQueryValueExA, RegCreateKeyA, RegSetValueA и RegSetValueExA. При анализе данных, передаваемых в реестр, всегда есть вероятность, что ты наткнешься на критичный код. Данный способ немного муторный, так как программы обычно считывают множество параметров реестра, и чем больше программа, тем больше нагоняется трафика, который нужно анализировать. Кстати, иногда программисты записывают регистрационные данные в файл. Здесь все немного проще. Существует замечательная API CreateFileA, вызываемая всегда - как при открытии какого-либо файла, так и при его создании. Аналогично, анализируя параметры вызываемой CreateFileA, можно нарваться на место для будущей модификации.

Если же программа проверяет, запустили ее с оригинального диска или нет, то, как правило, бывает достаточно брякнуться на API GetDriveTypeA. Эта функция просто проверяет тип заданного диска (в данном случае диска, с которого запущена программа). Если возвращенное значение равно пяти, значит это CD/DVD-привод. После запуска этой функции должны идти разные проверки на соответствие метки диска, наличия какого-нибудь файла и т.п. Их и нужно патчить.

Естественно, это не все приемы поиска важного для взломщика кода - лишь основные. Подробности в этом номере журнала.

Нашли? Патчим!

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

Прямой патчинг

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

  1. распаковать программу (это, думаю, не вызовет трудностей);
  2. найти код, ответственный за регистрацию;
  3. прямо в распакованной программе модифицировать найденный код определенным образом.

В итоге распакованная и модифицированная программа - это, по сути, и есть крэк. Вернее, программа, просто взломанная прямым патчингом. Как видишь, все зло сведено к минимуму, сделать такой крэк очень просто даже без особых затрат времени. Чтобы прояснить, как искать критичный код и как патчить его, разберемся со всем этим делом, как говорится, на живом примере. Исследуем и взломаем реальную программу - игру HyperBalloid Complete Edition 1.20, которую можно скачать с сайта www.reflexive.net . В процессе патчинга будем пользоваться только отладчиком OllyDbg. Запускаем программу и видим NAG-окно с любезным предложением зарегистрироваться и указанием количества минут, оставшихся от trial-периода.

Сразу же попытаемся отловить процедуру регистрации, поставив бряки на описанные в начале статьи API-функции. Итак, жмем на кнопку Already Paid в NAG’е и видим окно с приглашением ввести регистрационный код.

Переходим в отладчик и ставим точки останова сразу на все указанные API: GetDlgItem, GetDlgItemTextA, GetWindowTextA, MessageBoxA, MessageBoxExA, MessageBoxIndirectA, MessageBoxTimeoutA, ShowWindow, вводя bp <имя_API_функции> в поле Command. Введем какой-нибудь, неважно какой, серийник, нажмем Submit, и, как это ни странно, увидим сообщение - якобы неправильно набран номер;).

Отсюда сделаем вывод, что, если мы не остановились ни на одной из функций, то в игре используются иные методы взятия введенной информации и вывода результата. Что ж, не будем отчаиваться. Перезапустим программу и пойдем по первому указанному мной методу - посмотрим наличие строк в коде, имеющих отношение к регистрации. Нажав правой кнопкой мыши по любому участку кода и выбрав пункт Search for->All referenced text strings, ты сможешь увидеть окно со списком всех строк, встречающихся в программе, и с информацией о коде, который использует эти строки. Честно говоря, найти строки из NAG-скрина вряд ли повезет. При размере exe-файла 144 Кб вряд ли в нем будут находиться процедура регистрации и сам код игры. Скорее всего, в этом случае весь код вынесен из основного модуля приложения в динамически подгружаемые библиотеки.

Итак, анализируя выведенные строки (благо из-за размера exe-файла их там не очень много), я наткнулся на подозрительную:

0040631B PUSH game.0041DAA8 ASCII “radll_HasTheProductBeenPurchased”

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

Не нужно быть reverse engineer’ом, чтобы, взглянув на инструкцию call esi и на esi = 77E7B332 kernel32.GetProcAddress, сообразить, что из какой-то библиотеки берется адрес функции radll_HasTheProductBeenPurchased и он записывается в некоторую переменную по адресу 0042319C. Если посмотреть на строку Reflexiv.00A70000, можно сделать вывод, что эта функция берется из библиотеки ReflexiveArcade.dll. Ее мы обнаружим в папке игры в директории ReflexiveArcade.

Чтобы отучить игру от вредной привычки просить зарегистрироваться, достаточно пропатчить функцию с длинным названием в найденной библиотеке так, чтобы она все время утверждала, что программа успешно зарегистрирована. Но зачем патчить DLL, если можно пойти более изящным путем: просто записать по адресу 0042319C адрес не radll_HasTheProductBeenPurchased, а адрес своей функции, которая всегда возвращала бы единицу, означающую, что игра зарегистрирована.

Первое, чего нам в этом случае не хватает - это своя функция. Нет ничего проще! Берем бегунок прокрутки и прокручиваем код программы в самый низ, пока не встретим там пустое место для записи нашего кода.

Находим его довольно быстро - нули начинаются с адреса 004198AE. Чтобы было проще запомнить, спустимся еще чуть ниже до адреса, кратного 100h - 00419900, который и сделаем адресом нашей функции. Выделим стоку 00419900 и нажмем пробел для ввода кода по этому адресу. Вобьем в появившемся окошке mov eax, 1 и нажмем . В регистре eax, как ты и сам знаешь, обычно содержится значение, возвращаемое функцией. В данном случае этим значением может быть только 1. Так как мы пишем функцию, а не просто кусок кода, мы должны позаботиться о том, чтобы код вернулся на то место, откуда был запущен. Поэтому нужна еще одна инструкция - ret. Вбиваем ее и жмем .

Все. Нажмем Cancel для отмены дальнейшего ввода кода. Получена мини-функция из шести байт. Теперь вернемся к месту, где записывался адрес функции radll_HasTheProductBeenPurchased. Для этого выделим в окне регистров EIP, тыкнем по нему правой кнопкой мыши и выберем Origin. Окажемся по адресу 0040631B. В принципе, весь местный код нужно вырезать совсем: нам ни на что не сдался этот GetProcAddress. Поэтому, стоя на адресе 0040631B, нажмем пробел и введем MOV EAX,419900, то есть подставим вместо оригинального адреса функции свой. Остальные команды нам не нужны, поэтому вводим далее инструкции nop до адреса 00406329 включительно.

Нам остается только сохранить все изменения в программе и протестировать ее. Выделяем весь код с 00401000 по 00419FFF, выбираем в контекстном меню Copy to executable->Selection и указываем в появившемся окне файл, куда хотим сохранить пропатченную версию игры. После этого можно закрывать отладчик и пробовать запустить игру. Вуаля! Она прекрасно запустилась и, обращаю на это твое внимание, без всяких приглашений зарегистрироваться. При выходе из игры нас мило благодарят за приобретение.

“Нет, нет, что вы! Вам спасибо”. Сделаем некоторые выводы. Мало того, что лентяи программисты из Reflexive не делают дополнительных проверок, так они еще и называют экспортируемые (!) функции из dll как radll_HasTheProductBeenPurchased. Крайне безответственно с их стороны. Ну что ж, их лень - наши сэкономленные деньги.

Кстати, не могу не заметить, что подобным образом ломается любая игра с сайта www.reflexive.net.

Патчинг загрузчиком

Малораспространенный и не самый авторитетный метод, но он реализуется довольно просто. Используется, как правило, для программ, запакованных чем-нибудь хитрым, например протектором. Нет смысла писать загрузчики для программ, не запакованных вообще, а для запакованных пакерами проще сделать прямой патчинг, то есть распаковать, или, на худой конец - inline-патч.

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

Но написание лоадера - занятие довольно неблагодарное. Мало того, что тут требуются знания работы ОС, основы управления памятью и умение программировать, так еще и результат может работать совершенно как ему заблагорассудится (глючить). Это связано с тем, что лоадер может модифицировать байты программы, когда протектор еще не распаковал основной код, что очень критично для стабильной работы программы. Скорее всего, программа просто упадет с критичной ошибкой. В связи с этим не советую увлекаться лоадерами. Правда, иногда деваться некуда, и проще написать загрузчик, чем возиться с другими методами. Есть несколько способов реализации лоадеров, я рассмотрю самый простой и распространенный.

Data

; заголовок окна с сообщением об ошибке

Msg db "Fatal Error" , 0

; сообщение об ошибке

Error db "Program not found" , 0

; имя файла программы

Program db "victim.exe" , 0

; записываемый в память процесса байт

Write_buffer db 90h

; адрес, по которому будет

; осуществляться считывание/запись

Check_addr DWORD 401050h

Data ?

; переменная, в которую производится

; считывание байта процесса

Buffer dw ?

; структура информации о процессе

Process_info PROCESS_INFORMATION <>

; структура информации о параметрах

; создающегося процесса

Startup_info STARTUPINFO <>

Code

start : ;начало программы

; запускаем нужные нам программы.

invoke CreateProcess, addr program, NULL , NULL , NULL , FALSE ,

CREATE_NEW_CONSOLE OR NORMAL_PRIORITY_CLASS, NULL , NULL , addr startup_info,

addr process_info

;если результат выполнения равен 0,

; то программа не найдена и не запустилась

If eax == 0

; информируем об ошибке

invoke MessageBox , NULL , addr Error , addr Msg, MB_OK

; и выходим

invoke ExitProcess , 0

Endif

; главный цикл

While true

; считываем память процесса по

; адресу check_addr в буфер buffer размером в 1 байт

invoke ReadProcessMemory, process_info.hProcess, check_addr, addr buffer,

1 , NULL

; проверка на успешность считывания

If eax != 0

; проверка на распакованность

; программы по этому адресу

If bufr != 00h

;ждем проверку целостности кода

invoke Sleep , 300

; приостанавливаем процесс

invoke SuspendThread, addr process_info.hThread

; записываем 1 байт write_buffer

; по адресу check_addr

invoke WriteProcessMemory, process_info.hProcess, check_addr, addr

Write_buffer, 1 , NULL

; продолжаем выполнение программы

invoke ResumeThread, addr process_info.hThread

; закрываем хэндл процесса и

; завершаем свой процесс

invoke CloseHandle, process_info.hThread

invoke ExitProcess , 0

Endif

Endif

Endw

; конец кода

end start

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

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

Inline-патчинг

На дорожку

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

На этом я завершаю свой опус. Если возникли вопросы, пиши - постараюсь помочь. Удачного патчинга!

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

    Требуемые знания
    Советую изучить до

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

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

  1. Текстовый файл (.txt)
  2. Файл-приложение (.exe). Открываем.
  3. В папке нет ничего кроме установочного файла

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

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

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

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

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


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


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

Последовательность действий:

  • Открыть текстовый файл, скопировать серийный номер (Cntr+C)
  • 3. Как пользоваться keygen

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

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



    рис.2 Генератор серийных номеров

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


    рис.3 Генератор серийных номеров с ключом

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

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

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

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


    рис.4 Начало регистрации с "Request code"

    Иногда нужно выбрать режим регистрации, например, выбрать «ввести серийный номер». На экране появляется окно для ввода серийного номера. (рис.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 Генератор после вставления "Request code"

    После этого в программе на рис.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. Нажать готово

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

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


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


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


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

    рис.10 Программа-патч

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

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

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

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

      Последовательность действий:
    1. Устанавливаем программу
    2. Узнаем полную версию программы. (Например, Daemon Tools Lite 4.35.6)
      Чаще всего в названии установочного файла присутствует полное название. Если программа уже установлена, то в пункте меню «Справка» есть строка «О программе». Там можно тоже узнать полную версию программы. Если не получилось найти полное название, вводите в поиск неполное.
    3. Если при установке или после требует серийный номер, то в поиске, например yandex.ru, вводим: серийный номер для «полное название программы» Если требуются другие виды регистрации, то в строке поиска, например yandex.ru, вводим: crack для «полное название программы»
    4. Перебираем всевозможные ссылки до тех пор, пока не скачаем подходящее лекарство или серийный номер

    Заключение

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


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


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


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

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

    В качестве синонима может использоваться термин "обновление" (англ. update ). Однако под словом "патч" чаще понимают исправление каких-то ошибок, в то время как под обновлением - улучшение функционала и добавление новых возможностей.

    Размер патчей может варьироваться от нескольких килобайт до сотен мегабайт . В частности, очень большими патчи могут быть при изменении или замене непрограммных данных, таких как файлы с графикой и звуком. Такие ситуации часто возникают при обновлении компьютерных игр . Тем не менее, большой размер может быть вызван и многочисленностью вносимых изменений. При этом слова «патч», «заплатка» обычно используются для обозначения небольших исправлений, большие же патчи, серьёзно меняющие или обновляющие программу, часто называются «service pack» или «software updates» .

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

    Если было выпущено несколько патчей, то разработчик может (обычно после наиболее полных изменений) сделать кумулятивный патч (лат. cumulatio – "увеличение, скопление"). Такой патч включает в себя изменения, находящиеся во всех предыдущих патчах, и вносит их в программу во время своей установки вместе с новыми. Это позволяет сэкономить время на поиск, загрузку и установку всех прежних версий патча.

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

    История

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

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

    Виды патчей

    Разработчики программного обеспечения публикуют патчи в различной форме.

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

    Применение

    Коротко выполняемые патчами задачи можно описать следующими действиями:

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

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

    Программное обеспечение

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

    Патч встроенного ПО

    Разработка патчей

    Автоматизация установки

    Зачастую современные программы обновлений могут управлять патчами. Автоматизация всего процесса упрощает задачу конечного пользователя - ему достаточно запустить программу, а та уже решит, нужно ли ставить патчи, и в каком порядке. Бывает и так, что программа скачивает обновления из интернета без участия пользователя. Такой способ часто применяется в поддержке серверного программного обеспечения и операционных систем. В ситуации, когда администратору приходится следить за несколькими компьютерами такой подход помогает поддерживать надёжность системы в целом. Обычно таким способом происходит установка обновлений безопасности.

    Вспомогательные утилиты

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

    Подробнее см. в статье Самораспаковывающийся архив .

    Microsoft Flight Simulator выпустила специальный патч после

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

    FreeBSD (). Качаем оттуда патч (

    contrib/telnet /usr/src

    succeed :

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

    Хочу заметить, что утилита patch -C (check)

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

    обычный

    diff ИСХОДНЫЙ_ФАЙЛ эталонный файл, ИЗМЕНЁННЫЙ_ФАЙЛ

    file.patch

    man

    через svn

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

    Файлы, которые добавлялись или изменялись в процессе создания порта, могут быть выявлены программой diff(1), а результат работы этой программы может быть в дальнейшем передан программе patch(1). Такое действие с обычным файлом подразумевает сохранение копии файла с первоначальным содержимым перед внесением каких-либо изменений.

    Патчи сохраняются в виде файлов с именем, где обозначает путь к файлу, к которому применяется патч, такой как или.

    После того как файл был изменён, используется diff(1) для получения разницы между первоначальной и изменённой версиями. Параметр указывает diff(1) выводить разницу в > формате, который также является предпочтительным.

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

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

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

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

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

    Использование параметра рекурсии () с командой diff(1) для генерации патчей — это хорошо, но всё же, пожалуйста, смотрите на получающиеся патчи, чтобы убедиться в отсутствии ненужного мусора. В частности, diff-разниц между двумя резервными копиями файлов, файлы, когда как порт использует или GNU-версию программы, и так далее, не нужны, и должны быть удалены. Если было необходимо отредактировать файл и запустить для перегенерации, не нужно включать файлы diff для (они частенько вырастают до нескольких тысяч строк!).

    Что такое Lucky Patcher и как им пользоваться

    Вместо этого задайте и включите diff-файл для.

    Старайтесь минимизировать в патчах объём нефункциональных изменений с пустыми символами. В мире Открытого Исходного Кода является распространенным совместное использование проектами больших объемов кодовой базы, но с различными стилями и правилами отступов. При копировании работающей функциональной части из одного проекта для исправления похожей области в другом, будьте аккуратны, пожалуйста: получаемый однострочный патч может указаться полон нефункциональных изменений. Это не только увеличивает размер репозитория Subversion, но также усложняет поиск того, что конкретно вызвало проблему и что вообще поменялось.

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

    Простые перемещения могут быть выполнены непосредственно из порта с использованием sed(1) в режиме in-place. Это удобно, когда при изменении используется значение переменной:

    post-patch: @${REINPLACE_CMD} -e ‘s|for Linux|for FreeBSD|g’ ${WRKSRC}/README

    Довольно часто в исходных файлах портируемого программного обеспечения используется конвенция CR/LF. Это может стать причиной проблем с дальнейшей упаковкой, предупреждениями компилятора или выполнением скриптов (таких как). Для быстрого преобразования всех файлов из CR/LF просто в LF добавьте в порта эту запись:

    Может быть задан точный список преобразуемых файлов:

    USES= dos2unix DOS2UNIX_FILES= util.c util.h

    Используйте, чтобы преобразовать группу файлов в разных подкаталогах. Его параметром является регулярное выражение, совместимое с find(1). Подробнее о формате в re_format(7). Такой вариант удобен для преобразования всех файлов заданного расширения. Для примера, преобразуем все исходные файлы, не затрагивая двоичные файлы:

    USES= dos2unix DOS2UNIX_REGEX= .*\.(|cpp)

    Другим вариантом является использование, который вызывает для каждого из перечисленных в нём элементов.

    USES= dos2unix DOS2UNIX_GLOB= *.c *.cpp *.h

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

    По вопросам, связанным с этой документацией, пишите в рассылку .

    Как использовать патчи для глаз

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

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

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

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

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

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

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

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

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

    обычный

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

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

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

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

    через svn

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

    Компьютерные программы нередко дают сбои, в результате которых выполнение возложенных на приложения операций становится невозможным. Это мешает работе пользователя, отнимает его время. У часто возникающей ошибки в какой-либо программе причина возникновения может быть такой, что эту самую ошибку встречают и многие другие пользователи. Если программа относится к категории свободного ПО, то неисправность могут находить сами разбирающиеся в программировании пользователи или разработчики. Если приложение закрытое, проприетарное, то поиском причины неисправности занимается исключительно разработчик. В случае обнаружения пишется patch-программа. Далее будет рассмотрено, что такое патч и для чего он нужен.

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

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

    Как запустить патч

    В некоторых UNIX-подобных операционных системах, в которых инсталляция большинства программ происходит через специальную утилиту, возможна проверка на наличие обновлений для всех приложений сразу. Если в репозиториях обнаруживаются патчи, пользователю предлагается установить их. Некоторые заплатки ставятся автоматически.

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

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

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

    Таким образом, лучше понять, что такое патч можно, представив его как заплатку для «дыры» в программе. Закрывая уязвимость, можно повысить работоспособность приложения, обеспечить ему стабильную и безопасную работу.

    Также статьи на сайте chajnikam.ru на различные темы:
    Для чего нужны плагины?
    Для чего нужны макросы?
    Чем ультрабук отличается от нетбука?
    Капча, что это такое?

    КАК пропатчить, обновить ядро???

    Дата: 07.05.2006 11:44 Добрый день уважаемые, подскажите как можно пропатчить ядро? напишите поподробнее, а то у меня нет совсем в этом опыта(. Дистрибутив aspserver4. ядро 2.16.9(хм. вроде не ошибаюсь). У меня не работает команда make menuconfig, хотя make config работает(что делать? Буду очень признателен за помощь…

    P.S. с этой версией ядра у меня не видится рейд контроллер(promise FT TX2300), хотя вот ставил LinuxXP (это не реклама) и у меня все прекрасно встало и увидеся мой raid(так что я сделал вывод что надо обновить ядро и/или включить поддержку в ядре. ОДИН БОЛЬШОЙ ВОПРОС…. как? Re: КАК пропатчить, обновить ядро???08.05.2006 03:00 - Bircoph

    > Добрый день уважаемые, подскажите как можно пропатчить ядро?
    > напишите поподробнее

    > напишите поподробнее, а то у меня нет совсем в этом опыта


    кнопочку "поиск" видели? Re: КАК пропатчить, обновить ядро???09.05.2006 16:41 - Klon8321 Bircoph писал(а):

    > 1) При чём тут аппаратное обеспечение?!

    как понять причем??? при том

    >В FAQ есть куча ссылок, и на форумах не раз писали. Вы
    кнопочку "поиск" видели?

    Видели… а сами не пробовали почитать? если бы я знал как это делать наверное сам бы сделал а если обращаюсь за помощью то наверное надо помочь… а лень писать, зачем тогда вообще отвечать? Или ссылку кинуть на нормальную статью… Re: КАК пропатчить, обновить ядро???09.05.2006 16:44 - Klon8321 Vascom писал(а):

    а там бредовые вопросы типа как включить музыку… все равно что кинуть ссылку на собрание сочинений Толстого, ищите сами, вроде как помог… На самом деле так не делается, знаете, если помогаете то помогаете, нет, так зачем кидать ссылки на непонятные факи(? Re: КАК пропатчить, обновить ядро???09.05.2006 18:15 - Woodoo Klon8321 писал(а):

    > вроде как помог… На самом деле так не делается, знаете, если
    > помогаете то помогаете, нет, так зачем кидать ссылки на
    > непонятные факи(?

    ASPLinuxServer IV — специфичный дистрибутив, он есть далеко не у каждого посетителя этих форумов.
    Обратитесь со своим вопросом в [email protected].
    Очень возможно, что у них есть "готовое решение" и патчить ядро просто… не нужно. Re: КАК пропатчить, обновить ядро???10.05.2006 06:59 - Neonovice Klon8321 писал(а):
    > У
    > меня не работает команда make menuconfig, хотя make config
    > работает(что делать? Буду очень признателен за помощь…

    Ставить пакеты ncurses и ncurses-devel.

    > P.S. с этой версией ядра у меня не видится рейд
    > контроллер(promise FT TX2300), хотя вот ставил LinuxXP (это не
    > реклама) и у меня все прекрасно встало и увидеся мой raid(так
    > что я сделал вывод что надо обновить ядро и/или включить
    > поддержку в ядре. ОДИН БОЛЬШОЙ ВОПРОС…. как?

    Один большой ответ:
    читать "непонятный" ,
    пока он не станет "понятным".
    Насчет RAID ничего конкретно не могу посоветовать. Ищите здесь же на форуме, а также на www.asplinux.net, и не пренебрегайте. Ваши вопросы обсосаны неоднократно. Re: КАК пропатчить, обновить ядро???10.05.2006 09:24 - Vascom Klon8321 писал(а):

    >а там бредовые вопросы типа как включить музыку… все равно что кинуть ссылку на собрание сочинений Толстого, ищите сами, вроде как помог…

    Учимся патчить и создавать патчи

    На самом деле так не делается, знаете, если помогаете то помогаете, нет, так зачем кидать ссылки на непонятные факи(?

    И чего же это в FAQ непонятного? Там же чёрным по белому написано:

    19. Сборка программ:

    19.10 Как накладывать патчи? Как накладывать патчи на ядро? (patch, diff)? Как убирать патчи?

    19.13 При сборке ядра `make menuconfig` ругается, что ncurses не установлен.

    Если давать только конкретные ответы, то ничему научиться невозможно. Сперва надо уяснить общие правила решения проблем.
    А этот ФАК надо если не прочитать полностью, то хотя бы посмотреть на все вопросы, и много проблем можно решить. Зачем вы искали ответ в разделе Мультимедия? Да и бредовых вопросов типа "как включить музыку" там нет, есть только вполне конкретные вопросы со словами "музыка" и "звук".

    Ответ на ваш большой вопрос: спросите у разработчиков LinuxXP как они этого добились, сравните конфиги ядер на предмет поддержки этого контроллера.

    Стартовая страница > Файлы > patch.exe — Что это такое?

    Как удалить patch

    Patch.exe — это исполняемый файл (программа) для Windows. Расширение имени файла.exe — это аббревиатура от англ. слова executable - исполнимый. Необходимо запускать исполняемые файлы от проверенных производителей программ, потому что исполняемые файлы могут потенциально изменить настройки компьютера или нанести вред вашему компьютеру.

    Патчи для глаз: зачем они нужны и как ими пользоваться

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

    Вот так, вы сможете исправить ошибки, связанные с patch.exe

    1. Используйте программу Настройщик Windows , чтобы найти причину проблем, в том числе и медленной работы компьютера.
    2. Обновите программу Patch . Обновление можно найти на сайте производителя (ссылка приведена ниже).
    3. В следующих пунктах предоставлено описание работы patch.exe.

    Информация о файле patch.exe

    Процесс Patch принадлежит программе Project1 от неизвестно.

    Описание: patch.exe не является важным для Windows и часто вызывает проблемы. Patch.exe находится в подпапках "C:\Program Files". Размер файла для Windows 10/8/7/XP составляет 36,864 байт.
    Нет более детального описания программы. Приложение не видно пользователям. Процесс загружается во время процесса загрузки Windows (Смотрите ключ реестра: MACHINE\Run, Winlogon\Shell). Это не файл Windows. Процесс слушает или шлет данные на открытые порты в сети или по интернету. Поэтому технический рейтинг надежности 70% опасности .

    • Если patch.exe находится в папке C:\Windows\System32, тогда рейтинг надежности 63% опасности . Размер файла 649,471 байт. У файла нет информации о создателе этого файла. Процесс загружается во время процесса загрузки Windows (Смотрите ключ реестра: MACHINE\Run, Winlogon\Shell). Это не системный файл Windows. Patch.exe способен подключится к интернету и записывать ввод данных.
    • Если patch.exe находится в папке C:\Windows, тогда рейтинг надежности 80% опасности . Размер файла 494,592 байт. Нет информации по файлу. Это неизвестный файл в папке Windows. У процесса нет видимого окна. Процесс начинает работу при запуске Windows (Смотрите ключ реестра: MACHINE\Run, Winlogon\Shell). Это не файл Windows. Patch.exe способен записывать ввод данных и спрятать себя.

    Важно: Некоторые вредоносные программы используют такое же имя файла patch.exe, например Backdoor.Win32.Netbus.170 (определяется антивирусом Kaspersky), и NetBus.svr (определяется антивирусом McAfee). Таким образом, вы должны проверить файл patch.exe на вашем ПК, чтобы убедиться, что это угроза. Мы рекомендуем Security Task Manager для проверки безопасности вашего компьютера.



    Есть вопросы?

    Сообщить об опечатке

    Текст, который будет отправлен нашим редакторам: