在处理hook的返回的数据时出错,这个buf应该怎么取才能稳定。?

inseasoft 2007-12-01 06:38:04
下面是hook的发送代码
function MySend(s: TSocket; var Buf; len, flags: Integer): Integer; stdcall;
var
dwSize: cardinal;
tmpBuf: array of Byte;
i:integer;
outstr,CookieStr:string;
ds: TcopydataStruct ;
begin

try
Setlength(tmpBuf,len);
for i := 0 to len - 1 do
tmpBuf[i] := TByteArray(Buf)[i];
for i := Low(tmpBuf) to High(tmpBuf) do
outstr := outstr + chr(tmpBuf[i]));//这里经常出错,但是不是每次都错。都是报内存问题
。。。。
finally
end;

MessageBeep(2000); //简单的响一声
//调用直正的Send函数
WriteProcessMemory(ProcessHandle, AddSend, @OldProc[0], 8, dwSize);
Result := OldSend(S, Buf, len, flags);
JmpCode.Address := @MySend;
WriteProcessMemory(ProcessHandle, AddSend, @JmpCode, 8, dwSize);
end;



那位大侠有对这个hook的返回buf操作的例子,不胜感谢
...全文
47 点赞 收藏 1
写回复
1 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
inseasoft 2007-12-02
搞定了,这是个老问题了,在delphi写dll时候如果要用到string类型就必须在uses中加入ShareMem,而且是第一位。贴出这段代码的完整部分,其中包括了向调用进程传递参数。

function MySend(s: TSocket; var Buf; len, flags: Integer): Integer; stdcall;
var
dwSize: cardinal;
tmpBuf: array of Byte;
i:integer;
outstr,CookieStr:string;
ds: TcopydataStruct ;
begin

try
Setlength(tmpBuf,len+1);
for i := 0 to len - 1 do
tmpBuf[i] := TByteArray(Buf)[i];
for i := Low(tmpBuf) to High(tmpBuf)-1 do
outstr := outstr + char(tmpBuf[i]);
CookieStr := Trim(getAllCookie(outstr));
if (CallThreadID > 0) and (CookieStr<>'') then
begin
ds.cbData:= length(CookieStr)+1;
GetMem(ds.lpData,DS.cbData);
strcopy(DS.lpData,pchar(CookieStr));
sendMessage(CallThreadID,WM_GETCOOKIE,0,lparam(@DS));
freeandnil(ds);
end;

finally

end;

MessageBeep(2000); //简单的响一声
//调用直正的Send函数
WriteProcessMemory(ProcessHandle, AddSend, @OldProc[0], 8, dwSize);
Result := OldSend(S, Buf, len, flags);
JmpCode.Address := @MySend;
WriteProcessMemory(ProcessHandle, AddSend, @JmpCode, 8, dwSize);
end;


写了个IE的插件,这个插件的用途是获取已经某个需要登录验证网站的数据。这样就需要已登录网站的cookie,本来取不需要这么麻烦可以通过webborws.document.cookie来获取。但是有些网站对cookie进行了什么设置无法用这个方法来获取。因此只能hook了。如果那位大哥大姐能够获取通过正常的接口来获取的cookie希望不吝赐教,毕竟这种方法太劳神。
回复
发动态
发帖子
网络通信/分布式开发
创建于2007-08-02

1566

社区成员

Delphi 网络通信/分布式开发
申请成为版主
社区公告
暂无公告