不想写网课作业,17 岁少年敲代码“开挂”,结果火到了平台 CEO 面前......

整理 | 郑丽媛

出品 | 程序人生(ID:coder_life)

Perl 语言的发明人 Larry Wall 曾说,优秀程序员应该有三大“美德”:懒惰、急躁和傲慢。其中,懒惰直接作为了程序员的“第一美德”——因为懒得做一些重复低效的工作,优秀程序员会花时间研究如何把工作变得高效省力。

近来,一位来自英国的 17 岁少年 Alistair Smith 就很好地体现了这一“美德”:因为懒得写网课作业,Alistair 联合朋友对线上平台进行逆向工程,然后搞了个脚本“开挂”。

用脚本跳过 20 分钟的网课视频

据 Alistair 介绍,早在 2018 年他所在的学校就开始使用一种名为 HegartyMaths 的全新在线作业平台。老师会在这个平台上选择一个主题作为家庭作业,学生则要观看关于该主题的一个 10-15 分钟的网课视频(观看的同时还要写笔记),并完成一个简短的测验。

对此,Alistair 抱怨道:“听起来很简单,但实际上这很费时间,尤其是测验,在最坏的情况下可能需要一个小时才能完成一个主题。”

正如开头所说,懒惰这一“美德”很好地体现在了 Alistair 身上:为了逃避写作业,想把更多时间用在打游戏和敲代码上,Alistair 找了他的密友 Scott Hiett,打算一起研究怎么把这个网课作业“翘掉”,而突破口自然是 Hegarty 这个在线学习平台。

通过对前端应用进行逆向工程,Alistair 和 Scott 想出了用 Tampermonkey 用户脚本。该脚本可以让嵌入式 YouTube 播放器出故障,显示用户已经观看了至少 1 次视频,最重要的是老师也能看见这个数字——也就是说,这个脚本能让学生跳过 20 分钟的观看视频时间。

之后一段时间,Alistair 学校的许多朋友都找他要 Tampermonkey 脚本跳过网课视频,后续在多次使用中,Alistair 发现甚至可以把观看次数设为 9999 次:“不过每次我们这样做时,我们的帐户都会被 Hegarty 团队重置。”

200 行代码库,收集所有测验答案

到了 2018 年 11 月,Alistair 向他们的数学老师报告了这一漏洞,并让她向 HegartyMaths 发送邮件同步,结果 Hegarty 团队给予的回答是:“虽然我们会调查他(Alistair)发现的任何问题,但我们更希望他专注于数学,而不是试图利用这个机会。”

在收到这封邮件后,Alistair 坦言:“这个回应让我们有点兴奋,因为他们现在知道我们在捣乱网站,但似乎无意修复我们知道这个小漏洞,所以我们可以继续利用它。”

成功找到 HegartyMaths 的漏洞后,Alistair 很快就将目标转向了另一个名为 Educake 的线上学习平台,其主要用于生物、化学和物理教学。

Hegarty 和 Educake 之间有一个共同机制,即一旦答错了问题,系统会立即给出正确答案。利用这一特点,Alistair 和 Scott 编写了一个 node/mongo 应用和 Tampermonkey 脚本来检测用户何时在测验页面上,并用随机数回答每个问题,然后将正确答案存储在 mongo 数据库中。

其中,Alistair 透露 TamperMonkey 脚本大概类似于下列代码:

const guess = Math.random;

const result = await post(‘/api/answer’, {

body: {

answer: guess,

},

});

await post(‘http://localhost:8080/save’, {

body: {

question_id: question.id,

answer: result.success ? guess : result.correct_answer,

},

});

// Go to next question and repeat code above

nextQuestion;“正如你所看到的,它实际上是每个问题的循环,保存了我们得到的正确答案并继续推进。”在收集到正确答案后,Alistair 他们还添加了一些从数据库获取的功能以及对多项选择的支持,最后将其全部捆绑到一个简单的 Handlemonkey 脚本中,并上传至 Snapchat(一款支持“阅后即焚”的即时社交软件)供别人使用。

Alistair 自豪表示:“最终结果?一个大约 200 行代码库,收集了线上学习网站上的所有问题和答案,每次测验都能重复获得 100% 的准确率,还有一个 15mb 的 mongo 数据库。”

这初步的成功给了 Alistair 很大动力,因此他又找到了一位名为 Jake 的网友,并和他一起抓取了 Hegarty 的整个数据库:“我们有了一个可以与 Hegarty 公司本身价值相当的 JSON 文件,因为整个产品实际上就是我们复制的数据库。”

在这些基础上,Alistair 他们制作了一个 Chrome 扩展程序 Mochip。总体而言,Mochip 集合了他们抓取的 Hegarty 和 Educake 数据库,托管在 Heroku 免费层和 MongoDB Atlas 免费层上,用户可以登录,输入问题并获取 Mochip 对该问题的答案列表。

最终大翻车,被 Hegarty CEO 发现

