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
0 B
|👍
/👎
0 B
|👍
/👎