Аватар для red_mail
4 / 4 / 1
Регистрация: 25.11.2008
Сообщений: 107

Как пишутся патчи к программе?

03.02.2009, 18:16. Показов 1554. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем добрый вечер.

Давно интересуюсь, на чем пишутся патчи для программ и как это работает.
Как патч изменяет программный код?
Буду признателен за несложный пример на Delphi.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.02.2009, 18:16
Ответы с готовыми решениями:

Как программно узнать установленные патчи для windows?
как программно узнать установленный патчи(обновления) kb95xxxx для windows. Типа узнать весь список всех установленых обновлений....

Не пишутся CD-R, а DVD-R пишутся
Вот Dvd-R (только минус) пиется нормально, без проблем, а вот Cd-R зарубает. Использовал разные Неро. Вопрос: почему?

Как пишутся боты на PHP?
Как пишутся боты на PHP?например предположим для браузерных игр, или там кликеры ВК по ссылкам...Ну, одним PHP может и не обойтись, но...

5
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
03.02.2009, 18:20
Патч для проги можно написать на чем угодно.
Как работает? Ты когда-нибудь текстовый файл правил? Ну вот это тоже самое, только за тебя правит что-то программа.
0
Почетный модератор
 Аватар для Humanoid
11550 / 4345 / 452
Регистрация: 12.06.2008
Сообщений: 12,452
03.02.2009, 19:08
Цитата Сообщение от red_mail
Буду признателен за несложный пример на Delphi.
Патчи обычно изменяют всего несколько байт... вот например кусок из патча для снятия ограничений полуоткрытых соединений в WinXP
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
Function TForm1.PatchFile(Value : Integer): Boolean;
Var F : File;
    Res : Integer;
Begin
  Result := True;
  If Offset<=0 then
  Begin
    Result := False;
    Exit;
  End;
  If not FileExists(TmpDir+'tcpip.sys') then
  Begin
    Result := False;
    ErrStr := 'Файл не найден';
    Exit;
  End;
  AssignFile(F,TmpDir+'tcpip.sys');
  FileMode := fmOpenReadWrite;
  {$I-}
  Reset(F,1);
  {$I+}
  If IOResult<>0 then
  Begin
    Result := False;
    ErrStr := 'Не удалось открыть файл. Возможно, он имеет аттрибут "только чтение"';
    Exit;
  End;
  Seek(F,Offset);
  BlockWrite(F,Value,4,Res);
  CloseFile(F);
  If Res<>4 then
  Begin
    Result := False;
    ErrStr := 'Не удалось изменить файл... возможно, он защищен от записи';
    Exit;
  End;
 
  AssignFile(F,TmpDir+'tcpip.sys');
  Reset(F,1);
  Value := Integer(CalcChecksum(TFileRec(F).Handle));
  Seek(F,$130);
  BlockWrite(F,Value,4,Res);
  CloseFile(F);
  If Res<>4 then
  Begin
    Result := False;
    ErrStr := 'Странно... значение half-open изменил, но не получилось изменить контрольную сумму';
  End;
