chrome 调试之 - 给微软小冰看病(无论给小冰发送什么内容都只回复“我已经开始升级啦,期待一下吧!”)

微软 Bing 搜索推出了小冰AI智能聊天模块,具体启用方式是用edge或chrome浏览器打开链接 cn.bing.com 后在输入框搜索任意内容,待搜索结果页面加载完并稍等片刻,页面右侧就会出现一个躲在滚动条后面的小萝莉,抚摸...不,点击她,就会弹出这个聊天框了

不幸的是,无论我向她发送什么内容,她都只会说一句“我已经开始升级啦,期待一下吧!”

作为一个喜欢探索的bug研发工程师,我想方设法,不成功调戏小冰一下誓不罢休。然而一顿操作下来(不限于换浏览器、换电脑、搭梯子、登录bing账号等等),聊天框依旧如此,小冰对我的调戏视而不见,始终是那句“我已经开始升级啦,期待一下吧!”。

百思不得解,后来我打开F12,查看了network面板发现,这货其实是返回了有效聊天内容的(之所以想看看F12,我认为既然是AI聊天机器人,那应答机制必定是要在服务器处理的,既如此,就一定会有网络交互来传递对话内容)

既然在明明返回了有效聊天内容的情况下聊天框仍然给用户显示了无意义的提示信息,那一定就是微软Bing在搞鬼!我们且不论微软这么做的动机是什么,正事要紧(调戏小冰)。

通过前文操作可以推断,微软 Bing 肯定是拦截了小冰真正想要说的话,强行让小冰变成了一个人工智障。

那么我要做的事情就是分析在跟小冰聊天时点击发送消息后代码的执行过程。

首先我通过F12的Element面板选中聊天框内的发送消息按钮,找出为这个按钮自身绑定的点击事件:

具体步骤如上,按图索骥,跟着箭头直到最后一步,点击绿色框圈出的js文件,代码被定位到 vr() 这个方法,也就是说我在点击发送消息按钮时其实是调了这个方法。我给vr这个方法打断点,然后在聊天框输入内容后点击发送按钮,代码进入断点,使用F10一步步调试,逻辑走到 hi() 这个方法时使用F9进入hi这个方法,不难看出,hi方法的核心逻辑是在创建一个ajax请求,并监听请求的成功回调,随后把我们键入的聊天内容发送出去。当接口返回成功时调用af()这个方法进一步处理接口回调内容(如下图):

在当前js代码窗口中使用CTRL+F,全局搜索af这个方法,找到这个方法的源码,给他打断点(为了方便后续调试,在这之前我先取消掉上一个断点)

到了这里其实我只要稍微看一下代码就会发现问题的根本所在,注意看af方法中的这个vu方法调用,它接收的第1个参数就是这句 "我已经开始升级啦,期待一下吧!"

不用想,这个参数最终会被作为小冰的回答显示在聊天框中,而现在这句回复被微软给强制写死了,且 i 这个参数中不就是接口返回来的真实聊天回复内容吗?可以发现 i 这个参数被赋值后根本就没有使用过!后续我又跟进了 vu 这个方法,进一步确认了微软强制篡改回复内容这个事实。

到这里就已经真相大白了,微软这是故意不给咱使用这个玩意啊。

接下来我只需要想办法修改这行代码的逻辑,如果能成功,就可以和小冰愉快地玩耍啦!

// vu("我已经开始升级啦,期待一下吧!", ""),
vu(i[0].content.text, ""),

可能你会说,道理咱都懂,但这是在线网站呀,你难不成还能钻进微软的静态网站服务器去改人家的网页源码不成?你咋不上天呢!哎,我还真能钻进微软的服务器,嘿嘿!(开个玩笑)

