delphi 发送游戏封包call的问题
代码跳动 2008-08-28 11:09:48 unit Unit1;
interface
uses
Windows, Forms, SysUtils,Dialogs,Classes, ExtCtrls, Controls, StdCtrls,
Menus, ComCtrls, Spin,Graphics;
type
TFrm_Pop = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Frm_Pop: TFrm_Pop;
drProcessHandle: THandle; //进程句柄
drProcessID: DWORD; //进程ID
Function ReadDroiyanData(Address: integer; N: integer; var Buf): integer; //读地址的代码
procedure GameSend2(CLen:integer;BaoData:Pointer); //发包函数
implementation
{$R *.dfm}
//===========================================================================================
Function ReadDroiyanData(Address: integer; N: integer; var Buf): integer; //读内存地址的代码
var
ByteOfRead: DWORD;
begin
Result := -1;
if ReadProcessMemory(drProcessHandle, Pointer(Address),@Buf, N, ByteOfRead) then
Result := ByteOfRead;
end;
//===========================================================================================
procedure GameSend2(CLen:integer;BaoData:Pointer); //发包函数
Var
ebx1:integer;
begin
ebx1:=integer(pointer($0043D450+$254)^);
asm
pushad
MOV ECX,CLen
PUSH ECX
MOV EDX,BaoData
PUSH EDX
MOV EAX,ebx1
CALL DWORD PTR DS:[EDX+$14]
popad
end;
end;
//===========================================================================================
procedure TFrm_Pop.Button1Click(Sender: TObject); // 操作的过程封包数据
type
REao = packed record
head:integer;
minlin:word;
data1:integer;
data2:integer;
data3:integer;
data4:integer;
data5:integer;
data6:integer;
asend:word;
end;
var
Eao:REao;
PEao:Pointer;
begin
Eao.head:=$xxxxx;
Eao.minlin:=$0;
Eao.data1:=$xxxxx;
Eao.data2:=$xxxxxxxx;
Eao.data3:=$xxxxxxxx;
Eao.data4:=$xxxxxxxx;
Eao.data5:=$xxxxxxxx;
Eao.data6:=$xxxxxxxx;
Eao.asend:=$0;
PEao:=@(Eao);
GameSend2($1D,PEao);
end;
//===========================================================================================
procedure TFrm_Pop.FormDestroy(Sender: TObject);
begin
//关闭进程
CloseHandle(drProcessHandle);
end;
procedure TFrm_Pop.FormCreate(Sender: TObject);
begin
GetWindowThreadProcessId(Findwindow(nil,'游戏标题'), @drProcessID);
drProcessHandle := OpenProcess(PROCESS_VM_READ or PROCESS_VM_WRITE or PROCESS_VM_OPERATION, false, drProcessID);
//打开进程
end;
end.
==============Hook dll 正确代码下分离出来的, 求直接写在exe中的解决办法,如上不能正常操作===========
不够再开贴加分.