家族战队|绝了!搜狗输入法这骚操作
前几天在百度搜索的时候 , 一不小心误点搜索候选词 , 给我跑到搜狗搜索里面去了 , 索性花了点时间分析一下这其中的猫腻 , 不看不知道 , 一看吓一跳 。
在浏览器中打开百度 , 使用搜狗输入法输入关键词时将出现搜索候选词列表:
本文插图
随便点击列表中的某一个选项后 , 页面跳转到了搜狗搜索的结果页:
本文插图
测试1:360搜索输入框并没有这个候选词列表 , 如下图:
本文插图
【家族战队|绝了!搜狗输入法这骚操作】结论1:搜狗输入法应该是对当前打开的页面有判断 , 不是随便哪个网页下面的输入框都会出现这个列表
测试2:在百度页面 , 除了主要的搜索框以外 , 其他入口也会出现这个搜索选项列表 , 下面是站点内搜索输入框的测试:
本文插图
结论2:搜狗输入法没有判断当前输入框目标是不是搜索框
测试3:这一次不用域名 , 换用IP地址来访问百度搜索 。 我的环境下ping www.baidu.com 解析的IP地址为:220.181.38.149 , 结果搜狗输入法竟然没有出现这个搜索选项列表:
本文插图
结论3:这个搜索选项列表的出现跟网页当前的URL有关
测试4:这一次来把浏览器的进程名字改一下 , 我这里选择火狐浏览器 , 将firefox.exe改为firefox1.exe , 这个搜索选项列表也没有出现:
本文插图
结论4:除了URL , 对进程名字也有判断 , 如果不是浏览器进程 , 也不会触发
最终结论:搜狗输入法检测到用户打开浏览器访问www.baidu.com域名进行搜索时 , 将弹出搜索选项列表 , 引导用户点击 。
第一个问题 , 搜狗输入法怎么判断当前是不是在浏览器进程中呢?总不能在微信聊天界面也给弹出搜索候选词列表吧?
搜狗输入法核心模块是一个叫SogouPY.ime的文件 , 这实际上是一个动态链接库文件 , 这个文件会随你切换输入法时加载到对应的进程中 。 使用IDA打开分析 , 发现这个模块内部有很多浏览器进程名字的字符串:
本文插图
你看 , 国内外主流的和非主流的浏览器基本都被列为了目标 。
进一步分析发现 , 上面这是一个字符串数组 , 找到了遍历这个数组 , 挨个进行比较匹配的处理逻辑:
本文插图
浏览器进程筛选出来了 , 还要筛选当前是不是在搜索引擎的页面 , 接着往下看!
针对不同浏览器使用不同的获取方式 , 这里以firefox为例 , 搜狗输入法使用了MSAA(Microsoft Active Accessibility)技术获取到了当前页面URL 。
调试发现 , 如果修改获取到的URL内容 , 搜狗输入法的搜索选项列表就无法展示出来 。
向上追溯可以找到根据不同浏览器进行不同的URL获取方式分发入口:
本文插图
继续追溯 , 获取当前浏览器信息后 , 还要进行是否是搜索引擎域名的判断:
本文插图
这个wcsstr函数就是在进行字符串比较了 , 调试得到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:
本文插图
当发现是在浏览器进程中访问上面的搜索引擎域名后 , 就该跳转到搜狗自己的搜索页面了 , 那它是如何打开的呢?继续往下看!
打开firefox , 使用调试器WinDbg 挂载到这个进程 , 执行这个命令:bp shell32!ShellExecuteW , 给函数ShellExecuteW下断点 。
接着打开百度首页 , 切换到搜狗中文输入法 , 这样使得SoGouPY.ime模块加载到firefox的进程空间中 。
然后随意输入字符 , 出现搜狗搜索选项列表 , 随便点击一个 , 触发断点!来看一下参数:
本文插图
可以看到:这里通过启动当前浏览器(firefox.exe)打开了URL 。 根据堆栈返回地址 , 可以进一步往前分析 。
IDA反汇编太多 , 就不截图了 。 总体来说 , 判断当前浏览器是否是IE内核 , 如果是 , 就通过获取到浏览器IWebBrowser2接口指针 , 调用接口中的Navigate2方法来打开搜狗搜索页面 。 如果不是IE内核 , 直接调用ShellExecuteW打开URL 。
那如何判断是不是IE内核呢?
可以看搜狗的做法:获取当前浏览器类别 , 内部通过进程名、当前焦点窗口的Class名(”Internet Explorer_Server”)综合判断:
本文插图
和实验得到的结论一致 。
一图胜千言 , 整个过程就是这个样子的:
本文插图
事实上 , 搜狗干这事已经有好些年了 。 几年前 , 百度还把搜狗给告了 , 搜狗败诉赔钱 。 不过 , 输了是输了 , 就是坚决不改
本文插图
本文插图
推荐阅读
- ?巨好吃的下饭菜,?做法简单,味道绝了,一周吃三四次也没吃腻
- 豆腐这做法简直绝了!无比下饭的家常菜,好吃到停不下来
- 15款大肠的大厨做法,美味绝了!喜欢大肠的伙伴们快收藏
- 忍不住咽口水,“灵魂”酱汁配上这个菜绝了!昆明天气越来越热,赶紧来点酸辣爽口的
- 生姜|一招解决“大肚腩,小肚子”!生姜配两物一起泡水喝,简直绝了
- 26元买了1斤里脊肉,在家做个麻辣肉片,好吃过瘾配大米饭绝了
- 这豆腐真的绝了,从里香到外,鲜嫩又入味儿
- 绝了!牛奶+鸡蛋一口就爆浆,这样的芝士厚蛋烧,5分钟就做好
- 用个碗就能做的蛋糕,却火到全网抢着做!好吃绝了
- 这早餐,好吃绝了,有荤有素有营养,网友:孩子太幸福了
