搜狗用这个骚技术,把百度逼上了绝路…

点击上方[全栈开发者 区]右上角[…][设为星标?]

前几天在百度搜索的时候,一不小心误点搜索候选词,给我跑到搜狗搜索里面去了,索性花了点时间分析一下这其中的猫腻,不看不知道,一看吓一跳。

在浏览器中打开百度,使用搜狗输入法输入关键词时将出现搜索候选词列表:

测试实验

测试1:360搜索输入框并没有这个候选词列表,如下图:

结论2:搜狗输入法没有判断当前输入框目标是不是搜索框

测试3:这一次不用域名,换用IP地址来访问百度搜索。我的环境下ping www.baidu.com 解析的IP地址为:220.181.38.149,结果搜狗输入法竟然没有出现这个搜索选项列表:

结论4:除了URL,对进程名字也有判断,如果不是浏览器进程,也不会触发

最终结论:搜狗输入法检测到用户打开浏览器访问www.baidu.com域名进行搜索时,将弹出搜索选项列表,引导用户点击。

技术分析

如何实现浏览器进程筛选strong>

第一个问题,搜狗输入法怎么判断当前是不是在浏览器进程中呢能在微信聊天界面也给弹出搜索候选词列表吧p>

搜狗输入法核心模块是一个叫SogouPY.ime的文件,这实际上是一个动态链接库文件,这个文件会随你切换输入法时加载到对应的进程中。使用IDA打开分析,发现这个模块内部有很多浏览器进程名字的字符串:

当前页面的URL获取及判断

浏览器进程筛选出来了,还要筛选当前是不是在搜索引擎的页面,接着往下看!

针对不同浏览器使用不同的获取方式,这里以firefox为例,搜狗输入法使用了MSAA(Microsoft Active Accessibility)技术获取到了当前页面URL。

调试发现,如果修改获取到的URL内容,搜狗输入法的搜索选项列表就无法展示出来。

向上追溯可以找到根据不同浏览器进行不同的URL获取方式分发入口:

这个wcsstr函数就是在进行字符串比较了,调试得到wcsstr()的参数1:获取到的页面URL,参数2:搜索引擎域名。又是用一个数组在进行存储:

www.soso.com:

这个就不用试了,现在是搜狗自家人。

cn.bing.com:

so.sowang.com:

www.youdao.com:

如何打开搜狗搜索页面呢strong>

当发现是在浏览器进程中访问上面的搜索引擎域名后,就该跳转到搜狗自己的搜索页面了,那它是如何打开的呢往下看!

打开firefox,使用调试器WinDbg 挂载到这个进程,执行这个命令:bp shell32!ShellExecuteW,给函数ShellExecuteW下断点。

接着打开百度首页,切换到搜狗中文输入法,这样使得SoGouPY.ime模块加载到firefox的进程空间中。

然后随意输入字符,出现搜狗搜索选项列表,随便点击一个,触发断点!来看一下参数:

总结

和实验得到的结论一致。

一图胜千言,整个过程就是这个样子的:

对于搜狗输入法的这骚操作,你怎么看p>

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2020年9月13日
下一篇 2020年9月13日

相关推荐