Всем привет! Сегодня я вам покажу как же всетаки делать свои трейнера для различных игр!
Для примера я взял игру Counter Strike Source v34!
Нам понадобится:
1. Delphi 7---> google.ru
2. Cheat Engine --->google.ru (CE рекомендую использовать офицальную версию я пользуюсь 6.1)
Ну чтож начнем! (трейнер будет добовлять нам денег)
Часть 1 (поиск нужных значений (поинтеров и офсетов))
[Ссылки могут видеть только зарегистрированные пользователи. ]
Часть 2 работа в Delphi 7 (основная часть)
[Ссылки могут видеть только зарегистрированные пользователи. ]
Всем спасибо! Думаю у вас не возникнут сложности!
Сам код не мой но он был неправильный я его подправил)
Код:
Код:
var
Form1: TForm1;
WindowName : integer; // объявляем как глобальные переменные
ProcessId : integer; // Все эти переменные нужны чтобы найти их
ThreadId : integer; // процесс с игрой.
HandleWindow : Integer; // хедл окна
b:dword; // сюда прочитаем адрес из поинтера
readwrite:cardinal; // В эту переменную попадёт количество записанных байтов.
buf : dword; // Тут будет содержаться значение, на которое будем изменять
Const WindowTitle = 'Counter-Strike Source'; // Заголовок окна с игрой
Address = $22562d7c; // Это адрес поинтера.
NumberOfBytes = 4; // Количество байт, которые будем заменять.
//на каждую кнопку
procedure TForm1.Button1Click(Sender: TObject);
begin
WindowName := FindWindow(nil,WindowTitle);
If WindowName = 0 then // Если окошка у нас нет, то и изменять нечего.
begin
MessageDlg('Игра должна быть запущена до трейнера. Запустите ее, потом трейнер', mtwarning,[mbOK],0);
end;
ThreadId := GetWindowThreadProcessId(WindowName,@ProcessId); // Ищем хэндл процесса
HandleWindow := OpenProcess(PROCESS_ALL_ACCESS,False,ProcessId); // с нашей игрой.
ReadProcessMemory(HandleWindow,ptr(address),@b,4,readwrite); // Прочитали в b значение из адреса поинтера.
b:=b+3608; // Смещение адреса денег относительно адреса, на который указывает поинтер равно 40. Прибавляем.
buf:=$9000; // Денег должно быть много :) (**)
WriteProcessMemory(HandleWindow, ptr(b), @buf, 4, readwrite); // Наконец, запишем по адресу,
// содержащемуся в b, новое значение денег.
end;
Исходник: [Ссылки могут видеть только зарегистрированные пользователи. ]
Последний раз редактировалось ProXAKE123; 13.12.2011 в 12:28.
описал бы лучше создание подобного трейнера в случае, когда адрес нам неизвестен, мне бы очень пригодилась, интересует, но с процессами даже не имею представления как работать
описал бы лучше создание подобного трейнера в случае, когда адрес нам неизвестен, мне бы очень пригодилась, интересует, но с процессами даже не имею представления как работать
Посмотри [Ссылки могут видеть только зарегистрированные пользователи. ]. Там хоть и с ПВ, но понятно, думаю, будет...
________________
Принимаются пожертвования любых размеров в фонд поддержки начинающих программистов
Кошельки: WMZ - Z276844220882; WMR - R231028582939; WMU - U394136909210; ЯД - 410011494605270.
Это только на Одиночную игру или это может сработать и в online?? Если не тяжело можешь помочь, я только начал его осваивать и в прицепи програмирование! Если не тяжело в скайп добавь плз подскажи с чего лучше начинать Skype:serega221095
А можно как нибудь вывести например имеющееся кол-во патронов в Label?
Цитата:
Сообщение от nikita9987
+1 возможноли такое?
1) Ищете базовый адрес игры.
2) Ищете адрес, где лежит количество патронов.
3) Делаем из адреса цепочку оффсетов, начиная с базового адреса.
4) Читаем из памяти количество патронов с помощью ReadProcessMemory.
5) Выводим количество патронов в Memo.
6) Profit???
________________
Принимаются пожертвования любых размеров в фонд поддержки начинающих программистов
Кошельки: WMZ - Z276844220882; WMR - R231028582939; WMU - U394136909210; ЯД - 410011494605270.
Принимаются пожертвования любых размеров в фонд поддержки начинающих программистов
Кошельки: WMZ - Z276844220882; WMR - R231028582939; WMU - U394136909210; ЯД - 410011494605270.