当前位置 博文首页 > 文章内容

    【技术分析】搜狗劫持百度流量是什么意思

    作者:ccxjianye09 栏目:网站安全 时间:2020-11-23 14:59:54

    本站于2023年9月4日。收到“大连君*****咨询有限公司”通知
    说我们IIS7站长博客,有一篇博文用了他们的图片。
    要求我们给他们一张图片6000元。要不然法院告我们

    为避免不必要的麻烦,IIS7站长博客,全站内容图片下架、并积极应诉
    博文内容全部不再显示,请需要相关资讯的站长朋友到必应搜索。谢谢!

    另祝:版权碰瓷诈骗团伙,早日弃暗投明。

    相关新闻:借版权之名、行诈骗之实,周某因犯诈骗罪被判处有期徒刑十一年六个月

    叹!百花齐放的时代,渐行渐远!



         6月27日,因搜狗输入法通过搜索候选词为搜狗搜索导流量,奇虎公司、百度公司,以及动景公司和神马公司分别起诉搜狗公司不正当竞争。

         海淀法院对三案集中宣判认定搜狗公司构成不正当竞争,应停止不正当竞争行为,分别为三案原告公开消除影响,向奇虎公司、百度公司各赔偿经济损失500万元等,向动景公司和神马公司共赔偿2000余万元。

         这个案件争议主要体现为两种情形:

         一是在浏览器环境下登录百度搜索引擎网站、360搜索引擎网站,用户在搜索框中搜索时,因使用搜狗输入法并点击了搜索候选词而直接进入搜狗搜索网站;

         二是用户在360手机浏览器和UC浏览器顶部栏中搜索时,因使用搜狗输入法并点击了搜索候选词而直接进入搜狗搜索网站。

         争议焦点主要集中在浏览器环境下的搜索用户流量归属、搜索候选词是否对用户造成服务来源的混淆以及技术创新、用户选择权等因素对诉争行为性质的影响等方面。

         在2015年时,看雪会员就曾对搜狗输入法恶意劫持流量的事件,进行过详细的技术分析,内容如下:

         1、搜狗输入法版本

         7.5.0.5674

         2、现象

         1) 在浏览器中使用百度搜索引擎输入关键词时将出现搜索选项列表,点击后跳转至搜狗搜索,如下图所示:


         3、测试实验

    1)搜狗输入法并不劫持360搜索,如下图:

         结论:说明搜狗输入法对当前打开的页面有判断,猜测是通过页面URL进行了判断。

         2)百度页面除了搜索框其他入口也会触发该搜索选项列表出现,如下图在登录框输入文本时也触发了搜狗搜索选项列表:

         结论:搜狗输入法并未对输入文本框目标进行判断

         3)使用IP地址代替域名打开百度首页

         测试机 ping www.baidu.com得到的IP地址为:61.135.169.121,结果搜狗输入法未出现搜索选项列表,如图所示:

         结论:本次实验一定程度上验证了实验1)的猜想。该搜索选项的出现跟网页当前URL有关系。

         4)实验中将浏览器可执行文件做修改,如将firefox.exe改为firefox1.exe,则该搜索选项列表同样未能出现:

         结论:搜狗输入法对当前进程有判断,如果不是浏览器进程将不会触发搜索选项列表。

         5)最终结论:搜狗输入法在用户打开浏览器访问www.baidu.com进行搜索时,将出现搜索选项列表,诱导用户点击打开搜狗搜索,从而实现恶意劫持百度搜索流量的目的。

         4、技术分析

         1)进程筛选

         搜狗输入法核心模块为SogouPY.ime,实质为一个DLL文件。使用IDA打开分析,加载基址为:0x177C0000,其模块内部有如下逻辑:

         将所有常见浏览器可执行文件名硬编码存入全局字符串数组,并将当前进程exe文件名在列表中遍历,获取其在列表中的索引,若未找到,则返回-1,下面是IDA反汇编结果:


         2)当前页面URL获取及判断

         针对不同浏览器使用不同的获取方式,这里以firefox为例,搜狗输入法使用了MSAA(Microsoft Active Accessibility)技术获取到了当前页面URL,相关详情可参考如下链接:http://www.cnblogs.com/wxxweb/archive/2012/01/09/2317094.html

         在SogouPY.ime模块中,函数sub_17833900 便是该代码的实现,用于获取firefox浏览器中当前页面URL地址。调试发现,若篡改获取到的URL内容,则会阻止搜狗输入法打开搜索选项列表。另外该函数除了获取URL,还获取HTML的Title字段。

         向上追溯得到获取页面信息总分发入口:根据浏览器不同类别从不同方法获取。

         继续向上追溯,获取当前浏览器信息后(浏览器类别、当前页面URL、当前页面Title等)后,进入了判断的环节。

         函数sub_17D11B00内部根据上面获取到的URL判断是否是搜索引擎:

         调试得到wcsstr的参数1:获取到的页面URL,参数2:

         顺便让我知道了世界上还有个www1.baidu.com,火星了。比照这些搜索引擎挨个试了一下(前面两个不用试了吧):

         www1.baidu.com:

         cn.bing.com:

         www.google.cn:

         so.sowang.com:

         www.chinaso.com:

         www.youdao.com:

         www.zhongsou.com:

         这里与前面的实验1比较冲突的是对www.haosou.com并没有展开这个搜索候选词列表。猜测应该是有其他的云控策略在决定,暂时未分析到。

         3)搜狗搜索打开点:

         打开firefox,使用WinDbg Attatch该进程,执行命令:bp

         shell32!ShellExecuteW,给函数ShellExecuteW下断点。打开百度首页,切换搜狗中文输入法,随意输入字符,出现搜狗搜索选项列表,点击其中一个,命中断点!


         这里看出:这里通过启动当前浏览器(firefox.exe)打开了URL。

         根据堆栈返回地址,分析该调用来自函数sub_17812DF0 。

         IDA反汇编太多,不便截图。总体来说,该函数判断当前浏览器如果是IE内核,则通过获取到浏览器IWebBrowser2接口指针,调用其Navigate2方法访问搜狗搜索页面。

         如果是非IE内核,则调用上面的ShellExecuteW打开URL。

         判断方法同2)中的Sogou_GetWebBrowserType(sub_178356D0),该函数获取当前浏览器类别,内部通过进程名、当前焦点窗口窗口类名(”Internet Explorer_Server”)综合判断进行分类。下面是IDA反汇编逻辑部分截图:

         5、总结

         和实验得到的结论一致:

         1、搜狗输入法判断当前是否是浏览器进程。

         2、根据当前焦点窗口句柄,进一步根据不同浏览器获取当前打开的页面地址,标题等信息。

         3、如果判断当前打开的是搜索引擎,则弹出搜索词候选框,引导用户点击。

         4、用户点击后,在WM_LBUTTONUP消息中派遣函数中根据浏览器是否为IE内核来分别使用IWebBrowser2->Navigate2方法或ShellExecuteW打开搜狗搜索。

         PS:这个进程跟搜狗输入法这个功能有非常大的关系,候选词列表正是该进程访问搜狗服务器获取到的。如果结束该进程,或禁用其网络功能,搜狗输入法这一功能就无法正常工作了。