End;
Всё достаточно просто... открыли файл, с помощью процедуры Seek перешли на нужную нам позицию (в данном случае её определяли заранее), изменили 4-байтное значение. Потом перешли на позицию контрольной суммы (у обычных exe'шников её часто не бывает, но в драйверах она есть)... её тоже изменили.
0
 Аватар для red_mail
4 / 4 / 1
Регистрация: 25.11.2008
Сообщений: 107
03.02.2009, 19:54  [ТС]
Если я правильно понял, то любой ехе-шник можно править?

А можно пример патча изменяющего ехе-шник содержащий следующий код:

Code
1
2
3
4
5
6
7
procedure TForm1.Button1Click(Sender: TObject);
var
S: string;
begin
S:='old text';
Label1.Caption:=S;
end;
Изменить S:='old text' на S:='new text';
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
03.02.2009, 20:06
Если я правильно понял, то любой ехе-шник можно править?
Нет, неправильно.
На экзешник у тебя просто может не хватить прав. Экзешник может быть запакован. Экзешник может быть по другому перекомпилирован, тогда некоторые патчи для старой версии просто работать не будут. Экзешник можно так изменить в hex-редакторе или дизассемблере, что твой патч тупо свалит прогу.
Если патчишь свою прогу, то все намного проще. Смотри по какому смещению у тебя твоя строка находится и меняй. Так как, количество символов одно, то на все остальное можно забить.
0
 Аватар для red_mail
4 / 4 / 1
Регистрация: 25.11.2008
Сообщений: 107
04.02.2009, 15:20  [ТС]
Понятно. Спасибо всем.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.02.2009, 15:20
Помогаю со студенческими работами здесь

Как пишутся боты авторизации и т.п.?
Как прикрутить скрипт к странице, что-бы заполнило нужное поле по Id и как нажать нужную кнопку на странице? Я так понимаю надо...

Как пишутся графические программы
Вот хотел у вас спросить как начинающий программист как пишутся графические программы? Я знаю что с помощью WinApi, но говорят что WinApi...

Как пишутся флеш-приложения?
На некоторых сайтах я вижу интересные рекламы, которые так или иначе реагируют на курсор: то земной шар, который крутится, то книжка,...

Как пишутся комментарии к функции
Добрый день! Встала задача написать немного кода на питоне и передать его. код я написал, но хотелось бы написать Коментарии к...

Как пишутся службы Windows
Помогите пожалуйста объясните как создать службу! надо срочно сдать к.р. надо реализовать onStart onStop onPause onContinue. Что выполнять...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

Новые блоги и статьи
Облачные приложения на Rust: руководство по архитектуре микросервисов
golander 13.07.2025
Когда я впервые взялся за проектирование облачной платформы для одного из наших клиентов, выбор стоял между привычными Go и Java. Но после нескольких месяцев разработки микросервисной системы,. . .
Как Node.js выполняет асинхронные операции
Reangularity 13.07.2025
Каждый раз, когда я рассказываю про Node. js, возникает один и тот же вопрос: "Как эта штука может быть быстрой, если JavaScript — однопоточный язык?" И это действительно кажется парадоксом. Ведь в. . .
Как писать чистый, тестируемый и качественный код на Python
py-thonny 12.07.2025
Помню свой первый проект на Python. Работал тогда быстро, грязно, лишь бы работало. Код был похож на запутанный клубок - переменные по одной букве, функции на 200 строк, комментарии отсутствовали как. . .
Blazor и контроллер сервопривода IoT Meadow Maple
Wired 11.07.2025
Я решил разобраться, как можно соединить современные веб-технологии с миром "железа". Интересная комбинация получилась из Blazor в качестве веб-интерфейса и микроконтроллера Meadow с его веб-сервером. . .
Генерация OpenQASM из кода Q#
EggHead 10.07.2025
Летом 2024-го я начал эксперименты с библиотекой Q# Bridge, и знаете что? Она оказалась просто находкой для тех, кто работает на стыке разных квантовых экосистем. Основная фишка этой библиотеки -. . .
Изучаем новый шаблон ИИ-чата .NET AI Chat Web App
stackOverflow 10.07.2025
В . NET появилось интересное обновление - новый шаблон ИИ-чата под названием . NET AI Chat Web App. Когда я впервые наткнулся на анонс этого шаблона, то сразу понял, что Microsoft наконец-то. . .
Результаты исследования от команды ARP (июль 2025 г.)
Programma_Boinc 10.07.2025
Результаты исследования от команды ARP (июль 2025 г. ) Африканский проект по дождям (ARP) World Community Grid снова запущен! Мы рады поделиться обновленной информацией о нашем прогрессе с осени. . .
Angular vs Svelte - что лучше?
Reangularity 09.07.2025
Сегодня рынок разделился на несколько четких категорий: тяжеловесы корпоративного уровня (Angular), гибкие универсалы (React), прогрессивные решения (Vue) и новая волна компилируемых фреймворков. . .
Code First и Database First в Entity Framework
UnmanagedCoder 09.07.2025
Entity Framework дает нам свободу выбора, предлагая как Code First, так и Database First подходы. Но эта свобода порождает вечный вопрос — какой подход выбрать? Entity Framework — это. . .
Как использовать Bluetooth-модуль HC-05 с Arduino
Wired 08.07.2025
Bluetooth - это технология, созданная чтобы заменить кабельные соединения. Обычно ее используют для связи небольших устройств: мобильных телефонов, ноутбуков, наушников и т. д. Работает она на частоте. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru