jar 工程我怎么在网页上url访问某一个方法_搜狗用这个骚技术,把百度逼上了绝路。。。...
点击上方[全栈开发者社区]→右上角[...]→[设为星标⭐]
前几天在百度搜索的时候,一不小心误点搜索候选词,给我跑到搜狗搜索里面去了,索性花了点时间分析一下这其中的猫腻,不看不知道,一看吓一跳。
在浏览器中打开百度,使用搜狗输入法输入关键词时将出现搜索候选词列表:
随便点击列表中的某一个选项后,页面跳转到了搜狗搜索的结果页:
测试实验
测试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打开分析,发现这个模块内部有很多浏览器进程名字的字符串:
你看,国内外主流的和非主流的浏览器基本都被列为了目标。
进一步分析发现,上面这是一个字符串数组,找到了遍历这个数组,挨个进行比较匹配的处理逻辑:
当前页面的URL获取及判断
浏览器进程筛选出来了,还要筛选当前是不是在搜索引擎的页面,接着往下看!
针对不同浏览器使用不同的获取方式,这里以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”)综合判断:
总结
和实验得到的结论一致。
一图胜千言,整个过程就是这个样子的:
多说几句
事实上,搜狗干这事已经有好些年了。几年前,百度还把搜狗给告了,搜狗败诉赔钱。不过,输了是输了,就是坚决不改。。。
对于搜狗输入法的这骚操作,你怎么看?
觉得本文对你有帮助?请分享给更多人
关注「全栈开发者社区」加星标,提升全栈技能
本公众号会不定期给大家发福利,包括送书、学习资源等,敬请期待吧!
如果感觉
推送内容不错,不妨右下角点个在看转发朋友圈或收藏,感谢支持。
好文章,留言、点赞、在看和分享一条龙吧❤️
jar 工程我怎么在网页上url访问某一个方法_搜狗用这个骚技术,把百度逼上了绝路。。。...相关推荐
- jar 工程我怎么在网页上url访问某一个方法_url及url参数与seo网站优化的关系
短视频,自媒体,达人种草一站服务 首先我还是援引下百度百科关于url的定义. 统一资源定位符(Uniform Resource Locator,缩写为URL)是对可以从互联网上得到的资源的位置和访问方 ...
- jar 工程我怎么在网页上url访问某一个方法_Java高级编程之URL处理
URL(Uniform Resource Locator)中文名为统一资源定位符,有时也被俗称为网页地址.表示为互联网上的资源,如网页或者FTP地址. 本章节我们将介绍Java是如处理URL的.URL ...
- php重定义地址栏url,thinkphp框架实现路由重定义简化url访问地址的方法分析
本文实例讲述了thinkphp框架实现路由重定义简化url访问地址的方法.分享给大家供大家参考,具体如下: 如果按照正常访问的话,则需要输入一长串的url地址,这样会显得十分冗长,我可以可以通过对路由 ...
- 搜狗用这个骚技术,把百度逼上了绝路...
点击上方[全栈开发者社区]→右上角[...]→[设为星标⭐] 前几天在百度搜索的时候,一不小心误点搜索候选词,给我跑到搜狗搜索里面去了,索性花了点时间分析一下这其中的猫腻,不看不知道,一看吓一跳. 在 ...
- ftp上传当天文件的方法_五种方法将文件上传到FTP服务器
您知道电脑硬盘是如何读取和存储数据的吗?恢复软件是如何找回数据的吗?通过这个视频教程,你将了解你丢失的数据是否还在,这些文件能否找回. 请点击 - >>>> 观看视频 如何安全 ...
- 如何从几何角度上理解方程组只有一个解_深度科普---电磁波(三):无激励下的真空中的Maxwell方程组的解...
很久没有写过与自己专业相关的文章了,于是计划穿插进几篇有关电磁波的深度科普的文章.计划分为几个部分: 1. 真空中的 方程组 2. 材料中的 方程组和电磁场的边值条件 3. 无激励下的真空中的 方程组 ...
- html局部可复制,截取网页局部区域css样式的方法和系统的制作方法
截取网页局部区域css样式的方法和系统的制作方法 [技术领域] [0001]本发明涉及计算机网络技术领域,特别是涉及一种截取网页局部区域CSS样式的方法和系统. [背景技术] [0002]CSS(Ca ...
- Magento教程 12:Magento快速上传大量商品的方法
利用.CSV档上传大量商品是最佳选择 在Magento上传大量商品到时,经常会遇到的几个问题,非常耗时间.出现错误.有部分商品是缺货状态. 当你有上百个不同属性的商品,而且只有部分商品是现货供应的情况 ...
- html网页打不开二级网页,二级网页打不开的解决方法
现浏览器能打开网站主页,但网站内的其他页面打开处于加载状态,或加载页面错误,或点击链接没反应等等现象.有可能是IE组件或内核异常,或注册表异常导致的.下面是学习小编给大家整理的有关介绍,希望对大家有帮 ...
最新文章
- python 保存网页到印象笔记_如何将网页内容保存到印象笔记?
- linux 手动睡眠
- 03.JavaScript对DOM操作
- Flutter Exception降到万分之几的秘密 1
- 结对作业2:单元测试
- 5G iPhone若推迟至10月发布 将会拉低苹果两个财季营收
- qt插件开发框架搭建_Flutter框架之:开发环境搭建
- aix 文件升级-替换
- Access SqLDbHelper
- 关于redis启动流程介绍
- 《Linux命令行大全》第2版来啦!这一版做了哪些更新?
- linux war 权限,Linux中mv重命名作用及打包war压缩文件及分配权限
- 实验四 图像复原及几何校正
- linux+开机启动sshd_Linux sshd服务自动启动
- JavaSE学习笔记(七)(常用类)
- vue端口号被占用报错npm ERR! @1.0.0 dev: `node build/dev-server.js`
- 什么叫做私有网络VPC?
- bzoj 1778: [Usaco2010 Hol]Dotp 驱逐猪猡
- linux (ubuntu)安装包安装sublime
- ug安装lmtools显示未连接服务器,服务器(LMTOOLS)设置教程
热门文章
- Windows 8 IIS中配置PHP运行环境的方法
- Spring使用@Required注解依赖检查
- C#正则表达式MatchCollection类浅析
- Spring 声明式事务处理....XML
- 计算机竞赛作文,计算机打字比赛作文例文
- 从数据结构角度分析foreach效率比for循环高的原因
- CSS五种水平居中:text-align margin incline-block flex relative
- Linux字符串三剑客笔试题集合
- Bug貌似发现了centos系统配置host主机的问题
- Yii的GridView