注:这篇文章是一年前的,放出来是让大家交流一下技术,以窥视流量劫持的冰山一角。
流量劫持,是指通过一定技术手段,控制用户上网或软件流程的行为,以给劫持者带去更多流量,产生源源不断的收入。
1、搜狗输入法版本:
7.5.0.5674
2、现象:
1)在浏览器中使用百度搜索引擎输入关键词时将出现搜索选项列表,点击后跳转至搜狗搜索,如下图所示:
点击列表中的选项后:
3、测试实验:
1)搜狗输入法并不劫持360搜索,如下图:
结论:说明搜狗输入法对当前打开的页面有判断,猜测是通过页面URL进行了判断
2)百度页面除了搜索框其他入口也会触发该搜索选项列表出现,如下图在登录框输入文本时也触发了搜狗搜索选项列表:
结论:搜狗输入法并未对输入文本框目标进行判断
3)使用IP地址代替域名打开百度首页。测试机ping得到的IP地址为:61.135.169.121,结果搜狗输入法未出现搜索选项列表,如图所示:
结论:本次实验一定程度上验证了实验1)的猜想。该搜索选项的出现跟网页当前URL有关系。
4)实验中将浏览器可执行文件做修改,如将firefox.exe改为firefox1.exe,则该搜索选项列表同样未能出现:
结论:搜狗输入法对当前进程有判断,如果不是浏览器进程将不会触发搜索选项列表。
5)最终结论:搜狗输入法在用户打开浏览器访问进行搜索时,将出现搜索选项列表,诱导用户点击打开搜狗搜索,从而实现恶意劫持百度搜索流量的目的。
4、技术分析:
1)进程筛选
搜狗输入法核心模块为SogouPY.ime,实质为一个DLL文件。使用IDA打开分析,加载基址为:0x177C0000,其模块内部有如下逻辑:
将所有常见浏览器可执行文件名硬编码存入全局字符串数组,并将当前进程exe文件名在列表中遍历,获取其在列表中的索引,若未找到,则返回-1,下面是IDA反汇编结果:
2)当前页面URL获取及判断
针对不同浏览器使用不同的获取方式,这里以firefox为例,搜狗输入法使用了MSAA(MicrosoftActiveAccessibility)技术获取到了当前页面URL,相关详情可参考如下链接:
在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:
:
so.sowang.com:
:
:
:
[
这里与前面的实验1比较冲突的是对并没有展开这个搜索候选词列表。猜测应该是有其他的云控策略在决定,暂时未分析到。
3)搜狗搜索打开点:
打开firefox,使用WinDbgAttatch该进程,执行命令:bpshell32!ShellExecuteW,给函数ShellExecuteW下断点。打开百度首页,切换搜狗中文输入法,随意输入字符,出现搜狗搜索选项列表,点击其中一个,命中断点!
查看参数:
这里看出:这里通过启动当前浏览器(firefox.exe)打开了URL。
根据堆栈返回地址,分析该调用来自函数sub_17812DF0()。
IDA反汇编太多,不便截图。总体来说,该函数判断当前浏览器如果是IE内核,则通过获取到浏览器IWebBrowser2接口指针,调用其Navigate2方法访问搜狗搜索页面。
如果是非IE内核,则调用上面的ShellExecuteW打开URL。
判断方法同2)中的Sogou_GetWebBrowserType(sub_178356D0()),该函数获取当前浏览器类别,内部通过进程名、当前焦点窗口窗口类名(”InternetExplorer_Server”)综合判断进行分类。下面是IDA反汇编逻辑部分截图:
5总结:
和实验得到的结论一致:
1、搜狗输入法判断当前是否是浏览器进程。
2、根据当前焦点窗口句柄,进一步根据不同浏览器获取当前打开的页面地址,标题等信息。
3、如果判断当前打开的是搜索引擎,则弹出搜索词候选框,引导用户点击。
4、用户点击后,在WM_LBUTTONUP消息中派遣函数中根据浏览器是否为IE内核来分别使用IWebBrowser2->Navigate2()方法或ShellExecuteW打开搜狗搜索。
PS:这个
进程跟搜狗输入法这个功能有非常大的关系,候选词列表正是该进程访问搜狗服务器获取到的。如果结束该进程,或禁用其网络功能,搜狗输入法这一功能就无法正常工作了。
看雪众测:
看雪论坛:
—–微信ID:ikanxue—–
看雪学院,致力于安全研究16年!
限 时 特 惠: 本站每日持续更新海量各大内部创业教程,加站长微信免费获取积分,会员只需38元,全站资源免费下载 点击查看详情
站 长 微 信: thumbxmw