首先介绍下WPE只需要三步即可发送封包1: 选择游戏进程2: 然后开始捕获封包3: 在就是选择相应封包发送即可用Delphi如何实现发送封包呢?先不说这个游戏封包如何如何加密,就假设这个游戏封包无任何加密,都是明文包,每次开启游戏都可以发包,来得到一些相应的动作,比如喊话等操作.
网上找过  有的说 
用ClientSocket1,先Address 和 端口port 连接
然后 ClientSocket1.Socket.SendText 或 ClientSocket1.Socket.SendBuf 
最后测试显然是不可以
在就搜不到什么答案了...说一下我所了解的,游戏都是TCP的,然后游戏端口肯定是固定的,除了某些游戏多频道不一样,但是都可以CMD netstat -an查看
另外,WPE也不注入到游戏,就是模拟了游戏发送封包,如下我用WPE捕获喊话封包是 '00 0B 53 00 61 61 61 30 31 00 00 C3 F7 ',然后我就可以用WPE发送出去,我测试成功,完成了一次喊话操作.
求帮助,求代码,
我太喜欢Delphi了!

解决方案 »

  1.   

    好吧
    看来这个问题太有难度了换个简单的吧[code=Delphi(Pascal]
    var
      zzz:array[1..33] of byte;
    begin
      //...省略50字
      WriteProcessMemory(hProcess,Pointer($004BA003), @zzz, 33, vNumberOfBytesWritten); 
    end;[/code]以上代码是修改一内存地址,放入我的 BYTE数组.问题是:我DLL注入,只会用 var pI:Pinteger;  
    然后 pI:=Pointer($004BA003); 
    pI^ := zzz;
    只会放入一个字节,而不会放入 zzz 这33个字节的数组.DLL注入后怎么直接在$004BA003 这放入一个字节数为33的BYTE数组?就想 WriteProcessMemory 第2,3,4个参数一样? 参数2是 内存地址,参数3是修改的BYTE第一个值,第4个参数是长度,也就是33.
      

  2.   

    DLL注入,也一样用WriteProcessMemory啊
    WriteProcessMemory(hProcess,Pointer($004BA003), @zzz, 33, vNumberOfBytesWritten); 
    这不是已经写入了33字节吗,你到底什么意思
      

  3.   

    比如DLL注入了,我直接 var pI:Pinteger;  pI:=Pointer($004BA003);  pI^ := zzz;这样就能修改了,但是这修改的ZZZ,而不是33个字节,而用 WriteProcessMemory 的第三个参数可以设置字节,懂了吧.但是用 WriteProcessMemory 太麻烦了,还得获取进程句柄,麻烦.而 WriteProcessMemory
      

  4.   

    失败...procedure TForm1.Button1Click(Sender: TObject);
    var
      pi:pinteger;
      zzz:array[1..3] of byte;
    begin
      zzz[1] := 6;
      zzz[2] := $A;
      zzz[3] := 10;
      pI:=pointer($008712C2);
      Move(PI,zzz[1],3);
    end;蛋疼,百度了下,
    说move是传地址不是传值...
      

  5.   

    找到方法了  用 MoveMemory MoveMemory(Pi,@zzz,5);