不想写作业的学生何其多,因此 Mochip 的用户群在短时间内便迅速扩大,甚至最终还有了一个 Discord 服务器——一切看起来都很顺利,直至 Hegarty 的 CEO Colin Hegarty 上网搜到了 Scott 发布的一则关于 Mochip 的 Reddit 帖子。

在尝试 Mochip 并发现它确实能用后,Colin Hegarty 大感震惊,但却并未因此恼怒或起诉,而是发了一封邮件给 Alistair 想约时间聊聊:

“我对你做这件事的技能和能力印象深刻,我想你和你的朋友们一定非常聪明。我最初成立 HegartyMaths,是试图帮助孩子们在生活中学习和进步……我希望有机会和你谈谈你开发的应用。我们能不能在周末前约个时间聊一聊?有时候遇到这样的情况,有的公司可能会采取法律手段来处理,但我更愿意和你聊天,以友好的方式解决这个问题。”

收到这封邮件后,Alistair 直言“很沮丧,但也有点满足”——在某种程度上来说,成功吸引 Colin Hegarty 本人的注意也算是一件蛮厉害的事。

在之后约定的线上聊天中,Alistair 和 Scott 先后与 Colin Hegarty 和 Educake 团队分别都进行了对话,并主动给出了防止再次出现这种情况的完整解决方法:首先,使用 Redis 实现一个简单的速率限制,这将使自动化测试变得非常困难;其次,打乱数据库中的 ID,尽可能使克隆的数据库无效。

待一切尘埃落定后,Alistair 反省道:“我特别想感谢传奇人物 Colin Hegarty 在与我联系时的善意和体贴。如果不是这样,事情的结果对我来说可能会更严重。HegartyMaths 是一个出色的学习资源,归根结底,它是为了帮助学生学习而不是带来不便。”

Alistair 将这起事件整体复盘后,其文章在 HN 上引起了热议。部分网友称赞 Colin Hegarty 友善的处理方式,有网友认为“这种经历可能比 Alistair 躲过的网课作业更有价值”,也有网友说:“大部分学生可能真的需要这些作业来巩固学习,而这种应用会削弱他们在这方面的能力。”

对于这件事,你的看法又是什么呢?

参考链接:

https://alistair.blog/mochiphttps://news.ycombinator.com/item?id=32945906

原文地址:https://www.toutiao.com/article/7148774662993314312/

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习编程?其实不难,不过在学习编程之前你得先了解你的目的是什么?这个很重要,因为目的决定你的发展方向、决定你的发展速度。
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面设计类、前端与移动、开发与测试、营销推广类、数据运营类、运营维护类、游戏相关类等,根据不同的分类下面有细分了不同的岗位。
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生学习Java开发,但要结合自身的情况,先了解自己适不适合去学习Java,不要盲目的选择不适合自己的Java培训班进行学习。只要肯下功夫钻研,多看、多想、多练
Can’t connect to local MySQL server through socket \'/var/lib/mysql/mysql.sock问题 1.进入mysql路径
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 sqlplus / as sysdba 2.普通用户登录
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服务器有时候会断掉,所以写个shell脚本每五分钟去判断是否连接,于是就有下面的shell脚本。
BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
假如你已经使用过苹果开发者中心上架app,你肯定知道在苹果开发者中心的web界面,无法直接提交ipa文件,而是需要使用第三方工具,将ipa文件上传到构建版本,开...
下面的 SQL 语句指定了两个别名,一个是 name 列的别名,一个是 country 列的别名。**提示:**如果列名称包含空格,要求使用双引号或方括号:
在使用H5混合开发的app打包后,需要将ipa文件上传到appstore进行发布,就需要去苹果开发者中心进行发布。​
+----+--------------+---------------------------+-------+---------+
数组的声明并不是声明一个个单独的变量,比如 number0、number1、...、number99,而是声明一个数组变量,比如 numbers,然后使用 nu...
第一步:到appuploader官网下载辅助工具和iCloud驱动,使用前面创建的AppID登录。
如需删除表中的列,请使用下面的语法(请注意,某些数据库系统不允许这种在数据库表中删除列的方式):
前不久在制作win11pe,制作了一版,1.26GB,太大了,不满意,想再裁剪下,发现这次dism mount正常,commit或discard巨慢,以前都很快...
赛门铁克各个版本概览:https://knowledge.broadcom.com/external/article?legacyId=tech163829
实测Python 3.6.6用pip 21.3.1,再高就报错了,Python 3.10.7用pip 22.3.1是可以的
Broadcom Corporation (博通公司,股票代号AVGO)是全球领先的有线和无线通信半导体公司。其产品实现向家庭、 办公室和移动环境以及在这些环境...
发现个问题,server2016上安装了c4d这些版本,低版本的正常显示窗格,但红色圈出的高版本c4d打开后不显示窗格,
TAT:https://cloud.tencent.com/document/product/1340