Уроки по геймхакингу (ЧАСТЬ 3), NB: из разных источников |
Здравствуйте, гость ( Авторизация | Регистрация )
Уроки по геймхакингу (ЧАСТЬ 3), NB: из разных источников |
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 миллиарда хп !!!!!) |
 
|
|
|
|
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 |
 
|
|
11.05.2003, 13:23
Сообщение
#3
|
|
Serious Sam Репутация: 1222 Группа: Только зарегистрировался Сообщений: 2711 Регистрация: 05.02.2003 |
Хорошее руководство!
Цитата В kernel.dll есть функции для дебага, которыми мы будем пользоваться. Я раньше думал - как они Access Violation-ы обходят |
 
|
|
11.05.2003, 13:29
Сообщение
#4
|
|
Продвинутый геймер Репутация: 35 Группа: Только зарегистрировался Сообщений: 415 Регистрация: 14.02.2003 |
можно и через собственный обработчик ловушек и исключений. Раньше я так и делал...
|
 
|
|
Текстовая версия | Сейчас: 20.04.2024, 16:44 |