邪恶八进制信息安全团队技术讨论组's Archiver

勇敢的风 2007-2-18 23:06

[原创]2007年春节礼物:不占用任何服务器资源的客户端baidu搜索小偷

献给所有EST的朋友们,祝大家新年愉快,万事如意。

文章作者:勇敢的风 [E.S.T顾问团] feng.cnblog.com.cn
信息来源:邪恶八进制信息安全团队(www.eviloctal.com)

很早之前我发表过一篇服务器版的([url]http://forum.eviloctal.com/read-htm-tid-21143-keyword-.html[/url]),在那个之前已经有这个了,只是没有发表出来,我们知道很多空间提供商禁用了xmlhttp组件使得他无法使用。

这些并没有什么特殊的技术含量,全部代码主要有3个函数,一个是utf8转换,一个是远程抓取,这两个函数是通用的,基本上所有的小偷程序都要用到,另外一个就是分析抓取的内容并进行整理,它主要使用正则表达式;有朋友提到美化,这次已经将结果分离为3个部分了,一个是页信息(pageinfo),一个是搜索信息(searchinfo),还有一个就是搜索结果(ubb名称的函数返回的本身变量),页信息和搜索信息都是2个,分别在顶部和底部,在搜索结果中函数中已经指明要美化的最关键的地方,自己可以直接修改。

[quote]
<Script language=VBScript>
&#39;--------------------------------
&#39;Baidu搜索小偷客户端版
&#39;作者:勇敢的风
&#39;Blog:http://feng.cnblog.com.cn
&#39;使用或转载请保留这些信息
&#39;  Var VBScript 1.3
&#39;      2006.12
&#39;由于Baidu经常修改界面,该版仅适用于2006年12月之前的最后一次该版
&#39;如搜索时出现错误或者提取的内容混乱则表示该版本寿命已用尽。
&#39;--------------------------------
Function bytes2BSTR(vIn) &#39;utf8转换函数
  strReturn = ""
  For i = 1 To LenB(vIn)
   ThisCharCode = AscB(MidB(vIn,i,1))
   If ThisCharCode < &H80 Then
    strReturn = strReturn & Chr(ThisCharCode)
   Else
    NextCharCode = AscB(MidB(vIn,i+1,1))
    strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode))
    i = i + 1
   End If
  Next
  bytes2BSTR = ubb(strReturn)
End Function

Function dq(url)&#39;远程抓取函数
  dim XmlHttp
  set XmlHttp = CreateObject("Microsoft.XMLHTTP")
  XmlHttp.Open "GET",url, false
  XmlHttp.setRequestHeader "Content-Type","text/XML"
  XmlHttp.Send
  dq = bytes2BSTR(XmlHttp.responseBody)
End Function

Function BR(Str)&#39;叶面整理函数
  Str = Replace(Str,"{br}","<br>")
  Str = Replace(Str,vbcrlf,"<br>")
  Str = Replace(Str,"<br> <br>","<br>")
  Str = Replace(Str,"<br><br>","<br>")
  Str = Replace(Str,"<br><br>","<br>")
  BR = Str
End Function


function ubb(str)&#39;整理过程
   if instr(str,"找到相关网页") = 0 then
      sminfo.innerHTML = "没有搜索到任何内容"
      pageinfo1.innerHTML = ""
      pageinfo2.innerHTML = pageinfo1.innerHTML
      searchinfo1.innerHTML = ""
      searchinfo2.innerHTML = searchinfo1.innerHTML
      exit function
   end if
   str = Replace(str,vbcrlf,"{br}")
   str = Replace(str,"<br>","{br}")
   str = Replace(str,"</td>","</td>"&vbcrlf)
   str = Replace(str,"<td",vbcrlf&"<td")

   dim re,Match,Matches
   set re = New RegExp
   re.Global = True
   re.IgnoreCase = True

   re.Pattern=".*\<td class=f>(.*)\<\/td>" &#39;集合有用的信息

   Set Matches = re.Execute(str)
   For Each Match in Matches
    ubb=ubb&BR(Match.value)&"<br>" &#39;这里的Match.value是单条信息内容,美化的时候这地方是关键
   next

   ubb = Replace(ubb,"<td class=f>","")
   ubb = Replace(ubb,"</td>","")

   re.Pattern="(\- \<a .[^\<]*>百度快照\<\/a> \<br>)" &#39;去除快照
   ubb = re.replace(ubb,"")

   re.Pattern="(\- \<a .[^\<]*>推广\<\/a>\<br>)" &#39;去除推广
   ubb = re.replace(ubb,"") &#39;这里是百度赚钱的地方,如果将这里除去,baidu会不满意的,建议将这一行改为
   &#39;ubb = re.replace(ubb,"baidu推广<br>")

   re.Pattern="(\<a class=""m"".[^\<]*>.[^\<]*\<\/a>)"&#39;去除域名即:更多结果
   ubb = re.replace(ubb,"")

   re.Pattern="(\<font color=#008000>.[^\<]*\<\/font>)" &#39;去除地址、大小、时间
   ubb = re.replace(ubb,"")

   str = Replace(str,"</div>","</div>"&vbcrlf)

   re.Pattern="\<div class=""p"">(.*)\<\/div>"
   Set Matches = re.Execute(str)
   set Match = Matches(0)
   Dim TheLink
   TheLink = Match
   re.Pattern="href=s?(.[^>]*)"
   TheLink = re.replace(TheLink,"href=# onclick=""dq(&#39;http://www.baidu.com/s?$1&#39;)""")
   sminfo.innerHTML = ubb
   pageinfo1.innerHTML = TheLink
   pageinfo2.innerHTML = pageinfo1.innerHTML
   re.Pattern="(找到相关网页.*秒)"
   Set Matches = re.Execute(str)
   set Match = Matches(0)
   searchinfo1.innerHTML = Match
   searchinfo2.innerHTML = searchinfo1.innerHTML
