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

[DELPHI] После замены байтов выкидывает из игры


Рекомендуемые сообщения

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


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.

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

Ссылка на комментарий
Поделиться на другие сайты

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

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


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.

  • Плюс 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.

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

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

Ссылка на комментарий
Поделиться на другие сайты

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

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

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