Перейти в начало страницы

Здравствуйте, гость ( Авторизация | Регистрация )

Gameru.net останавливает работу в связи с вторжением армии РФ в Украину. Следите за дальнейшими анонсами.
Support Gameru!
 
Тема закрытаНачать новую тему
> Уроки по геймхакингу (ЧАСТЬ 3), NB: из разных источников
Baron Gede
сообщение 10.05.2003, 12:24
Сообщение #1


Продвинутый геймер
********

Репутация:   35  
Группа: Только зарегистрировался
Сообщений: 415
Регистрация: 14.02.2003




Вставить ник Цитировать выделенное в форуму быстрого ответа


INFO

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

Для создания читов тебе понадобятся 3 вещи:

1. Delphi какой-нибудь последней версии.
2. GameHack (или что-нибудь вроде этого). Но лучше GameTrainer (потому что халявный).
3. Прямые руки


Для начала ты должен разузнать кое-что о гаме.

1. Название окна. Ну, название окна каждый ламер находить умеет, тут уметь-то ничего не надо.

2. Адрес в памяти. Чтобы нам что-то изменить в памяти, нам нужно нужно конкретно знать где и че изменять. Поэтому мы сначала найдем адрес в памяти, а потом уже все хакнем. Его ты найдешь с помощью специальной проги - GameTrainer (можно также GameHack или что-то такое).

Зайди в гейм. Запомни значение денег/жизней/фрагов или чего захочешь. Теперь в GameTrainer'е в первом поле выбери процесс, а во второе пиши то значение, которое ты только что запомнил (хотя ты уже, наверное, забыл). Сейчас GameTrainer выдаст тебе большое количество адресов, но нам они все нафиг не нужны! Поэтому измени это значение как-нибудь(потрать несколько пуль, купи че-нибудь, убей кого-нибудь и т.д.). Теперь снова вводи это значение в GameTrainer, только в этот раз нажимать надо не Find, а Seive! И так пока останется минимальное количество адресов.

3. Тип данных. Тип данных играет немаловажную роль! Основываясь на нем, ты будешь делать чит, а также определять максимальное значение!! Вот примеры:

byte: 256; 1 байт;
word: 65536; 2 байта;
dword: 4294967296; 4 байта;


--------------------------------------------------------------------------------


HACKING

Здесь я приведу пример создания чита для Counter-Strike'a v1.3, т.к. по-моему это самая популярная игра. Чит нам будет жизней до фига делать! Единственное, что плохо - он будет работать только если ты создал сервак и если у тебя Software Video Mode. Можно сделать и под OpenGl, но там адреса другие, потому что эти режимы занимают разное количество памяти.

Мы будем использовать вот эти API функции (почитай о них в справке):

FindWindow
GetWindowThreadProcessId
OpenProcess
ReadProcessMemory
WriteProcessMemory
CloseHandle

Сначало обЪяви вот это дерьмо:

const
WindowTitle = 'Half-Life';// названия окна
Addr_Health1 = $00137A54;
Addr_Health2 = $00138938;
Addr_Health3 = $01CBA38C;
// адреса в памяти

var
Wnd : THandle;// хэндл окна
ProcessId : integer;// пид (не п*д*р)
pokevalue : single;
// само значение (про типы данных помнишь?)
ProcHandle : integer;// хэндл процесса
NumberOfBytes: byte;// кол-во байтов
rw : cardinal;// чтение/запись

Теперь добавь на форму Edit и Button, а по нажатию button'а напиши следующее:

begin
Wnd := FindWindow(nil,WindowTitle); // получаем хэндл окна
if Wnd = 0 then // если гама не запущена, то обламываем лама
begin
MessageBox(0,'Запусти КС, козел!!','Ошибка в ДНК!',MB_OK + MB_ICONERROR);
exit;
end;

try
pokevalue := StrToInt(Edit1.Text); // получаем кол-во хп, введенное в Edit
except
MessageBox(0,'Введи хп, козел!!','Ошибка в ДНК!',MB_OK + MB_ICONERROR);
exit;
end;

GetWindowThreadProcessId(Wnd, @ProcessId); // получаем PID
ProcHandle := OpenProcess(PROCESS_ALL_ACCESS,false,ProcessId);
// получаем хэндл процесса

NumberOfBytes := 4;// в данном случае 4 байта,
// а это значит, что максимально значение
// == 2564 (~4 миллиарда хп !!!!!)
Перейти в начало страницы
 
Baron Gede
сообщение 10.05.2003, 12:25
Сообщение #2


Продвинутый геймер
********

Репутация:   35  
Группа: Только зарегистрировался
Сообщений: 415
Регистрация: 14.02.2003




Вставить ник Цитировать выделенное в форуму быстрого ответа


WriteProcessMemory(ProcHandle,ptr(Addr_Health1),@pokevalue,NumberOfBytes,rw);
WriteProcessMemory(ProcHandle,ptr(Addr_Health2),@pokevalue,NumberOfBytes,rw);
WriteProcessMemory(ProcHandle,ptr(Addr_Health3),@pokevalue,NumberOfBytes,rw);
// хакаем игру

Closehandle(ProcHandle);
// закругляемся
end;

Можешь в чит добавить одну фишку: используя функцию ReadProcessMemory можно
вставить кол-во хп в свою прогу, и тут-же изменить на другое!!
А это можно сделать вот так:

ReadProcessMemory(ProcHandle,ptr(Addr_Health1),@pokevalue,4,rw);
Edit1.Text := FloatToStr(pokevalue);

Я так и быть дам тебе адреса на OpenGl и Direct3D, чтобы ты потренировался.

Software_Address_Health1 = $00137A54;
Software_Address_Health2 = $00138938;
Software_Address_Health3 = $01CBA38C;

OpenGl_Address_Health1 = $00137BA8;
OpenGl_Address_Health2 = $00138A88;
OpenGl_Address_Health3 = $01CA64DC;

D3D_Address_Health1 = $00137BA8;
D3D_Address_Health2 = $00138A88;
D3D_Address_Health3 = $01CA64DC;

Тут вроде все ясно где и что.

Если у тебя кривые руки или ошибка в ДНК, то лучше тебе будет скачать исходник с примером! Мой полностью готовый чит можно скачать здесь.

® Dark Yukon
Перейти в начало страницы
 
MAN2
сообщение 11.05.2003, 13:23
Сообщение #3


Serious Sam
****************

Репутация:   1222  
Группа: Только зарегистрировался
Сообщений: 2711
Регистрация: 05.02.2003




Вставить ник Цитировать выделенное в форуму быстрого ответа


Хорошее руководство!
Цитата
В kernel.dll есть функции для дебага, которыми мы будем пользоваться.

Я раньше думал - как они Access Violation-ы обходят wink.gif
Перейти в начало страницы
 
Baron Gede
сообщение 11.05.2003, 13:29
Сообщение #4


Продвинутый геймер
********

Репутация:   35  
Группа: Только зарегистрировался
Сообщений: 415
Регистрация: 14.02.2003




Вставить ник Цитировать выделенное в форуму быстрого ответа


можно и через собственный обработчик ловушек и исключений. Раньше я так и делал...
Перейти в начало страницы
 

Тема закрытаНачать новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 20.04.2024, 16:44