muxa_one Опубликовано 21 апреля, 2014 Поделиться Опубликовано 21 апреля, 2014 Доброго времени суток, собственно имеется такой код:unit Unit1;interfaceuses 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);beginWindowName := FindWindow(nil,WindowTitle);If WindowName = 0 thenbeginMessageDlg('Запустите игру.', 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);beginend;end.После нажатия на кнопку игра зависает и выкидывает, что можно сделать чтобы этого не происходило? Ссылка на комментарий Поделиться на другие сайты Поделиться
DenkA003 Опубликовано 21 апреля, 2014 Поделиться Опубликовано 21 апреля, 2014 Доброго времени суток, собственно имеется такой код:После нажатия на кнопку игра зависает и выкидывает, что можно сделать чтобы этого не происходило?unit Unit1;interfaceuses 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 на Cardinalbegin 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);//Байты для записи в процесс игрыbeginprID:=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);//Байты для записи в процесс игрыbeginprID:=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);//Байты для записи в процесс игрыbeginprID:=GetProcess(ProcessName);//Получаем ID процесса по названию процессаif prID = 0 then beginApplication.MessageBox('Процесс не найден', 'Предупреждение', MB_OK + MB_ICONINFORMATION);end else beginApplication.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);//Байты для записи в процесс игрыbeginprID:=GetProcess(ProcessName);//Получаем ID процесса по названию процессаif prID = 0 then beginApplication.MessageBox('Процесс не найден', 'Предупреждение', MB_OK + MB_ICONINFORMATION);end else beginApplication.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);//Байты для записи в процесс игрыbeginif CheckBox1.Checked = True then beginprID:=GetProcess(ProcessName);//Получаем ID процесса по названию процессаWriteSignatyre(prID,Adress,SignatyreOn);//Пример записи байт в памятьCheckBox1.Caption := 'Деактивировать';end else beginprID:=GetProcess(ProcessName);//Получаем ID процесса по названию процессаWriteSignatyre(prID,Adress,SignatyreOFF);//Пример записи байт в памятьCheckBox1.Caption := 'Активировать';end;end;end. 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
muxa_one Опубликовано 22 апреля, 2014 Автор Поделиться Опубликовано 22 апреля, 2014 unit Unit1;interfaceuses 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 на Cardinalbegin 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);//Байты для записи в процесс игрыbeginprID:=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);//Байты для записи в процесс игрыbeginprID:=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);//Байты для записи в процесс игрыbeginprID:=GetProcess(ProcessName);//Получаем ID процесса по названию процессаif prID = 0 then beginApplication.MessageBox('Процесс не найден', 'Предупреждение', MB_OK + MB_ICONINFORMATION);end else beginApplication.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);//Байты для записи в процесс игрыbeginprID:=GetProcess(ProcessName);//Получаем ID процесса по названию процессаif prID = 0 then beginApplication.MessageBox('Процесс не найден', 'Предупреждение', MB_OK + MB_ICONINFORMATION);end else beginApplication.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);//Байты для записи в процесс игрыbeginif CheckBox1.Checked = True then beginprID:=GetProcess(ProcessName);//Получаем ID процесса по названию процессаWriteSignatyre(prID,Adress,SignatyreOn);//Пример записи байт в памятьCheckBox1.Caption := 'Деактивировать';end else beginprID:=GetProcess(ProcessName);//Получаем ID процесса по названию процессаWriteSignatyre(prID,Adress,SignatyreOFF);//Пример записи байт в памятьCheckBox1.Caption := 'Активировать';end;end;end.Спасибо большое, попробую.Все работает идеально не выкидывает, еще раз спасибо. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения