首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

关于WriteProcessMemory?(VC代码 译DELPHIL) 5元酬谢!(支付宝支付QQ47537815),该如何处理

2012-02-12 
关于WriteProcessMemory?(VC代码 译DELPHIL) 5元酬谢!(支付宝支付QQ47537815)尝试想把VC++代码 转译DELPHI

关于WriteProcessMemory?(VC代码 译DELPHIL) 5元酬谢!(支付宝支付QQ47537815)
尝试想把VC++代码 转译DELPHI 代码,本人对WriteProcessMemory 理解不够,望高手指点
VC++代码

#include<windows.h>

int APIENTRY WinMain(HINSTANCE hInstance,
  HINSTANCE hPrevInstance,
  LPSTR lpCmdLine,
  int nCmdShow)
 
{

//OBJIP
unsigned int OBJ_ip=0x0040567D;//修改潜艇生命数代码的偏移地址
unsigned int OBJ_patch[1]={0x89CA8B90};//其中的90则是NOP的十六进制

HWND hwndOBJ=FindWindow(NULL,"潜艇大战");//获得游戏的窗口句柄
DWORD PID;
HANDLE hProcess;

if (hwndOBJ!=0)
{
SetForegroundWindow(hwndOBJ);//找到句柄后将游戏设置为当前窗口
GetWindowThreadProcessId(hwndOBJ,&PID);//得到游戏的进程ID
hProcess=OpenProcess(PROCESS_ALL_ACCESS,false,PID);//打开游戏进程
WriteProcessMemory(hProcess,(void *)OBJ_ip,OBJ_patch,1,0);//写入修改后的代码

CloseHandle(hwndOBJ);
CloseHandle(hProcess);
}
else
MessageBox(NULL,"游戏还没有启动吧?","错误!",NULL);



return 0;
}


DELPHI代码


unit call;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
type
  TForm1 = class(TForm)
  Edit1: TEdit;
  Button1: TButton;
  procedure Button1Click(Sender: TObject);

  private
  { Private declarations }
  public
  { Public declarations }
  end;

var
  Form1: TForm1;
implementation

{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);

var
hwndobj: HWND;
PID,n:DWORD;
hProcess:THandle;
 const
obj_ip: dword = $0040567D;
obj_patch: dword =$89CA8B90;

begin

  hwndOBJ:=FindWindow('潜艇大战',nil);//获得游戏的窗口句柄
SetForegroundWindow(hwndOBJ);//找到句柄后将游戏设置为当前窗口
GetWindowThreadProcessId(hwndOBJ,@PID);//得到游戏的进程ID
hProcess:=OpenProcess(PROCESS_ALL_ACCESS,false,PID);//打开游戏进程
WriteProcessMemory(hprocess, Pointer(obj_ip), pointer(@obj_patch),1,0)// 就是这边出错啦
CloseHandle(hwndOBJ);
CloseHandle(hProcess);


end;
end.



[解决办法]

Delphi(Pascal) code
const  OBJ_ip = $0040567D; //修改潜艇生命数代码的偏移地址  OBJ_patch: array[0..0] of Longword = ($89CA8B90); //其中的90则是NOP的十六进制var  hwndOBJ: THandle;  PID: DWORD;  hProcess: THandle;  vNumberOfBytesWritten: DWORD;begin  hwndOBJ := FindWindow(nil, '潜艇大战'); //获得游戏的窗口句柄  if hwndOBJ <> 0 then  begin    SetForegroundWindow(hwndOBJ); // 找到句柄后将游戏设置为当前窗口    GetWindowThreadProcessId(hwndOBJ, @PID); // 得到游戏的进程ID    hProcess := OpenProcess(PROCESS_ALL_ACCESS, False, PID); //打开游戏进程    WriteProcessMemory(hProcess, Pointer(OBJ_ip), @OBJ_patch[0],      SizeOf(OBJ_patch), vNumberOfBytesWritten); //写入修改后的代码    CloseHandle(hwndOBJ);    CloseHandle(hProcess);  end else MessageBox(0, '游戏还没有启动吧?','错误!', 0);end; 

热点排行