Полный мануал по патчу шаровар

Xakep, номер #039, стр. 039-075-3


2. Число байт для записи.

Все, первый байт я исправил. Теперь повторяю ту же операцию для второй строки кряка и исправляю второй байт.

Почему именно так?

Для кодинга я использовал объект TFileStream. А почему я не захотел сделать проще и написать кряк на WinAPI? Прежде всего, это не будет проще и количество строк не уменьшится, поэтому нет смысла мучиться. Во-вторых, использование объектов всегда удобнее. Почему? Сейчас объясню.

Сначала для работы с файлами существовали функции: _fcreat, _fseek, _fread и т.д. После этого появились CreateFile, SetFilePointer, WriteFile. Теперь начинают появляться WriteFileEx и ей подобные. Всеми любимая MS встраивает новые функции в свои окна, а старые забрасывает, из-за чего появляются проблемы несовместимости. Это что, я теперь должен после каждого нового прикола Билла переделывать свои проги на использование новых функций? А если у меня их сотня? Обломись!!! Уж лучше я один раз исправлю объект TFileStream и потом просто перекомпилирую свои проги с учетом новых возможностей.

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

Итого

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

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

Удачи тебе и синего неба над головой. А еще чтоб твои глаза никогда не увидели это небо в сеточку :). Шутка.

ЛИСТИНГ ПАТЧА

procedure TForm1.Button1Click(Sender: TObject);

var

f:TFileStream;

s: byte;

begin

//Открываю файл для чтения и записи.

f:=TFileStream.Create('ххх.exe', fmOpenReadWrite);

//Перехожу на нужную позицию в файле.

f.Seek($0AC0E9, soFromBeginning);

//Читаю текущее значение.

f.Read(s, sizeof(s));

//Если текущее значение равно $74, то исправить.

if s=$74 then

begin

s:=$EB;

//Возвращаюсь обратно.

f.Seek($0AC0E9, soFromBeginning);

//Записываю новое значение.

f.Write(s, sizeof(s));

end;

//Далее то же самое для второй строчки.

f.Seek($0AC0FE, soFromBeginning);

f.Read(s, sizeof(s));

if s=$74 then

begin

s:=$EB;

f.Seek($0AC0FE, soFromBeginning);

f.Write(s, sizeof(s));

end;

//Закрываю файл.

f.Free;

end;

end.

Назад на стр. 039-075-2  Содержание