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中的解决办法,如上不能正常操作===========

不够再开贴加分.
...全文
417 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
hongqi162 2008-08-31
  • 打赏
  • 举报
回复
up
gyk120 2008-08-31
  • 打赏
  • 举报
回复
多谢了,帮顶……
游戏方面很菜,网络也是很多不懂……没法帮你了
代码跳动 2008-08-31
  • 打赏
  • 举报
回复
谁顶一下就结贴了,此问题已换Hook dll 方式解决了!!!
代码跳动 2008-08-28
  • 打赏
  • 举报
回复
可连开3贴100分求解!单贴我没权限给高分.

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi GAME,图形处理/多媒体
社区管理员
  • GAME,图形处理/多媒体社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