Перейти к содержанию

Лидеры

Популярный контент

Показан контент с высокой репутацией 22.09.2010 во всех областях

  1. Создание трейнера на Дельфи для начинающих На этом примере будет показано, как сделать программу, которую можно считать очень простым трейнером с деланным за минут 3-5 при готовых модулях. Скачайте новый проект Source_SimpleTrainer.rar и можете прочитать, как он был сделан. Цель - записать один раз значение “100” по некоторому адресу. Возьмём за пример тестовую программу test.exe, которая лежит вместе с исходниками. Найдём адрес значения в Cheat Engine Рис.1 Поскольку адрес теперь мы знаем,то приступим непосредственно к делу. Скачаем среду разработки Дельфи Лайт (размер установщика порядка 70 мб). Дельфи не плохая среда разработки и подходит для начинающих только изучающих язык Паскаль или боле сложный язык Дельфи (Дельфи можно называть языком и средой разработки) Писать мы будем на готовой форме, поэтому трейнер будет порядка 500 кб. Если хотите меньше, то просим на наш форум. Создадим проект как показано на рисунке. Рис.2 Разместим компоненты таймера и картинки (шаг 3, шаг 4) Кликнем на форму, на которой уже есть таймер и пунктир картинки и заполним поля (шаг 1, шаг 2) Рис.3 Выделим мышкой иконку таймера, которую вы перетащили на форму и поставим в свойствах Interval 100. Кликнем на картинку и установим её свойства: Align – alClient (выравнивание картинки внутри главного окна) picture - выберите вашу картинку. Я взял скрин с нового номер журнала Игромании. У таймер поставьте свойство интервала в 10 мс и Enable поставьте true Напишем модули (но их писать не надо, т.к. они уже у Вас есть): MemoryUse.pas Metrik.pas Process.pas Sound.pas MemoryProtect.pas Вы можете увидеть их в готовом проекте Рис.4 Дальше сделаем обработчики события: кликаем на компонент, переходим во вкладку events (события), выбираем событие и по два раза кликаем мышкой на нём чтобы сформировать код обработки события. Теперь на о том как это делается. Кликаем на окно формы. Переходим в events и дальше как на рисунке Рис.5 Тоже самое теперь проделываем с таймером. Рис.6 И наконец, пишем код выделенный красной рамкой. Рис.7 Полный код представляет следующее. unit frmMain; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, jpeg; type TForm3 = class(TForm) Image1: TImage; Timer1: TTimer; procedure FormDestroy(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Timer1Timer(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form3: TForm3; implementation {$R *.dfm} uses Process,MemoryUse,MemoryProtect, Metrik, Sound; var Process : TProcess; MemWriter : TMemWriter; MemProtected : TMemProtected; procedure TForm3.FormCreate(Sender: TObject); begin Process:=TProcess.Create('test.exe'); MemWriter:=TMemWriter.Create(Process); end; procedure TForm3.FormDestroy(Sender: TObject); begin MemWriter.Free; Process.Free; end; procedure TForm3.Timer1Timer(Sender: TObject); begin if (GetAsyncKeyState(VK_F2)<>0) then // если нажата клавиша F2 то… begin MemProtected:= TMemProtected.Create(Process,$0045B5A4,4); // снимем защиту страницы памяти с адреса $0045B5A4 MemProtected.UnProtectPage; MemWriter.TryMemDIGWrite('$0045B5A4','100',_dword); // запишем адрес MemProtected.OldProtectPage; // восстановим защиту страницы памяти MemProtected.Destroy; sleep(500); // пауза, чтобы пользователь end; end; end. Компилируем проект: значок плей. В этот момент происходит компиляция и запуск приложения. Проверям. Нажимаем на F2 происходи звук. Кликаем на кнопку тестовой программы и мы видим, что число там стало не 117, а 101. Заключение. Это руководство всего лишь начальный старт для тех, кто только учится писать трейнеры например на Дельфи. Есть ещё более гибкий язык C++ поддерживается средой разработки Visual Studio. Именно на этой среде разработки создано множество игр под операционную систему Windows. На C++ как-то приятнее писать программы c WinAPI, т.е. трейнеры. Но он и гораздо сложнее, чем Дельфи. Так что выбор за вами. Здесь было рассмотрено, как создавать проект в Дельфи. Немного показано как работать с компонентами VCL, как формировать обработчики событий. Было показано как заставить трейнер реагировать на нажатие кнопки клавиатуры записывая значение по адресу. Вы также можете создать ещё один таймер2, который будет замораживать значения по адресу. Таймер горячих клавиш будет включать таймер2. procedure TForm3.Timer2Timer(Sender: TObject); begin if (cheat1 = true) begin MemWriter.TryMemDIGWrite('$0045B5A4','100',_dword); end; end; Не забудьте перед включением таймер2 использовать один раз MemProtected:= TMemProtected.Create(Process,$0045B5A4,4); // снимем защиту страницы памяти с адреса $0045B5A4 MemProtected.UnProtectPage; Без MemProtected.OldProtectPage; // восстановим защиту страницы памяти MemProtected.Destroy; sleep(500); // пауза, чтобы пользователь успел отпустить клавишу Когда вы выключите таймер2, то используйте MemProtected.OldProtectPage; // восстановим защиту страницы памяти MemProtected.Destroy; Недостатки этого трейнера: 1) Я описал поддержку записи только в адрес памяти простым методом. Но этого может "не хватить". Причина в том, что часто требуется запись в адрес по указателю. А иногда нужен индивидуальный подход к записи по адресу, когда указатель особенный. Бывают случаи когда цепочка указателей состоит из динамических звеньев [[[статичный адрес]+смещение1]+смещение2] = значение. Например, смещение 1 постоянно меняется, и найти его можно только через условие, которое можно оформить только программным путём. Например, Если [[[статичный адрес]+0x250] равно 0x14, то { смещение1 = [[[статичный адрес]+0x254] [[[статичный адрес]+смещение1]+смещение2] = значение. } Т.е. в данном случае имеем динамический массив объектов, которые часто перетасовываются во время игры. Объекты содержат свой собственный тип. Игра обращается к адресу объекта приводя его к типу, а тип получает по идентификатору, который объект содержит в своей структуре. В общем тут свои сложности. 2) В сжатом виде, если запаковать пакером этот трейнер занимает 270 кб. Можно использовать WinAPI и тогда он будет меньше. 3) Тем не менее, всё это не то. Трейнер по моему представлению должен представлять из себя загрузчик .dll в процесс игры. И там эта .dll ка может творить многие вещи. Тем более dll-ку можно писать на языке высокого уровня и удобно делать очень сложные читы, которые на ассемблере в скриптах Cheat Engine писать трудоёмко. Если у вас есть вопросы, то их можно задать у нас на форуме.
    1 балл
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.