欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

搜狗输入法恶意劫持百度搜索流量分析

搜狗输入法恶意劫持百度搜索流量分析

搜狗输入法恶意劫持百度搜索流量分析
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:

 
www.soso.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: 这个进程跟搜狗输入法这个功能有非常大的关系,候选词列表正是该进程访问搜狗服务器获取到的。如果结束该进程,或禁用其网络功能,搜狗输入法这一功能就无法正常工作了。
分析不对的地方还请各路大神指正。

上传的附件 1.png
2.png
3.png
4.png
5.png
6.png
7.png
8.png
9.png
10.png
11.png
12.png
14.png
15.png
16.png
17.png
18.png
19.png
20.png
21.png
13.png

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功