然鹅我几乎马上就想到了chrome前不久新增的那个开发者功能:Overrides。这玩意是啥?其实就是字面意思--覆盖。它可以把一个网站(不限于线上还是本地开发环境的网站)的静态资源用本地的文件给覆盖掉,这样你就可以使代码临时按照自己修改后的逻辑运行,以便模拟程序在真实环境下是否正常。此时你想到了什么?没错,XSS,跨站脚本攻击!异曲同工有木有?当然,Overrides 这个覆盖只是临时的,它只在我的本机目标浏览器且打开F12开发者工具时生效,无需担心安全问题。事实上在2018年的时候chrome就已经正式向开发者提供了这个功能,只是在最近的更新中又强调了这个功能的可玩性。讲真,我其实很早以前就设想过这个功能了,吼吼!(事实上每次更新Chrome之后首次打开F12都能在调试窗口底部看到本次有哪些变更,有时候看看这个玩意还挺有意思,能使你对好玩的新特性了然于胸)。如果我说的不是很明白,没关系,继续往下看。

如下图所示,首先在开发者工具中的sources面板下,点击切换到 Overrides 二级面板,然后继续点击 Overrides 下面的 select folder for overrides。哦不,在这之前我首先得在电脑上找一个地方创建一个干净的文件夹,就取名叫 chrome-overrides 吧。然后要在点击 select folder for overrides 时选择这个干净的文件(如遇提示,点击“允许”):

然后重新去到那个js文件中(不要问我是哪个js文件以及怎么找到它,我们一直在讨论关于它的话题),这时候你会发现这个js文件竟然变成了可编辑状态,神奇!

那好,我就把代码改成我想要的样子,改完后使用快捷键 CTRL+S保存,你又发现此时在左侧刚选择的那个文件夹中出现了我修改的代码--被保存在本地了。

这时候不要关闭开发者工具,直接刷新当前的 Bing 搜索页面,稍后开发者工具会自动定位到这个js文件(如果没有定位回来,那就自己想办法重新找到它),我们取消刚才在这个文件中打的所有断点,然后重新打开小冰和她聊天...

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/208680.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java-网络通信总结

文章目录 网络程序设计基础局域网与互联网 网络协议IP协议TCP/IP 协议端口域套接字 TCP 程序InterAddress 类ServerSocket 类 UDP 程序DatagramPacket 类DatagramSocket 类 网络程序设计基础 网络程序设计编写的是与其他计算机进行通信的程序。Java 已经将网络程序所需要的元素…

RK3588平台开发系列讲解(hardware)reference-ril源码分析

平台内核版本安卓版本RK3588Linux 5.10Android 12文章目录 一、reference-ril目录介绍二、支持的功能三、Android RIL 框架沉淀、分享、成长,让自己和他人都能有所收获!😄 一、reference-ril目录介绍 目录:3588-android12/hardware/ril/reference-ril

ElementUI 时间选择器如何限定选择时间

DatePicker 日期选择器 | Element Plus 我们如何限定我们的选择时间呢,比如限定选择时间为今天之前,或者今天之后的时间? 我们可以使用官方提供的disabled-date来实现 我们通过这个属性 做一个回调函数,在里面比较我们想要限定的时…

MongoDB数据建模与文档设计

目录 1. 文档数据库的概念 2. 数据建模的最佳实践 3. 复杂文档结构的设计 4. Java代码实践 1. 文档数据库的概念 MongoDB文档模型: MongoDB是一种文档数据库,它以BSON(Binary JSON)格式存储数据。文档是MongoDB中基本的数据单…

#HarmonyOS:基础语法

基础语法 定义了声明式UI描述; 自定义组件; 动态扩展UI元素的能力; 状态管理 多维度装填管理机制;父子组件间爷孙组件间全局范围内传递跨设备传递只读的单向传递可变的双向传递 渲染控制 UI描述:以声明式的方式来…

鸿蒙方舟开发框架ArkUI简介

语雀知识库地址:语雀HarmonyOS知识库 飞书知识库地址:飞书HarmonyOS知识库 嗨,各位别来无恙呐,我是小白 众所周知,华为在今年推出了 HarmonyOS 4.0 版本,而在此之前的版本中,HarmonyOS 应用的 …

2024年AI视频识别技术的6大发展趋势预测

随着人工智能技术的快速发展,AI视频识别技术也将会得到进一步的发展和应用。2023年已经进入尾声,2024年即将来临,那么AI视频识别技术又将迎来怎样的发展趋势?本文将对2023年的AI视频技术做一个简单的盘点并对2024年的发展趋势进行…

Advanced Renamer

Advanced Renamer 安装链接 1.前后添加字符 2.字符转数字,编号整体加减

