В течении суток, статья станет дополнена. (исходники, ссылки, оформление в том числе)
Интро:
Все мы в какое время то, давным-давно либо давеча, играли в забавы - в настольные, спортивные, но c внедрением в нашу жизнь вычислительной техники также в компьютерные. В силу своего возраста, привычек, либо просто хотения расслабится также поднять расположение духа позже трудного рабочего суток.
Казалось бы забава даёт неограниченные возможности самореализации: в качестве гонщика, пилота, киллера либо даже бога. Но индивид так устроен - достигнув определённой вышины, он всё равно хочет чего-то большего также потому обретает новую мишень либо новые возможности.
Понятно, что при создании игр, разработчики предварительно всего руководствуются ежели никак не своим вкусом, то вкусом руководителя проекта, иной раз статистикой. Но ведь иной раз так также хочется, дабы эффекты замедления из Матрицы, перекочевали в забаву Индиана Джонс, но никак не самый поворотливый богатырь игровой индустрии - киллер Hitman, научился шмыгать по стенам. Для этих целей также создаются трейнеры.
Теория:
Трейнер (англ. trainer) — программа, предназначенная для изменения поведения игры, обычно работающая непосредственно с оперативной памятью компьютера.
В 1980-х также 1990-х годах, тренеры обычно встраивались хакерами непосредственно в код игр. При запуске, сначала запускался тренер с диалоговым окном "Вы хотите использовать читы?", дальше выполнялся код игры. В названии тренера использовались знаки сложения (+), по одному на каждую опцию тренера. Например, "Группа Хакеров представляет: Doom+++" - три опции, например, бессмертие, вечная аммуниция также телепортация.
Современные бла бла тренеры, обычно запускается как отдельная программа, вплоть до игры, также в своих названия используют один знак сложения с числом опций позже него, например, "Doom Trainer +15". Помимо того, современные тренеры работают с оперативной памятью игры, но никак не её исполняемым файлом, поскольку внесение изменений в исполняемый файл осложняется системами охраны от копирования.
Методы:
Для создания тренеров используются дамперы памяти, отладчики также дизассемблеры. Самый бесхитростный средство создать тренер - поиск значения в памяти, совпадающего с нужным игровым параметром. Затем изменить его также поискать в получившемся списке снова. После нескольких итераций скорее всего останется небольшой перечень адресов, значения по которым разрешено попытаться изменить. Существует множество утилит таких как: ArtMoney, Cheat'o'Matic - автоматизирующих процесс поиска также изменения значений.
В некоторых случаях нужное игровое значение безостановочно меняет свое расположение в памяти. В этом случае разрешено попытаться найти указатель на него возможно с небольшим смещением, ежели игровое значение находится в какой-либо структуре данных. Если также указатель меняет расположение в памяти, то разрешено поискать указатель на этот указатель дополнительно.т.д. Похоже разрешено поставить точки приостановки на обращения к игровому значению также проанализировать код, какой их читает либо изменяет.
Подведём итог - так что бла бла такое, DMA? DMA (Dynamic Memory Allocation) - это динамическое распределение памяти. Проще говоря, DMA игры, в отличие от не-DMA игр, хранят используемые ими значения по адресам в памяти, которые меняются позже каждого запуска игры. Все забавы под DOS - никак не используют DMA, в то пора как большая часть игр под Win32 его используют.
Практика:
В этой статье мы буду рассматривать принцыпы написания трейнеров для DMA также не-DMA игр. В рунете совсем немного информации на данную тему, уже имеющиеся примеры кода, написания тренеров зачастую никак не проверялись на практике, но значит могут попросту запутать новичков. Всё что нам потребуется так это говор программирования Delphi также отладчик TSearch.
Не DMA игры:
Запускаем TSearch. Нажав Open Process, выбераем из списка интересующий нас процесс. Далее, используя поиск ищем, отсеиваем но затем также определяем адрес интересующего значения. В качестве образца мы буду рассматривать забаву GTA - Vice City. Интересующий праметр - время.
Как наблюдаете, кода по минимуму, мы никак не стал использовать проверок на существование окна программы. Так как смысла в том дабы сворачивать-разворачивать приложение никак не наблюдаю, значительно практичнее станет пользоватьсялюбым джойнером также склеить файл забавы также трейнер вместе.
Код:
var
Form1: TForm1;
WindowName: integer;
ProcessId: integer;
ThreadId: integer;
HandleWindow: Integer;
write: cardinal;
buf: dword;
const
WindowTitle = 'GTA: Vice City';
Address = $0097F266;
NumberOfBytes = 4;
implementation
{$R *.dfm}
procedure s1ow_mode;
begin
WindowName := FindWindow(nil,WindowTitle);
ThreadId := GetWindowThreadProcessId(WindowName,@ProcessId);
HandleWindow := OpenProcess(PROCESS_ALL_ACCESS,False,ProcessId);
buf:=$3E90;
WriteProcessMemory(HandleWindow, ptr(address), @buf, 4, write);
end;
procedure nos1_mode;
begin
WindowName := FindWindow(nil,WindowTitle);
ThreadId := GetWindowThreadProcessId(WindowName,@ProcessId);
HandleWindow := OpenProcess(PROCESS_ALL_ACCESS,False,ProcessId);
buf:=$3F80;
WriteProcessMemory(HandleWindow, ptr(address), @buf, 4, write);
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if (GetAsyncKeyState(VK_LBUTTON) <> 0) then
begin
s1ow_mode;
end;
if (GetAsyncKeyState(VK_RBUTTON) <> 0) then
begin
nos1_mode;
end;
end;
Охрана:
Если в забаве имеется официальная таблица рекордов либо забава является сетевой также никак не все расчеты идут на стороне сервера, то существование тренеров портит игру. В этом случае приходится встраивать систему охрану от тренеров, поскольку системы охраны от копирования никак не справляются с этой задачей. Для этого важнейшие игровые параметры шифруются также расшифровываются на короткое пора пред использованием либо создается зашифрованная копия с которой оригинальный параметр безостановочно сравнивается. Для обхода таких защит никак не обойтись без дизассемблирования программы.
WAR!9G (c) при информационной поддержке Свободной Энциклопедии