实际上目前所有的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;
的返回信息来判断对方的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;
你的二篇贴子我在网上都已见过,它们所述的都是UDP协议明文传送内容,我想知道腾讯公司采用密文传送所用的加密算法。
恳请njbugong大侠不吝赐教!!!
csdn论坛高手如云,你们公司的这点商业秘密恐怕是保不住了!哈哈!