delphi 外挂编写的几个API函数


本文整理自网络,侵删。

 3个 API函数
  GetWindowThreadProcessId :获取进程ID 
  OpenProcess              :获取进程句柄     
  ReadProcessMemory        :读出指定进程 指定位置 的数据到缓冲区 
DWORD GetWindowThreadProcessId(
  HWND hWnd,             // 窗口句柄 由FindWindow获取
  LPDWORD lpdwProcessId  // 存放进程ID的 变量
);

HANDLE OpenProcess(
  DWORD dwDesiredAccess,    // PROCESS_VM_READ or PROCESS_VM_WRITE 访问权限
  BOOL bInheritHandle,      // 这个是继承标志 在这里 为false
  DWORD dwProcessId         // 进程ID  由GetWindowThreadProcessId 获取
);
BOOL ReadProcessMemory(
  HANDLE hProcess,            // 进程句柄 由OpenProcess函数获取
  LPCVOID lpBaseAddress,      // 要读出数据的地址:$47d814
  LPVOID lpBuffer,            // 用于存放读取数据的地址:sitNum
  DWORD nSize,                // 要读出的数据大小  4
  LPDWORD lpNumberOfBytesRead // 读出数据的实际大小 
);

一.读指定进程内存:ReadProcessMemory
  此函数的定义为:function ReadProcessMemory(hProcess: THandle; const lpBaseAddress: Pointer; lpBuffer: Pointer; nSize: DWORD; var lpNumberOfBytesRead: DWORD): BOOL; stdcall;
  hProcess指向被读取内存的进程的句柄,此句柄必须有PROCESS_VM_READ权限.
  lpBaseAddress:指向被读取的内存在进程中基地址的指针.
  lpBuffer:指向用于保存读出数据的缓冲区的指针.
  nSize:指定从指定进程中要读取的字节数.
  lpNumberOfBytesRead:指向读出数据的实际字节数.

二.写指定进程内存:WriteProcessMemory
  此函数的定义为:function WriteProcessMemory(hProcess: THandle; const lpBaseAddress: Pointer; lpBuffer: Pointer; nSize: DWORD; var lpNumberOfBytesWritten: DWORD): BOOL; stdcall;
参数含义同ReadProcessMemory,其中hProcess句柄要有对进程的PROCESS_VM_WRITE和PROCESS_VM_OPERATION权限.lpBuffer为要写到指定进程的数据的指针.





procedure TForm1.Timer1Timer(Sender: TObject);
var
  hgame:HWND;
  pidgame:DWORD;
  hprocess:HWND;
  chessdata:DWORD;
  readbyte:DWORD;
  meney:DWORD;

begin
    meney:=10000;
  //获取游戏窗口句柄
    hGame:=Findwindow(nil,'Red Alert 2');
    //获取游戏进程 PID
    windows.GetWindowThreadProcessId(hGame,PidGame) ;
    //获取游戏进程句柄
    hProcess:=windows.OpenProcess(windows.PROCESS_ALL_ACCESS,false,PidGame);
      if hgame<>0 then Label1.Caption:='游戏运行中'

      else
      Label1.Caption:='游戏未启动';

      if CheckBox1.Checked then  //写数据
      meneyxg;
    //  WriteProcessMemory(hprocess,Pointer($00a1e0c4),@ChessData,4,readbyte);



      //读出数据
      ReadProcessMemory(hProcess,Pointer($00a1e0c4),@ChessData,4,readByte);
      ReadProcessMemory(hProcess,Pointer(ChessData+$24c),@ChessData,4,readByte);

      if Label1.Caption='游戏运行中' then Label2.Caption:='金钱:'+IntToStr(chessdata)
      else
      Label2.Caption:='';

       //释放进程句柄
      CloseHandle(Hprocess);
end;



  procedure meneyxg();
var
hgame:HWND;
  pidgame:DWORD;
  hprocess:HWND;
  chessdata:DWORD;
  readbyte:DWORD;
  money:DWORD;
begin
     //  ChessData:=1000;
  //获取游戏窗口句柄
    hGame:=Findwindow(nil,'Red Alert 2');
    //获取游戏进程 PID
    windows.GetWindowThreadProcessId(hGame,PidGame) ;
    //获取游戏进程句柄
    hProcess:=windows.OpenProcess(windows.PROCESS_ALL_ACCESS,false,PidGame);
    ReadProcessMemory(hProcess,Pointer($a1e0c4),@ChessData,4,readByte);
     money:=10000;
    WriteProcessMemory(hprocess,Pointer(ChessData+$24c),@money,4,readbyte);          //释放进程句柄
      CloseHandle(Hprocess);
end;

相关阅读 >>

Delphi 判断目录是否存在,不存在则创建目录并打开,存在则直接打开

Delphi 有授权许可的字符串拷贝函数源码

Delphi 建立最小的应用程序

Delphi 内存管理[4]

Delphi 给字加边的又一个算法

Delphi dll创建并调用

Delphi tms web core 在线pdf教程

Delphi中补齐字符串长度

Delphi twebbrowser:确定带有框架的页面何时完成

Delphi 自定义colorbox只显示指定颜色项目 colorbox显示中文颜色名称

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



打赏

取消

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

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

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

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

评论

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