Содержание материала

Code:

unit uvirtalloc;

 

interface

 

uses

Windows, SysUtils;

 

function CreateRemoteBuffer(Pid : DWord; Size: Dword): PByte;

procedure WriteToRemoteBuffer(Source : PByte;

                              Dest : PByte;

                              Count : Dword);

 

function ReadRemoteBuffer (Source : PByte;

                           Dest : PByte;

                           Count : Dword): Dword;

 

procedure DestroyRemoteBuffer;

 

implementation

 

var

hProcess : THandle;

RemoteBufferAddr: PByte;

BuffSize : DWord;

 

function CreateRemoteBuffer;

begin

RemoteBufferAddr := nil;

hProcess := OpenProcess(PROCESS_ALL_ACCESS, FALSE, Pid);

if (hProcess = 0) then

   RaiseLastWin32Error;

 

Result := VirtualAllocEx(hProcess,

                           nil,

                           Size,

                           MEM_COMMIT,

                           PAGE_EXECUTE_READWRITE);

 

Win32Check(Result <> nil);

RemoteBufferAddr := Result;

BuffSize := Size;

end;

 

procedure WriteToRemoteBuffer;

var

BytesWritten: Dword;

begin

if hProcess = 0 then

  Exit;

Win32Check(WriteProcessMemory(hProcess,

                               Dest,

                               Source,

                               Count,

                               BytesWritten));

end;

 

function ReadRemoteBuffer;

begin

Result := 0;

if hProcess = 0 then

    Exit;

 

Win32Check(ReadProcessMemory(hProcess,

                               Source,

                               Dest ,

                               Count,

                               Result));

end;

 

procedure DestroyRemoteBuffer;

begin

  if (hProcess > 0then

    begin

      if Assigned(RemoteBufferAddr) then

        Win32Check(Boolean(VirtualFreeEx(hProcess,

                                         RemoteBufferAddr,

                                         0,

                                         MEM_RELEASE)));

      CloseHandle(hProcess);

    end;

end;

 

end.

 

Взято с сайта https://www.swissdelphicenter.ch/en/tipsindex.php

Добавить комментарий

Не использовать не нормативную лексику.

Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.

ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!


Защитный код
Обновить