Для создания читов тебе понадобятся 3 вещи:
1. Delphi какой-нибудь последней версии.
2. ArtMoney.
3. Прямые руки.
Для начала ты должен разузнать кое-что о гаме.
1. Название окна. Ну, название окна каждый ламер находить умеет, тут уметь-то ничего не надо.
2. Адрес в памяти. Чтобы нам что-то изменить в памяти, нам нужно нужно конкретно знать где и че изменять. Поэтому мы сначала найдем адрес в памяти, а потом уже все хекнем. Его ты найдешь с помощью специальной проги – ArtMoney. (можно также GameHack или что-то такое).
Как им  пользоваться думаю разберётесь.

Здесь я приведу пример создания чита для 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 миллиарда хп )
WriteProcessMemory(ProcHandle,ptr(Addr_Health1),@p okevalue,NumberOfBytes,rw);
WriteProcessMemory(ProcHandle,ptr(Addr_Health2),@p okevalue,NumberOfBytes,rw);
WriteProcessMemory(ProcHandle,ptr(Addr_Health3),@p okevalue,NumberOfBytes,rw);
// хакаем игру
Closehandle(ProcHandle);
// закругляемся
end;

Тут вроде все ясно где и что.
Запомни, что это для КСа, поэтому тот же код не потянет на некоторые гамы! Там уж сами разбирайтесь… Поседишь где-нибудь часика 2 и поймешь что к чему.