end function
</script>

<body onload="dq(&#39;http://www.baidu.com/s?wd=勇敢的风&#39;)">
<input type="text" name="key" id="key">
<input type="submit" onclick="dq(&#39;http://www.baidu.com/s?wd=&#39;+key.value)">
<div id="pageinfo1"></div>
<div id="searchinfo1"></div>
<table width="70%">
<tr>
  <td><div id="sminfo"></div></td>
</tr>
</table>
<div id="pageinfo2"></div>
<div id="searchinfo2"></div>
[/quote]

以上为主要的代码,为了能实现连刷新都不占用服务器资源,可以在叶面中插入一下代码(F5键替换)
[quote]
<Script Language="Javascript">
document.onkeydown=function () //按F5紧刷新抓取内容,这样可以不再读服务器信息,
{
if(event.keyCode==&#39;116&#39;)
{
  event.keyCode=0;
  event.returnValue=false;
  sminfo.innerHTML=dq(&#39;http://www.baidu.com/s?wd=&#39;+key.value)
}
}
</Script>
[/quote]

说明:客户端浏览器只能是ie6以上的版本
另:没有检测客户端代码,有兴趣的朋友可以帮添加上.

tianyaxin55 2007-2-19 01:53

直接给代码?  用VC++编辑可以吗???????????????????????

pc逍遥鼠 2007-2-19 13:39

不是吧 是个人一看就知道是网页源代码!你怎么可能有C++编译那!!!!
他说是的客户端是相对于baidu的!!!你的网站架设起来,相对于他的网站,你就是客户端,他就是服务端!

杀虫剂 2007-2-19 14:31

<Script language=VBScript>
脚本语言保存为.html

勇敢的风 2007-2-21 18:52

到家了,完整版贴上,自己顶一下。
--------------------------------------------
顺便放一个下载,在自己机器上或者放到服务器上均可使用

killl 2007-3-4 23:13

<body onload="dq(&#39;[url]http://www.baidu.com/s?wd=[/url]勇敢的风&#39;)">

这一句决定了无论点击什么连接,输入了什么关键字,只能检索:勇敢的风 [s:82]

写的真干净!很好。

东方花猪 2007-3-14 14:11

呵呵,按照楼上的说法,我改成<body onload="dq(&#39;http://www.baidu.com/s?wd=邪恶八进制论坛&#39;)">嘿嘿~每天直接进入心爱的论坛!
还不错,搜索了一下,感觉挺简洁 [s:267] 我用遨游浏览器,怎么没有地下的时间,就有个链接网页。 [s:289]

ssspr 2007-3-15 12:18

我用火狐怎的没反映呢?

勇敢的风 2007-3-15 14:51

[quote]引用第7楼ssspr于2007-03-15 12:18发表的 :
我用火狐怎的没反映呢?[/quote]
可能火狐无法调用xmlhttp组件,xmlhttp是ms系统自带的一个组件
没用过火狐,所以不知道如何让火狐调用,估计非ie核心的浏览器都无法使用。

勇敢的风 2007-3-15 14:53

[quote]引用第5楼killl于2007-03-04 23:13发表的 :
<body onload="dq(&#39;[url]http://www.baidu.com/s?wd=[/url]勇敢的风&#39;)">

这一句决定了无论点击什么连接,输入了什么关键字,只能检索:勇敢的风 [s:82]

写的真干净!很好。[/quote]


onload="dq(&#39;[url]http://www.baidu.com/s?wd=[/url]勇敢的风&#39;)"

以上表示在读取该页面时执行,而且只是一次,可以删除的。

勇敢的风 2007-3-21 17:45

安装ie7的用户将无法使用(卸载后也不能用)这个,我搜索相关资料后发现,原来ie7将该功能禁用了,谁有好的解决办法?

ddiovedd 2007-3-22 11:41

火狐用这个new ActiveXObject("MSXML2.XMLHTTP")可能行。

海军 2007-3-23 06:08

[quote]引用第5楼killl于2007-03-04 23:13发表的 :
<body onload="dq(&#39;[url]http://www.baidu.com/s?wd=[/url]勇敢的风&#39;)">

这一句决定了无论点击什么连接,输入了什么关键字,只能检索:勇敢的风 [s:82]

写的真干净!很好。[/quote]

确定也很干净 测试 只打开htm 只运行一次 "勇敢的风&#39;"搜索[s:263]

-------- 2007-12-28 05:03

这个脚本的执行与耗不耗服务器的资源根本就是一点关系都没有.
你在服务器上面执行这段代码,难道不耗资源吗?
在客户端执行这段代码的话,不如用其他方式实现.

玄猫 2008-1-2 22:39

传说中,客户端的xmlhttp组件是没有权限跨域访问的

楼主可能在本机测试成功了,在本机测试是因为本地的有更大权限……试着把它放在远程服务器上,访问试试 [s:270]

cwa 2008-1-3 13:27

[quote] ssspr:
我用火狐怎的没反映呢?[s:264]



火狐那只小东西啥都是要下载配件组装的~~偶不习惯。。。偶是用IE的马甲遨游

这帖子能不能从2007年春节顶到了2008春节呢?

页: [1]
© 1999-2008 EvilOctal Security Team