Delphi中对进程内存进行读写


本文整理自网络,侵删。

 
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,TlHelp32,
  StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  StartInfo: TStartupInfo;
  ProcInfo: TProcessInformation;
  ProcessHndle,PID: HWND;
  BytesRead : DWORD;
  TmpData : array[0..1] of Byte;
  FilePath:String;

const
  OldData : array[0..1] of byte = ($75,$10);   // 原值
  NewData : array[0..1] of byte = ($90,$90);   // 修改值

implementation

{$R *.DFM}

function FindPath(PID:dword):String;   // 查寻程序路径
var
  H: THandle;
  TM: TModuleEntry32;
begin
  Result:='';
  H := CreateToolHelp32SnapShot(TH32CS_SNAPMODULE,PID);
  if H > 0 then
  begin
    TM.dwSize := sizeof(TM);
    Module32First(H, TM);
    Result:=TM.szExePath;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
Var
  H: THandle;
begin
  H:= FindWindow(nil,'test');
  if H = 0 then
  begin
   MessageBox(0,#13+'程序未运行!请仔细检查...!!!','系统提示',0);
   Exit;
  end;
  GetWindowThreadProcessId(H, @PID);
  FilePath := FindPath(PID);
  if FilePath='' then Exit;
  ProcessHndle:=OpenProcess(PROCESS_TERMINATE,FALSE,PID);
  if ProcessHndle = 0 then  Exit;
  TerminateProcess(ProcessHndle, 0);
  CloseHandle(ProcessHndle);


  ZeroMemory(@StartInfo, SizeOf(TStartupInfo));
  StartInfo.cb := SizeOf(TStartupInfo);
  if not CreateProcess(nil,Pchar(FilePath), nil, nil, False, Create_Suspended, nil, nil, StartInfo, ProcInfo) then Exit;
  ReadProcessMemory(ProcInfo.hProcess,Pointer($4277D9),@TmpData,2,BytesRead);
  if (TmpData[0] = OldData[0]) and (TmpData[1] = OldData[1]) then
  begin
  if WriteProcessMemory(ProcInfo.hProcess, Pointer($4277D9), @NewData, 2, BytesRead)  then
   MessageBox(0,'恭喜补丁成功','系统提示',64) else  MessageBox(0,'不好意思补丁失败','系统提示',64)
  end;

  ResumeThread(ProcInfo.hThread);
  CloseHandle(ProcInfo.hProcess);
  CloseHandle(ProcInfo.hThread);
end;

end.

相关阅读 >>

Delphi判断字符串是否为数字

Delphi学习sql语句 - insert、update、delete

Delphi跨平台检测网络连接状态

Delphi datasnap双缓存下载文件

Delphi 中相对路径与绝对路径、系统环境变量等相关函数说明

Delphi通过代码实现模拟按键的函数

Delphi版本qq木马

Delphi 过滤开头 结尾 全部 空格的函数

Delphi 判断目录是否可写

Delphi 判断端口(port)是否被占用

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...