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

hook (ws2_32.dll / send) 如何修改封包后再发送?buf长度不变容易修改,长度变化了就不行了

2012-07-28 
hook (ws2_32.dll / send) 怎么修改封包后再发送???buf长度不变容易修改,长度变化了就不行了.buf 长度不变

hook (ws2_32.dll / send) 怎么修改封包后再发送???buf长度不变容易修改,长度变化了就不行了.
buf 长度不变的情况下很容易修改. 长度变了就不行了. buf用GetMem不允许修改长度
所以只有用自己变量替换buf, char数组/pchar都不行. 谁给个例子????


Delphi(Pascal) code
function StreamToText(Stream: TMemoryStream): String;var  tls:TStringList;begin  Result := '';  tls := TStringList.Create;  try    tls.LoadFromStream(Stream);    Result := tls.Text;  finally    tls.Free;  end;end;function TextToStream(Text: string): TMemoryStream;var  tls:TStringList;begin  Result := TMemoryStream.Create;  tls := TStringList.Create;  try    tls.Text := Text;    tls.SaveToStream(Result);  finally    tls.Free;  end;end;function mysend(s: TSocket; var Buf; len, flags: Integer): Integer; stdcall;var  ss, temp: string;  Stream, st:TMemoryStream;begin  Stream := TMemoryStream.Create;  Stream.Write(buf,len);  Stream.Position := 0;  ss := StreamToText(Stream);  ss := StringReplace(ss, '*/*', '1/1', [rfReplaceAll, rfIgnoreCase]);  //我目的是可以任意修改buf内容长度,*/*是例子测试的  //长度不变没问题. 如果换成  111/11111 就不行了,没办法GetMeM改buf长度  st := TextToStream(ss);  st.Position := 0;  st.Read(Buf, st.Size);  Result := oldsend(s, Buf, st.Size, flags);end;


[解决办法]
把buf声明为pansichar试试
[解决办法]
mysend()
st.Read(Buf, st.Size);//当length(buf)< st.Size 时 当然出错
只能 getMem(Bufst.Size)
再 st.Read(Buf, st.Size);
[解决办法]
这应该无解. len 好像不能变

热点排行