MikeRohsoft icon

Untitled

MikeRohsoft | PRO | 10/24/17 05:32:41 PM UTC | 0 ⭐ | 10333 👁️ | Never ⏰ | []
Delphi |

5.25 KB

|

None

|

0 👍

/

0 👎

unit Unit1;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls, Windows, JwaPsApi, Process;
type
 
  { TForm1 }
 
  TForm1 = class(TForm)
    Memo: TMemo;
    procedure FormShow(Sender: TObject);
    procedure Inject(pid: cardinal; const DllPath: string);
  private
    { private declarations }
  public
    { public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.lfm}
 
{ TForm1 }
 
function GetPathFromPID(const PID: cardinal): string;
var
  hProcess: THandle;
  path: array[0..MAX_PATH - 1] of char;
begin
  hProcess := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, false, PID);
  if hProcess <> 0 then
    try
      if GetModuleFileNameEx(hProcess, 0, path, MAX_PATH) = 0 then
        RaiseLastOSError;
      result := path;
    finally
      CloseHandle(hProcess)
    end
  else
    RaiseLastOSError;
end;
 
procedure RunShellExecute(const prog: string; params: array of string);
var
  AProcess: TProcess;
  i: integer;
begin
  AProcess := TProcess.Create(nil);
  AProcess.Executable:= prog;
  for i := 0 to Length(params) - 1 do
    AProcess.Parameters.Add(params[i]);
  AProcess.Options := AProcess.Options + [poWaitOnExit];
  AProcess.Execute;
  AProcess.Free;
end;
 
procedure TForm1.Inject(pid: cardinal; const DllPath: string);
  label INVALID_PROCESS_HANDLE;
  label FIILE_NOT_FOUND;
  label CANT_ALLOCATE_MEMORY;
  label CANT_WRITE_IN_PROCESS;
  label CANT_CREATE_REMOTE_THREAD;
  label PROCEDURE_END;
var
  ProccessHandle: THandle;
  pDLLPath: Pointer;
  BytesWritten: SIZE_T;
  ThreadID: cardinal;
begin
  ProccessHandle := OpenProcess(PROCESS_ALL_ACCESS, false, pid);
  if ProccessHandle = 0 then
    goto INVALID_PROCESS_HANDLE;
 
  if not FileExists(DllPath) then
    goto FIILE_NOT_FOUND;
 
  pDLLPath := VirtualAllocEx(ProccessHandle, nil, Length(DLLPath), MEM_COMMIT, PAGE_EXECUTE_READWRITE);
  if not Assigned(pDLLPath) then
    goto CANT_ALLOCATE_MEMORY;
 
  if not WriteProcessMemory(ProccessHandle, pDLLPath, PChar(DLLPath), Length(DLLPath), BytesWritten) then
    goto CANT_WRITE_IN_PROCESS;
 
  if CreateRemoteThread(ProccessHandle, nil, 0, GetProcAddress(GetModuleHandle('kernel32.dll'), 'LoadLibraryA'), pDLLPath, 0, ThreadID) = 0 then
    goto CANT_CREATE_REMOTE_THREAD;
 
   Memo.Lines.Add('Process Successfully Injected');
     goto PROCEDURE_END;
 
  INVALID_PROCESS_HANDLE:
    Memo.Lines.Add('Invalid Process Handle');
    goto PROCEDURE_END;
 
  FIILE_NOT_FOUND:
    Memo.Lines.Add(DllPath + ' not found');
    goto PROCEDURE_END;
 
  CANT_ALLOCATE_MEMORY:
    Memo.Lines.Add('Can''t Allocate Memory');
    goto PROCEDURE_END;
 
  CANT_WRITE_IN_PROCESS:
    Memo.Lines.Add('Can''t write into Process');
    goto PROCEDURE_END;
 
  CANT_CREATE_REMOTE_THREAD:
    Memo.Lines.Add('Can''t create Thread in Process');
    goto PROCEDURE_END;
  PROCEDURE_END:
    exit();
end;
 
procedure TForm1.FormShow(Sender: TObject);
  label PROCESS_NOT_FOUND;
  label PROCESS_PATH_NOT_FOUND;
  label CANT_COPY_FILE;
  label CANT_OBFUSCATE_FILE;
  label CANT_DELETE_FILE;
  label ROUTINE_END;
  label ROUTINE_EXIT;
const
  DESKING_DLL = 'official.menu';
  BUFFER_DLL = 'toInject.dll';
var
  cpid: cardinal;
  wHandle: cardinal;
  sProcessPath: string;
  sDeskingDllPath: PChar;
  sL: TStringList;
  i: integer;
begin
  cpid := 0;
  Memo.Lines.Add('Official Injector  v1.33.7');
  wHandle := FindWindow('grcWindow', nil);
  if wHandle = 0 then
    goto PROCESS_NOT_FOUND;
 
  GetWindowThreadProcessID(wHandle, @cpid);
  if cpid = 0 then
    goto PROCESS_NOT_FOUND;
 
  Memo.Lines.Add('GTA 5 found.');
 
  sProcessPath := ExtractFilePath(GetPathFromPID(cpid));
  if sProcessPath = '' then
    goto PROCESS_PATH_NOT_FOUND;
 
  Memo.Lines.Add('Process Path: ' + sProcessPath);
 
  if FileExists(BUFFER_DLL) and not DeleteFile(BUFFER_DLL) then
    goto CANT_DELETE_FILE;
 
  sDeskingDllPath := PChar(sProcessPath + DESKING_DLL);
 
  if FileExists(sDeskingDllPath) and not DeleteFile(sDeskingDllPath) then
    goto CANT_DELETE_FILE;
 
  if not CopyFile(DESKING_DLL, BUFFER_DLL, false) then
    goto CANT_COPY_FILE;
 
  //RunShellExecute('upx.exe', ['-' + IntToStr(random(9) + 1), BUFFER_DLL]);
 
  if not CopyFile(BUFFER_DLL, PChar(sDeskingDllPath), false) then
    goto CANT_COPY_FILE;
 
  Inject(cpid, sDeskingDllPath);
  goto ROUTINE_EXIT;
 
  PROCESS_NOT_FOUND:
    Memo.Lines.Add('GTA not found, pls Start GTA before you start the Injector');
    goto ROUTINE_END;
 
  PROCESS_PATH_NOT_FOUND:
    Memo.Lines.Add('GTA Process Path not found');
    goto ROUTINE_END;
 
  CANT_COPY_FILE:
    Memo.Lines.Add('Copy Operation failed');
    goto ROUTINE_END;
 
  CANT_OBFUSCATE_FILE:
    Memo.Lines.Add('made by Mike Rohsoft');
    goto ROUTINE_END;
 
  CANT_DELETE_FILE:
    Memo.Lines.Add('Delete Operation failed');
    goto ROUTINE_END;
 
  ROUTINE_END:
    Memo.Lines.Add('Please fix the Issues and restart this App');
    goto ROUTINE_EXIT;
 
  ROUTINE_EXIT:
    Memo.Lines.Add('Please close this Application');
    sL := TStringList.Create();
 
    for i := 0 to Memo.Lines.Count -1 do
      sL.Add(Memo.Lines[i]);
 
   sL.SaveToFile('log.txt');
 
   sL.Free;
 
   exit();
end;
 
end.

Comments

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎

    
        
  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