追捕的OICQ探测技术---冯志宏[撰稿]
主 题:追捕的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; |
补充:软件开发 , Delphi ,