打印本文 打印本文 关闭窗口 关闭窗口
追捕的OICQ探测技术 ---冯志宏 [撰稿]
作者:武汉SEO闵涛  文章来源:敏韬网  点击数704  更新时间:2009/4/23 18:41:46  文章录入:mintao  责任编辑:mintao
主  题:追捕的OICQ探测技术 ---冯志宏 [撰稿]
作  者:pgcat
所属论坛:灌水乐园
问题点数:100
回复次数:33
发表时间:2001-2-16 14:54:00
实际上目前所有的OICQ探测方法都一样,发送一个OICQ消息给对方,凭借OICQ
的返回信息来判断对方的OICQ号码,具体的DELPHI实现如下:
NMUDP1是ICS控件包的UDP控件。

NMUDP1.ReportLevel := Status_Basic;
NMUDP1.RemoteHost := edit1.Text;
NMUDP1.RemotePort := 4000;



UdpTmpStr :=#$02 +#$03 +#$0a +#$00 +#$78 +#13 +#$A
+ ''''88888'''' +#$1f +#$30 +#$1f + #$33 + #$39 +#$1f
+FormatDateTime(''''yyyy-mm-dd'''',now)
+#$1f
+FormatDateTime(''''hh:mm:ss'''',now)
+#$1f
+ ''''你正在被某位朋友查询。他使用了追捕这个工具软件(http://www.zhuibu.com/)进行探测,此OICQ号码已经被反馈给对方。''''
+ ''''信息所提示的OICQ号码为虚假号码,但可以即时回复。'''' + #$03;

if OicqCheck.Checked then begin
for SendUdpNum:=1 to 10 do begin
MyStream := TMemoryStream.Create;
try
MyStream.Write(UdpTmpStr[1], Length(UdpTmpStr));
NMUDP1.SendStream(MyStream);
finally
MyStream.Free;
end;
end;
end;

追捕是怎样得到检测结果的呢?下面是具体实现的程序段:
MyStream := TMemoryStream.Create;
try
NMUDP1.ReadStream(MyStream);
SetLength(TmpStr,NumberBytes);
MyStream.Read(TmpStr[1],NumberBytes);
finally
MyStream.Free;
end;
j := Pos( #$02 +#$02 +#$00 +#$00 , TmpStr);
k := Pos( #$02 +#$03 +#$00 +#$00 , TmpStr);
m := Pos( #$02 +#$03 +#$0a +#$00 , TmpStr);
o := Pos( #$02 +#$03 +#$02 +#$00 , TmpStr);

if (j=1) or (k=1) or (m=1) or (o=1) then begin
j := Pos( #$02 +#$02 +#$00 +#$00 + ''''y'''', TmpStr);
k := Pos( #$02 +#$03 +#$00 +#$00 + ''''y'''', TmpStr);
m := Pos( #$02 +#$03 +#$0a +#$00 + ''''y'''', TmpStr);
o := Pos( #$02 +#$03 +#$02 +#$00 + ''''y'''', TmpStr);
OicqVer := ''''未知'''';
if j=1 then OicqVer := ''''425'''';
if k=1 then OicqVer := ''''725'''';
if m=1 then OicqVer := ''''820'''';
if o=1 then OicqVer := ''''810'''';
if (j=1) or (k=1) or (m=1) or (o=1) then begin
TmpS := '''''''';
for j:=1 to length(TmpStr) do begin
if TmpStr[j] in [''''0''''..''''9''''] then tmpS := tmpS + TmpStr[j];
end;
if TmpS=''''0'''' then Label2.Caption := ''''OICQ处于关闭状态,版本:''''+ OicqVer
else Label2.Caption :=''''OICQ号码为''''+ TmpS + '''',版本:''''+ OicqVer;
end;

j := Pos( #$02 +#$02 +#$00 +#$00 + ''''x'''', TmpStr);
k := Pos( #$02 +#$03 +#$00 +#$00 + ''''x'''', TmpStr);
m := Pos( #$02 +#$03 +#$0a +#$00 + ''''x'''', TmpStr);
o := Pos( #$02 +#$03 +#$02 +#$00 + ''''x'''', TmpStr);
if (j=1) or (k=1) or (m=1) or (o=1) then begin
J := 8;
TmpOicqNUm := '''''''';
While TmpStr[J]<>#$1f do begin
TmpOicqNum :=TmpOicqNum + TmpStr[J];
Inc(J);
end;
J := J + 6;
While TmpStr[J]<>#$1f do begin
Inc(J);
end;
J := J + 1;
While TmpStr[J]<>#$1f do begin
Inc(J);
end;
J := J + 1;
TmpOicqMsg := '''''''';
While TmpStr[J]<>#$03 do begin
TmpOicqMsg := TmpOicqMsg + TmpStr[J];
Inc(J);
end;
if TmpOicqMsg<>LastOicqMessage then begin
LastOicqMessage := TmpOicqMsg;
Messagebox(Form1.handle, PChar(''''OICQ用户'''' + TmpOicqNum + ''''对你的探测作出回应:'''' + #$0D + #$0A + TmpOicqMsg), ''''警告信息'''', MB_ICONWARNING +mb_ok);
end;
end;
exit;
end;

打印本文 打印本文 关闭窗口 关闭窗口