Помогите переделать трейнер по поиску сигнатуры[Delphi]

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Normiq, 11 Nov 2013.

  1. Normiq

    Normiq New Member

    Joined:
    12 Jan 2013
    Messages:
    1
    Likes Received:
    0
    Reputations:
    0
    Я написал трейнера что бы он изменял сигнатуру по адресу как сделать так что бы он изменял по сигнатуре тоисть что бы её находил и изменял
    Вот код трейнера :
    Code:
    unit Unit3;
     
    interface
     
     
    uses
      Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
      Vcl.Controls, Vcl.Forms, Vcl.Dialogs, StdCtrls, ExtCtrls, TLhelp32, sButton,
      sSkinManager, sComboBox, sListBox;
     
     
    type
      TForm3 = class(TForm)
        sButton1: TsButton;
        sSkinManager1: TsSkinManager;
        procedure sButton1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;
     
     
    var
    hProcess: THandle;
      Form3: TForm3;
       PidHandle: integer;
      PidID : integer;
      byteArr : Array of byte;
      lpNumberOfBytesWritten: SIZE_T;
        lpBaseAddress: Pointer;
      lpBuffer: Pointer;
      nSize: SIZE_T;
    Const
      ProgramName = 'opera.exe';
    implementation
     
     
     
     
    {$R *.dfm}
     
     
     function GetProcessID(Const ExeFileName: string; var ProcessId: integer): boolean;
    var
      ContinueLoop: BOOL;
      FSnapshotHandle: THandle;
      FProcessEntry32: TProcessEntry32;
    begin
      result := false;
      FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
      FProcessEntry32.dwSize := Sizeof(FProcessEntry32);
      ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);
      while integer(ContinueLoop) <> 0 do begin
    	if (StrIComp(PChar(ExtractFileName(FProcessEntry32.szExeFile)), PChar(ExeFileName)) = 0)
    	   or (StrIComp(FProcessEntry32.szExeFile, PChar(ExeFileName)) = 0)  then begin
    	   ProcessId:= FProcessEntry32.th32ProcessID;
    	   result := true;
    	   break;
    	end;
    	ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
      end;
      CloseHandle(FSnapshotHandle);
    end;
     
     
     
     
     
     
    procedure pokeX(Address: Cardinal; Data: Array of Byte);
    var
    Written: Cardinal;
    begin
      WriteProcessMemory(PidHandle, Pointer(Address), @Data, SizeOf(Data), lpNumberOfBytesWritten);
    end;
     
     
     
     
    procedure TForm3.sButton1Click(Sender: TObject);
    var
      byteArr : Array of byte;
    begin
    if GetProcessID(ProgramName, PidId) then
      begin
        PidHandle  :=  OpenProcess(PROCESS_ALL_ACCESS,False,PidId);
    	  SetLength(byteArr, 4);
     	  byteArr[0] := $90;
     	  byteArr[1] := $90;
     	  byteArr[2] := $90;
     	  byteArr[3] := $8B;
    	  pokeX($0F49722E, byteArr); //наш адрес
     	  SetLength(byteArr, 0);
    	  closehandle(PidHandle);
        SHOWMESSAGE('Изменения внесены, для их применения необходимо перезапустить игру на текущем уровне сложности');
      end
    else
      begin
    	  MessageDlg('Сначала запустите Сапёр!', mtwarning, [mbOK],0);
      end;
    end;
     
     
     
     
    end.
    Трейнер делаю для онлайн флеш игры где адрес меняется после перезагрузки