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

muxa_one

Пользователи
  • Постов

    29
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные muxa_one


  1. unit Unit1;

    interface

    uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics,
    Controls, Forms, Dialogs,TlHelp32, StdCtrls;

    type
    TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    GroupBox1: TGroupBox;
    Button1: TButton;
    Button2: TButton;
    GroupBox2: TGroupBox;
    CheckBox1: TCheckBox;
    GroupBox3: TGroupBox;
    Button3: TButton;
    Button4: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure CheckBox1Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    private
    { Private declarations }
    public
    { Public declarations }
    end;

    var
    Form1: TForm1;
    prID: Cardinal;

    implementation

    {$R *.dfm}
    //Процедура записи байт в процесс игры
    procedure WriteSignatyre(GameID: Cardinal; PokeAddr: Integer; PokeVal: array of Byte);
    var
    pHandle:LongInt;
    numwritten:SIZE_T;//Если будет ошибка заменить SIZE_T на Cardinal
    begin
    pHandle:=OpenProcess(PROCESS_VM_READ or PROCESS_VM_WRITE or PROCESS_VM_OPERATION,false,GameID);
    WriteProcessMemory(pHandle,ptr(PokeAddr),@PokeVal,SizeOf(PokeVal),numwritten);
    CloseHandle(pHandle);
    end;

    //Процедура получения ID зная название процесса
    function GetProcess(FileName: string): Cardinal;
    var
    hSnap:THandle;
    prEntry:PROCESSENTRY32;
    begin
    Result:=0;
    hSnap:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
    prEntry.dwSize:=SizeOf(prEntry);
    If Process32First(hSnap,prEntry) then
    begin
    While Process32Next(hSnap,prEntry) do
    Begin
    If prEntry.szExeFile = FileName then
    Result:=Cardinal(prEntry.th32ProcessID);
    End;
    end;
    CloseHandle(hSnap);
    end;

    //Нажатие на кнопку
    procedure TForm1.Button1Click(Sender: TObject);
    const
    ProcessName='PlantsVsZombies.exe';//Процесс Игры
    Adress = $0048B35C ; //Адрес по которому будет производиться запись сигнатуры байт
    SignatyreOn: array[0..3] of Byte = ($83,$47,$24,$67);//Байты для записи в процесс игры
    SignatyreOFF: array[0..3] of Byte = ($83,$47,$24,$01);//Байты для записи в процесс игры
    begin
    prID:=GetProcess(ProcessName);//Получаем ID процесса по названию процесса

    WriteSignatyre(prID,Adress,SignatyreOn);//Пример записи байт в память
    End;

    procedure TForm1.Button2Click(Sender: TObject);
    const
    ProcessName='PlantsVsZombies.exe';//Процесс Игры
    Adress = $0048B35C ; //Адрес по которому будет производиться запись сигнатуры байт
    SignatyreOFF: array[0..3] of Byte = ($83,$47,$24,$01);//Байты для записи в процесс игры
    begin
    prID:=GetProcess(ProcessName);//Получаем ID процесса по названию процесса
    WriteSignatyre(prID,Adress,SignatyreOFF);//Пример записи байт в память
    End;

    procedure TForm1.Button3Click(Sender: TObject);
    const
    ProcessName='PlantsVsZombies.exe';//Процесс Игры
    Adress = $0048B35C ; //Адрес по которому будет производиться запись сигнатуры байт
    SignatyreOn: array[0..3] of Byte = ($83,$47,$24,$67);//Байты для записи в процесс игры
    begin
    prID:=GetProcess(ProcessName);//Получаем ID процесса по названию процесса
    if prID = 0 then begin
    Application.MessageBox('Процесс не найден', 'Предупреждение', MB_OK +
    MB_ICONINFORMATION);
    end else begin
    Application.MessageBox('Активировано', 'Предупреждение', MB_OK +
    MB_ICONINFORMATION);
    WriteSignatyre(prID,Adress,SignatyreOn);//Пример записи байт в память
    End;
    end;

    procedure TForm1.Button4Click(Sender: TObject);
    const
    ProcessName='PlantsVsZombies.exe';//Процесс Игры
    Adress = $0048B35C ; //Адрес по которому будет производиться запись сигнатуры байт
    SignatyreOFF: array[0..3] of Byte = ($83,$47,$24,$01);//Байты для записи в процесс игры
    begin
    prID:=GetProcess(ProcessName);//Получаем ID процесса по названию процесса
    if prID = 0 then begin
    Application.MessageBox('Процесс не найден', 'Предупреждение', MB_OK +
    MB_ICONINFORMATION);
    end else begin
    Application.MessageBox('Деактивировано', 'Предупреждение', MB_OK +
    MB_ICONINFORMATION);

    WriteSignatyre(prID,Adress,SignatyreOFF);//Пример записи байт в память
    End;
    end;

    //Пример записи в процесс на чекбоксе
    procedure TForm1.CheckBox1Click(Sender: TObject);
    const
    ProcessName='PlantsVsZombies.exe';//Процесс Игры
    Adress = $0048B35C ; //Адрес по которому будет производиться запись сигнатуры байт
    SignatyreOn: array[0..3] of Byte = ($83,$47,$24,$67);//Байты для записи в процесс игры
    SignatyreOFF: array[0..3] of Byte = ($83,$47,$24,$01);//Байты для записи в процесс игры
    begin
    if CheckBox1.Checked = True then begin
    prID:=GetProcess(ProcessName);//Получаем ID процесса по названию процесса
    WriteSignatyre(prID,Adress,SignatyreOn);//Пример записи байт в память
    CheckBox1.Caption := 'Деактивировать';
    end else begin
    prID:=GetProcess(ProcessName);//Получаем ID процесса по названию процесса
    WriteSignatyre(prID,Adress,SignatyreOFF);//Пример записи байт в память
    CheckBox1.Caption := 'Активировать';
    end;end;

    end.

    Спасибо большое, попробую.

    Все работает идеально не выкидывает, еще раз спасибо.

  2. Доброго времени суток, собственно имеется такой код:


    unit Unit1;
    interface
    uses
    Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
    Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.Buttons, Vcl.StdCtrls;
    type
    TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    private
    { Private declarations }
    public
    { Public declarations }
    end;
    var
    Form1: TForm1;
    WindowName : integer;
    ProcessId : integer;
    ThreadId : integer;
    buf : PChar;
    HandleWindow : Integer;
    write : NativeUInt;
    Const WindowTitle = '**';
    Отдача = $E3788A;
    СигнОтдача = $9090;
    NumberOfBytes = 1;
    implementation
    {$R *.dfm}
    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);
    GetMem(buf,1);
    buf^ := Chr(СигнОтдача);
    WriteProcessMemory(HandleWindow,ptr(Отдача),buf,NumberOfBytes,write);
    FreeMem(buf);
    CloseHandle(HandleWindow);
    end;
    procedure TForm1.FormCreate(Sender: TObject);
    begin
    end;
    end.

    После нажатия на кнопку игра зависает и выкидывает, что можно сделать чтобы этого не происходило?

  3. Доброго времени суток, написал трейнер на C#. Нашел нужный адрес и изменил его, трейнер работает. После перезапуска игры, адрес изменяется и трейнер больше не может обнаружить его. Что делать?

×
×
  • Создать...

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

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