Patching
An application that has been installed using the Microsoft Windows Installer can be upgraded by reinstalling an updated installation package (.msi file), or by applying a Windows Installer patch (an .msp file) to the application.
A Windows Installer patch (.msp file) is a self-contained package that contains the updates to the application and describes which versions of the application can receive the patch. Patches contain at a minimum, two database transforms and can contain patch files that are stored in the cabinet file stream of the patch package. For more information about the parts of a Windows Installer patch package, see Patch Packages.
Servicing applications by delivering a Windows Installer patch, rather than a complete installation package for the updated product can have advantages. A patch can contain an entire file or only the file bits necessary to update part of the file. This can enable the user to download an upgrade patch that is much smaller than the installation package for the entire product. An update using a patch can preserve a user customization of the application through the upgrade.
**Windows Installer 4.5 and later:В В **
Beginning with Windows Installer 4.5, developers can mark components in a patch with the msidbComponentAttributesUninstallOnSupersedence value in the Component table. If a subsequent patch is installed, marked with the msidbPatchSequenceSupersedeEarlier value in its MsiPatchSequence table to supersede the first patch, Windows Installer 4.5 and later can unregister and uninstall components marked msidbComponentAttributesUninstallOnSupersedence to prevent leaving behind unused components on the computer. If the component is not marked with with this bit, installation of the superseding patch can leave an unused component on the computer. Setting the MSIUNINSTALLSUPERSEDEDCOMPONENTS property has the same effect as setting this bit for all components.
**Windows Installer 3.0 and later:В В **
Developers who use Windows Installer 3.0, and author patch packages that have the MsiPatchSequence table can create patch packages that do the following:
- Use the product baseline cached by the installer to more easily service applications with smaller delta patches. For more information about using the product baseline, see Reducing Patch Size.
- Skip actions associated with specific tables that are unmodified by the patch. This can significantly reduce the time required to install the patch. For more information about which tables can be skipped, see Patch Optimization.
- Create and install patches that can be uninstalled singly, and in any order, without having to uninstall and reinstall the entire application and other patches. For more information about uninstalling patches, see Removing Patches.
- Apply patches in a constant order regardless of the order that the patches are provided to the system. For more information about how the Windows Installer determines the sequence used to apply patches, see Sequencing Patches.
- Apply patches to an application that has been installed in a per-user-managed context. For more information, see Patching Per-User Managed Applications.
**Windows Installer 2.0:В В **
The MsiPatchSequence table is not supported. Beginning with Windows Installer 3.0, patch packages can contain information that describes the patching sequence for the patch relative to other updates and additional descriptive information.
The recommended method for creating a patch package is to use patch creation tools such as Msimsp.exe and Patchwiz.dll. Developers can generate a patch creation file as described in the section: Creating a Patch Package. The creation of a small update patch is described in the section: A Small Update Patching Example.
Microsoft Windows Installer accepts a Uniform Resource Locator (URL) as a valid source for a patch. For more information about how to install a patch located on a Web server, see Downloading and Installing a Patch From the Internet.
A single Windows Installer patch (.msp file) can be applied to the installation package when installing an application for the first time. For more information, see Patching Initial Installations.
It is not possible to eliminate all circumstances when the application of a patch may require access to the original installation source. However, to minimize the possibility that your patch will require access to the original source, adhere to the points listed in the following section: Preventing a Patch from Requiring Access to the Original Installation Source.
To minimize the possibility that your patch is not broken by a subsequent customization transform, typically the patch is installed first, followed by the customization. Installing customization transforms first, and then the patch, may break the customization. For more information about patching customized applications, see Patching Customized Applications.
What is the format of a patch file?
What does the following mean ?
4 Answers 4
The -u option you used specifies the unified format. In that format the first two lines is a header: — is the original file, +++ is the new file, and the timestamps.
@@ block headers
That is then followed by chunks (change hunks) that starts with the @@ -R,r +R,r @@ syntax.
Those are two ranges, the one with the — is the range for the chunk in the original file, and the one with the + the range in the new file. The R designates the line number where the diff operation is started.
The numbers after the comma are the number of affected lines in each file.
- Every time you remove a line, the +r number will be smaller than -r .
- Every time you add a line, the +r number will be bigger than -r
- Changing a line will add 0 to the +r number. (same scope of lines)
Chunks of code lines
Within these chunks lines are identified as additions or deletions — means delete, + means addition. Lines that did not change in that chunk will have neither + or — front of it.
In your example it means there are two chunks, or sections, that changed between the two files and the lines with + in it are the new ones added, nothing was deleted.
You can find much more information about the syntax by doing a google search for unified diff.
Generate patch file windows
Программы для создания патчей и лоадеров
Итак, защита успешно сломана, коммерческая программа перестала требовать денег и зарегистрирована на ваше имя. Теперь надо обязательно поделиться результатами своих трудов со всем миром! Для релиза вам может понадобиться патч, вносящий нужные изменения в файлы. Если есть время и желание, то можно написать свой, а можно воспользоваться готовыми программами для создания патчей и лоадеров. Рассмотрим некоторые из них.
diablo2oo2’s Universal Patcher. Бесспорный лидер среди программ для создания патчей. Написан полностью на Ассемблере, последняя версия на сегодняшний день 2.18, а промежуточные бета-версии можно время от времени проверять по прямой ссылке. Позволяет делать если не все, то очень многое: статичные и универсальные патчи, самообучающиеся лоадеры, inline-патчи для упакованных файлов, патчи реестра, запись на диск прикрепленных к патчу файлов и еще многое другое. В умелых руках dUP2 будет очень мощным инструментом. Создаваемые патчи можно дополнять трекерной музыкой в формате xm, mod, it, s3m, mtm, umx, v2m, ahx и sid, оформлять собственными скинами, в том числе и нестандартной формы, устанавливать прозрачность окна и менять главную иконку патча. Интерфейс и документация на английском языке. Отечественными умельцами для патчера написан русификатор, но в официальном комплекте его, к сожалению, нет.
diablo2oo2’s Universal Patcher 2.26
Русификатор diablo2oo2’s Universal Patcher
ZeuSoft PMaker. Один из моих любимых патчеров. Текущая версия на офсайте 1.1.0.0 от 2003 года. Но хорошее дело останавливаться не должно, и энтузиастами была выпущена версия 2.1.0.1 со множеством исправлений и доработок. Например, был реализован патч процесса, который в официальной версии так и застрял на стадии «мы уже работаем над этим». Очень простой и удобный инструмент, позволяет делать статичные патчи, патчи реестра (через запуск reg-файла программой regedit), патчи с поиском сигнатуры и уникальной функцией «умной замены», а также лоадеры. В комплекте прилагается несколько шаблонов с примерами реализации всех функций патчера, а кроме того, на каждое действие есть подробная подсказка. При первом запуске патчер предлагает выбрать язык интерфейса, русский язык в наличии.
ZeuSoft PMaker 2.1.0.1
File Compare от ViaSoft. Офсайт прекратил свое существование, последняя версия 2.8 от 2005 года. Спасибо товарищу KeyGen за предоставленный дистрибутив. File Compare позиционируется как программа для сравнения двух файлов одинаковой длины на предмет наличия изменений. В качестве дополнительной функции может создавать патчи на основании найденных различий. Имеет место быть, но я ее использую только по прямому назначению, то есть для сравнения файлов.
File Compare 2.8
CodeFusion Wizard от Krichmar Kobi. Еще один мертвый проект, офсайт закрыт, а сама программа не обновлялась аж с 1999 года, остановившись на версии 3.0. Однако со своей основной задачей до сих пор справляется неплохо, позволяет создавать статичные патчи и универсальные патчи с поиском по сигнатуре. В комплекте имеется русификатор, но такого качества, что по-моему лучше обойтись без него.
CodeFusion 3.0
WRCPatcher от WatCheR при небольшом размере имеет полный набор для создания полноценных патчей: сравнение файлов, поиск и замена, добавление данных в реестр, запуск командных файлов, музыкальное оформление патча и многое другое. К сожалению, проект давно прекратил развиваться.
WRCPatcher 1.2 RC2
Tola’s Patching Engine позволяет создавать файловые патчи, в том числе и с поиском, лоадеры и патчи реестра. Внешний вид готового патча настраивается через файл ресурсов. В комплекте идет неплохая документация на английском языке, где описаны все основные функции. Проект также закрыт и много лет не обновлялся.
Tola’s Patching Engine 2.03
uPPP от известной крякерской команды SnD. Мощный инструмент, позволяющий создавать как классические патчи по смещению и с поиском байт, так и патчи реестра, а также запись внедренных в патч файлов на диск. Поддерживает разнообразные скины для патчей, большое количество форматов мелодий для музыкального оформления релизов, текстовые скроллеры и пользовательские иконки. Для работы генератора патчей требуется .NET Framework 2.0. Скины можно рисовать самому при помощи утилиты uPPP SkinHelper, которая также идет в комплекте.
uPPP 0.8
Dogbert’s Genuine Patching Engine — старенький, но до сих пор актуальный генератор, позволяющий делать маленькие патчи, работающие вплоть до Windows 95. В готовых патчах есть функция отмены изменений.
Dogbert’s Genuine Patching Engine 1.41
ScAEvoLa’s PatchEngine — практически точная копия предыдущего генератора. Не знаю, кто там у кого позаимствовал идеи, но по внешнему виду и функционалу друг от друга они отличаются мало.
ScAEvoLa’s PatchEngine 1.33
ap0x Patch Creator, авторская версия alfa RC3. Этот патчер нацелен как на собственно создание патчей, так и на красивое оформление и упаковку релизов. Позволяет делать статичные патчи, лоадеры, универсальные патчи с поиском сигнатуры, причем для каждого патча создает исходник на нескольких языках программирования, а потом компилирует его внешними приложениями. Естественно, при условии что они установлены на компьютере. Готовые патчи можно сразу же автоматически снабдить соответствующими .nfo и .diz файлами и упаковать в архив. Скачать дистрибутив можно с офсайта.
ap0x Patch Creator alfa RC3
The aPE, последняя версия 0.1.2.21 beta. Серьезный профессиональный инструмент, нацеленный в первую очередь на inline-патчинг упакованных и защищенных файлов. Код патча внедряется прямо поверх навесного упаковщика или протектора, так что распаковка файла не требуется. Поддерживает около 100 различных упаковщиков, но функционал может расширяться при помощи собственных скриптов и плагинов (SDK и примеры плагинов прилагаются). Кроме inline-патчей может создавать обычные статичные патчи, универсальные патчи с поиском сигнатуры и лоадеры. Скачать дистрибутив можно с офсайта, если вдруг потребуются дополнительные библиотеки для запуска программы, то они находятся там же.
aPE 0.1.2 beta
ByteKiller от corpse предназначен для быстрого создания патчей к модифицированным файлам. Степень изменения исходного файла может быть любой, сравниваемые файлы могут быть даже различной длины. Список изменений опционально сохраняется в лог-файл. Патчер написан на чистом ассемблере и распространяется с исходниками.
ByteKiller 2.15 Final
Из специализированных патчей могу выделить ASProtect SKE Inline Patcher от tenketsu0017 // TMT, последняя доступная версия 0.2. Это inline-патчер для ASProtect, позволяющий внедрять собственный код прямо поверх упакованного и защищенного файла. В архиве прилагается небольшая инструкция по использованию на английском языке.
ASProtect SKE Inline Patcher 0.2
Еще один патчер для ASProtect — ASProtect Inline Patcher от команды Under SEH Team также предназначен для создания inline-патчей программ, защищенных этим протекторам. Но, судя по отзывам, иногда имеют место различные глюки и неработоспособные файлы на выходе.
ASProtect Inline Patcher 1.0
ASProtect Inline Patcher 1.2
Abel Loader Generator от c0rdat ^ind. Офсайта нет, последняя доступная версия 2.31. Как можно догадаться из названия, программа предназначена только для создания лоадеров, но делает это лучше всех. Предоставляет пользователю целую кучу настроек, в том числе и уникальных. Например: подмена даты при запуске программы, удаление заданных ключей реестра и файлов, пауза перед патчем памяти для обхода проверки CRC, патч первого дочернего процесса (для защит типа Armadillo), самообучение при смене версии целевой программы, создание инсталлятора для лоадера и еще множество других. Интерфейс и документация на английском, но все интуитивно понятно.
Abel Loader Generator 2.31 (pass: manhunter.ru)
Advanced Loader Generator от The Boss. Офсайта нет, последняя версия 1.50 от 2007 года. Еще одна мощная программа для создания лоадеров. Несмотря на то, что лоадеры получаются без функции самообучения, Advanced Loader Generator очень неплохо дополняет по функционалу предыдущую программу. Так, он может работать с уже запущенными процессами, предоставляет расширенные функции по передаче параметров запускаемой жертве, позволяет более точно определить момент для каждого паттерна патча памяти и много других функций для детальной настройки создаваемого лоадера.
Advanced Loader Generator 1.50
THYloadergen — какой-то навороченный комбайн для создания лоадеров с множеством опций, инжектом dll, перехватом WinAPI, поиском окон, преферансом и куртизанками. Если разберетесь с документацией, то, наверное, получите еще один полезный инструмент.
THYloadergen 0.6
R!SC’s Process Patcher создает патчи процессов, они же лоадеры. Для создания лоадера сперва нужно создать скрипт конфигурации, в котором описываются все необходимые действия. В комплекте идет толковая документация с примерами скриптов, а также исходный код программы на Ассемблере, так что простор для творчества раскрывается широкий.
R!SC’s Process Patcher 1.5.1
R!SC’s Process Patcher 1.5.1.005p + GUI
CmpDisasm — вспомогательная программа, показывающая различия между исполняемыми файлами в дизассемблированном виде. Очень удобно для анализа изменений файлов после применения патчей.
CmpDisasm 0.84
Во всех выложенных архивах содержатся только проверенные рабочие файлы, гарантированно не содержащие никакого вредоносного кода. За чистоту и доступность файлов на сторонних ресурсах я не отвечаю. Никаких готовых кряков или исходников для их создания здесь нет, так что защитники аффтарских прав могут не напрягаться.