delphi修改exe指定地址的内容
项目 Project1.exe
------------------
program Project1;
uses
<wbr> Forms,Windows, Messages,SysUtils,<br><wbr> Unit1 in 'Unit1.pas' {Form1};</wbr></wbr>
{$R *.res}
begin
<wbr> Application.Initialize;<br><wbr>// Application.Title := 'TestOD';<br><wbr>
MessageBox(Application.Handle,pchar(inttostr(Application.Handle)),pchar('hello1'),0);<br><wbr>
MessageBox(Application.Handle,pchar('abc1'),pchar('hello1'),0);<br><wbr> Application.Run;<br><wbr> Application.Terminate;<br><wbr> Application.CreateForm(TForm1, Form1);</wbr></wbr></wbr></wbr></wbr></wbr></wbr>
end.
===================================
项目 Project2.exe
------------------
unit Unit2;
interface
uses
<wbr> Windows, Messages, SysUtils, Variants, Classes,
Graphics, Controls, Forms,<br><wbr> Dialogs, StdCtrls,Tlhelp32;</wbr></wbr>
type
<wbr> TForm1 = class(TForm)<br><wbr><wbr><wbr> Button1:
TButton;<br><wbr><wbr><wbr> Button2:
TButton;<br><wbr><wbr><wbr> ListBox1:
TListBox;<br><wbr><wbr><wbr> procedure
Button1Click(Sender: TObject);<br><wbr><wbr><wbr> procedure
Button2Click(Sender: TObject);<br><wbr> private<br><wbr><wbr><wbr> { Private
declarations }<br><wbr> public<br><wbr><wbr><wbr> { Public
declarations }<br><wbr> end;<br><wbr> function FindProcessID(s:string):integer;<br>
var<br><wbr> Form1: TForm1;<br><wbr><wbr><wbr> NewSpeed :
array[0..2] of byte =($71,$7A,$66); //qzf</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
<wbr>Gameh:HWND;<br><wbr>GamePid:DWORD;<br><wbr>Gamehprocess: THandle;<br><wbr>WriteByte:DWORD;<wbr><wbr><wbr>
//实际写入字节数</wbr></wbr></wbr></wbr></wbr></wbr></wbr>
begin
<wbr> //获取游戏窗口句柄<br><wbr> //Gameh:=findwindow(nil,'xxxx');<br><wbr> //gameh := 1048984;<br><wbr><wbr><wbr>
//获取进程ID<br>
//<wbr> GetWindowThreadprocessID<wbr>(Gameh,GamePid);<br><wbr> GamePid := FindProcessID('Project1.exe');<br><wbr> //获取进程句柄<br><wbr><wbr>
gamehProcess:=OpenProcess(windows.PROCESS_ALL_ACCESS,false,GamePid);<br><wbr> //44CB9C 通过OD分析的地址,进而修改了它的内容<br><wbr>
Writeprocessmemory(gamehProcess,Pointer($44CB9C)<wbr>
,@NewSpeed[0],3,<wbr> WriteByte);<br><wbr> //result:=Writebyte;<br><wbr> showmessage('修改成功!');<br>
end;<br>
function FindProcessID(s:string):integer;<br>
var<br>
found,find:boolean;<br>
FSnapshotHandle:tHANDLE;<br>
lppe:TProcessEntry32;<br>
begin<br>
FSnapshotHandle := CreateToolhelp32Snapshot<wbr>(TH32CS_SNAPPROCESS, 0);
//CreateToolhelp32Snapshot<wbr>函数得到进程快照<br>
Find:=False;<br>
lppe.dwSize := Sizeof(lppe); //初始化<br>
found := Process32First(FSnapshotHandle, lppe); //Process32First
得到一个系统快照里第一个进程的信息<br>
while found do<br><wbr><wbr><wbr> begin<br><wbr><wbr><wbr> if
LowerCase(ExtractFileName(lppe.szExeFile))=LowerCase(s) then<br><wbr><wbr><wbr><wbr><wbr>
begin<br><wbr><wbr><wbr><wbr><wbr>
Result:=lppe.th32ProcessID; //找到进程返回ID<br><wbr><wbr><wbr><wbr><wbr>
find:=true;<br><wbr><wbr><wbr><wbr><wbr>
CloseHandle(FSnapshotHandle);<br><wbr><wbr><wbr><wbr><wbr>
exit;<br><wbr><wbr><wbr><wbr><wbr>
end;<br><wbr><wbr><wbr><wbr><wbr>
found := Process32Next(FSnapshotHandle, lppe);<br><wbr><wbr><wbr> end;<br>
CloseHandle(FSnapshotHandle);<br>
if find=False then<br>
Result:=0; //找不到进程返回0<br>
end;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
procedure TForm1.Button2Click(Sender: TObject);
var<wbr><wbr><br><wbr> ProcessName : string;
//进程名<wbr><wbr><br><wbr> ProcessID<wbr> : integer;
//进程表示符<wbr><wbr><br><wbr> i :
integer;<wbr><wbr><wbr><br><wbr>
ContinueLoop:BOOL;<wbr><wbr><wbr><br><wbr> FSnapshotHandle:THandle; //进程快照句柄<br><wbr> FProcessEntry32:TProcessEntry32;
//进程入口的结构体信息<wbr><wbr><br>
begin<wbr><wbr><br><wbr>
FSnapshotHandle:=CreateToolhelp32Snapshot<wbr>(TH32CS_SNAPPROCESS,0);
//创建一个进程快照<wbr><wbr><br><wbr>
FProcessEntry32.dwSize:=Sizeof(FProcessEntry32);<wbr><wbr><wbr><br><wbr>
ContinueLoop:=Process32First(FSnapshotHandle,FProcessEntry32);
//得到系统中第一个进程<br><wbr> //循环例举<br><wbr> while ContinueLoop<wbr>
do<wbr><wbr><br><wbr> begin<br><wbr><wbr><wbr> ProcessName
:= FProcessEntry32.szExeFile;<br><wbr><wbr><wbr> ProcessID :=
FProcessEntry32.th32ProcessID;<br><wbr><wbr><wbr>
Listbox1.Items.add('应用程序名 :'+ProcessName +'#进程ID:'+
inttostr(ProcessID));<br><wbr><wbr><wbr>
ContinueLoop:=Process32Next(FSnapshotHandle,FProcessEntry32);<wbr><wbr><wbr><br><wbr>
end;<wbr><wbr><wbr><br>
end;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
end.