首页  编辑  

追捕的OICQ探测技术

Tags: /超级猛料/Network.网络通讯/其它/   Date Created:

追捕的OICQ探测技术 ---冯志宏 [撰稿]    

实际上目前所有的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;