Что значит патчим. Игровой патч - что это такое

На iOS - iPhone, iPod touch 15.04.2019
На iOS - iPhone, iPod touch

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 для проверки безопасности вашего компьютера.

Инструкция

На самом деле запуск патч а не составит труда. Больших знаний в этом деле нет. Но большинство ошибок, совершаемых теми, кто пользуется этими патч ами, заключается в халатном отношении к устанавливаемому программному обеспечению. К каждому патч у, как правило, прилагается – это текстовый файл, который чаще называется readme.txt. Само read me «прочти меня», что многие пользователи не делают – отсюда проблемы с дальнейшей работой программ.

В этом файле указанна последовательность действий при запуске и установке этого патч а. В основном, это система работы с этим патч ем. Одним из самых главных условий является выгрузка из памяти самой программы, на которую будет установлена «заплатка». Это , что потребуется не только закрыть программу, но и выгрузить из памяти. Некоторые программы остаются в памяти при использовании команды «Закрыть программу». Это можно объяснить тем, что в свойствах программы может быть активирован пункт «При закрытии программы свернуть в трей». Иногда программа выгружается из памяти. В таких случаях можно воспользоваться «Диспетчером задач»: нажмите сочетание клавиш Ctrl + Shift +Esc – перейдите к вкладке «Процессы» - найдите процесс вашей программы – нажмите правой кнопкой мыши на нем – пункт «Завершить процесс».

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

Источники:

  • как работать с патчами

Патчи, или «заплатки» - специальные дополнения для программ, в частности компьютерных игр, выпускаемые разработчиками. Они исправляют различные технические и другие проблемы в работе программного обеспечения. Для игр дополнения устанавливаются различными способами.

Инструкция

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

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

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

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

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

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

Разработка игры

Многие геймеры, когда играют в очередной крупный проект, даже не задумываются о том, через что он прошел, прежде чем попал к ним в руки. Если вы хотите узнать про патч, что это такое, как его использовать и зачем он нужен, вам нужно понимать, как создаются компьютерные игры. Естественно, здесь не будет описан весь процесс, потому что он невероятно долгий и многосторонний. Более того, большая часть его не является жизненно важной для этого вопроса. Самое необходимое, что вам стоит знать - это стадия тестирования. Когда разработка игры заканчивается, то уже готовый и играбельный проект отправляется на альфа-тестирование. Здесь профессиональные тестировщики проверяют работоспособность игры, указывают на недостатки и проблемы, которые исправляются еще до выхода игры в свет. После этого начинается бета-тестирование, которое может быть открытым или закрытым. Здесь уже геймеры сами тестируют игру и сообщают разработчикам о том, что с ней не так - в зависимости от типа тестирования, проект оказывается в открытом доступе, либо определенной группе людей дается возможность проверить его. И после этого проводятся финальные доработки и исправления - и проект выходит в продажу. Однако даже такая внимательная и дотошная многоуровневая проверка не всегда способна обнаружить все минусы, поэтому и существует такое понятие как патч. Что это такое? В данной статье вы узнаете все о патчах.

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

Стандартный патч

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

Кумулятивные патчи

Отдельно стоит поговорить о кумулятивных патчах. Например, они очень часто могут встретиться для игры "Сталкер" - патчи подобного рода содержат в себе сразу несколько заплаток, которые выходили в свет ранее. Таким образом, вместо того чтобы качать каждый вышедший патч по отдельности и устанавливать их по одному, вы можете скачать кумулятивный патч, который будет содержать в себе все изменения предыдущих заплаток, что невероятно удобно.

Как пропатчить игру?

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

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

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

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

Первый, самый простой, распространенный и довольно эффективный - нахождение в коде строк, имеющих какое-либо отношение к регистрации. Благо сообщения об успешной/неуспешной активации программы, о количестве оставшихся до окончания срока функционирования дней, содержимое 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-патчинг

На дорожку

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

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

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

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

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

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

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

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

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

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

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



Рекомендуем почитать

Наверх