oracle实验2023-12-8--触发器

第十四周实验 【例】功能要求:增加一新表XS_1,表结构和表XS相同,用来存放从XS表中删除的记录。 分析: 1、创建表 xs_1 SQL> create table xs_1 as select * from xs; Table created SQL> truncate table xs_1; Table truncated题目&a…

StoneDB-8.0-V2.2.0 企业版正式发布!性能优化,稳定性提升,持续公测中!

​ 11月,StoneDB 新版本如期而至,这一个月来我们的研发同学加班加点,持续迭代:在 2.2.0 版本中,我们针对用户提出的需求和做出了重量级更新,修复了一些已知和用户反馈的 Bug,同时对部分代码进行…

PairLIE论文阅读笔记

PairLIE论文阅读笔记 论文为2023CVPR的Learning a Simple Low-light Image Enhancer from Paired Low-light Instances.论文链接如下: openaccess.thecvf.com/content/CVPR2023/papers/Fu_Learning_a_Simple_Low-Light_Image_Enhancer_From_Paired_Low-Light_Instan…

Kafka安全性探究:构建可信赖的分布式消息系统

在本文中,将研究Kafka的安全性,探讨如何确保数据在传输和存储过程中的完整性、机密性以及授权访问。通过详实的示例代码,全面讨论Kafka安全性的各个方面,从加密通信到访问控制,帮助大家构建一个可信赖的分布式消息系统…

vue3 setup router的使用教程

vue3 setup router的使用教程 文章目录 vue3 setup router的使用教程1. 安装2. 使用(创建路由实例)3. 路由跳转3.1 通过router-link标签跳转3.2 通过js代码跳转 4. 接收参数4.1 通过query接收参数4.2 通过params接收参数 5. 路由守卫5.1 全局守卫5.2 路由…

阿里云docker加速

文章目录 一、 阿里云镜像仓库配置二、配置加速1. CentOS2. Mac3. Windows注意 一、 阿里云镜像仓库配置 1.注册阿里云账号,并登陆到阿里云后台,进入控制台面板 2.进入控制台以后,找到左上方的三横的功能列表按钮,在弹出来的功能…

智能手机IC

智能手机IC 电子元器件百科 文章目录 智能手机IC前言一、智能手机IC是什么二、智能手机IC的类别三、智能手机IC应用实例四、智能手机IC作用总结前言 智能手机IC通过相互配合和协同工作,支持智能手机的各种功能和特性,如高速计算、多媒体处理、无线通信、图形渲染、传感器数据…

G1 GC基本逻辑

1 MixedGC基本过程 在G1GC中,有两种主要的垃圾回收过程:Young GC和Mixed GC。这两者都是为了回收堆内存中的垃圾对象,但是他们关注的区域和工作方式有所不同。 Young GC: Young GC主要负责回收Young Generation(包括…

跟着GPT学设计模式之建造者模式

Builder 模式,中文翻译为建造者模式或者构建者模式,也有人叫它生成器模式。允许你创建不同口味的对象同时避免构造器污染。当一个对象可能有几种口味,或者一个对象的创建涉及到很多步骤时会很有用。 现实世界例子:想象一个角色扮…

Vue:用IDEA开发Vue,标签语法爆红问题处理

一、场景描述 我在IDEA中,学习Vue课程。 入门学习时,是在html文件中,script引入vue.js文件方式。 此时,在html文件中用v-标签,爆红。 二、解决办法 打开 菜单栏 File - Settings 选择 Editor - Files Type&#xf…

《每天一个Linux命令》 -- (5)通过sshkey密钥登录服务器

欢迎阅读《每天一个Linux命令》系列!在本篇文章中,将介绍通过密钥生成,使用公钥连接管理服务器。 概念 SSH 密钥是用于安全地访问远程服务器的一种方法。SSH 密钥由一对密钥组成:公钥和私钥。公钥存储在远程服务器上,…

软件工程复习

一、题型 单项选择题 20分 填空题 10分 判断题 10分 简答题 18分 应用题 12分 综合题 30分 软件程序数据文档 软件是无形的、不可见的逻辑实体 20世纪60年代末爆发软件危机 软件危机是指软件在开发与维护过程中遇到的一系列严重的问题 …