E's Blog - 学习笔记
type: channel
link: https://latiao.vip/category/%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/
items: 逆向一个在线考试系统的前端反作弊机制，从分析到绕过
items: 浅析左、右外连接筛选出主表中不满足连接条件的行
items: 思源笔记+Alist打造免费跨平台云端笔记
items: 记思源笔记无法正常保存文档内容的解决过程
items: 为WPF的MessageBox启用视觉样式
items: 宝塔Docker之三分钟搭建KMS服务器
items: 通过WebDAV像本地硬盘一样操作阿里云盘
items: 搭建个人云盘并挂接阿里云盘、天翼云盘等
items: Ngnix下部署.NET Core程序
items: 宝塔<腾讯云专享版>？脸都不要了！

逆向一个在线考试系统的前端反作弊机制，从分析到绕过
type: item
date: 2026-04-06T23:19:00+08:00
description: 手痒逆向了一个女朋友老师自己搭建的考试系统，本人鄙视这种限制学生粘贴的行为🤣。本文记录了对两个版本的前端反作弊机制进行逆向分析与绕过的完整过程，最终通过编写 Tampermonkey 油猴脚本，实现了对两个版本所有反作弊机制的完全绕过，并额外实现了本地 Python 代码执行、下载任意学号报告等扩展功能。一、系统架构概述该考试系统采用前后端分离架构：┌─────────────────┐ ┌──────────────────┐ │ 前端 (HTML/JS) │ HTTP │ 后端 (Flask) │ │ Port 80 / 81 │ ◄─────► │ Port 5105 / 5106 │ │ Monaco Editor │ │ Python 3.10 │ └─────────────────┘ └──────────────────┘考试1：前端 :80，后端 :5105，基础反调试考试2：前端 :81，后端 :5106，升级版反调试两个版本共享相似的代码结构，但考试2在安全层面做了大量增强。后端基于 Werkzeug/Flask，提供题目获取、代码运行、批改、提交等 RESTful API。二、考试1逆向分析2.1 debugger 循环炸弹考试1的核心反调试手段是 debugger 循环。当开发者工具处于打开状态时，debugger 语句会导致 JavaScript 引擎暂停执行，配合计时就能判断工具是否打开：function detectDevToolsComprehensive() { // 学号 101242805（老师）不做检测 const studentId = localStorage.getItem('student_id'); if (studentId === "101242805") return false; const start = performance.now(); for (let i = 0; i < 100000; i++) { debugger; // 关键：如果 DevTools 打开，每次都会暂停 } const debuggerTime = performance.now() - start; if (debuggerTime > 5000) { // 正常执行远小于 50ms detected = true; } }原理分析：当 DevTools 关闭时，debugger 语句被忽略，10 万次循环几乎瞬间完成当 DevTools 打开时，每个 debugger 都会触发断点暂停，总耗时远超 5 秒⚠️ 注意：这里硬编码了老师的学号 **101242805 作为白名单。这个信息后面会被利用。2.2 计时器漂移检测第二道防线是 计时器漂移检测。页面有一个考试计时器，每秒通过 setInterval 更新 DOM。同时每 3 秒检查一次页面计时器的显示值是否与系统真实流逝时间一致：function detectDevToolsByTimer() { const timerText = document.getElementById('timer').textContent; const match = timerText.match(/考试计时[：:](\d+):(\d+)/); const totalTimerSeconds = parseInt(match[1]) * 60 + parseInt(match[2]); const expectedElapsed = Math.floor((Date.now() - startTime) / 1000); const timeDiff = Math.abs(totalTimerSeconds - expectedElapsed); if (timeDiff > 3) { // 允许 ±3 秒误差 handleDevToolsDetection(`计时器异常 (差值: ${timeDiff}秒)`); } }原理：如果 debugger 循环卡住了主线程，setInterval 回调会被延迟，导致页面显示的时间比系统实际流逝的时间慢。差值超过 3 秒就判定异常。2.3 综合检测调度中心所有检测通过一个调度函数统一启动：function setupCompleteProtection() { if (!isTopWindow()) { handleIframeEmbedding(); // 防止 iframe 嵌入 return; } setupVisibilityDetection(); // Page Visibility API setupFocusDetection(); // window blur/focus setI…

浅析左、右外连接筛选出主表中不满足连接条件的行
type: item
date: 2023-05-14T20:40:00+08:00
description: [scode type="blue" size=""]在学习多表查询时许多人仅仅停留在对左外、右外和满外连接的运用上就止步，但这是十分基础的。实际上研究重点应放在左外和右外连接衍生出来的两个变式上，此文章仅仅是个人拙见，并不全面[/scode]🚩知识背景预设SQL语句中的左外查询和右外查询(左上图和右上图)是很常见的操作，故在此不多赘述，但基于左外查询和右外查询衍生出来的两种变式并不易于理解，如下图的左中和右中所示：以左中图为例，这是基于左外连接变化而来的情况，想要得到它可以分为如下步骤：使用左外连接，以A为主表，B为从表使用 WHERE子句过滤掉A表与B表的内连接(即A与B的交集)又有如下公式通解可用：SELECT 字段列表 FROM A表 LEFT JOIN B表 ON 关联条件 WHERE 从表关联字段 IS NULL;我们要探讨的问题便是[font color="#D64E41"]公式通解中的WHERE子句为何判断的是从表的关联字段，而非其他[/font]🎯实际问题引入在了解完知识背景后，我们通过一个实际案例来引入问题0️⃣数据源我们有两张表，一张表为 employees表，另一张表为 departments表employees表：存放员工的员工ID、姓名和部门ID等信息departments表：存放部门的部门ID和部门名称等信息我们首先来查看 employees表的表结构：+----------------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------------+-------------+------+-----+---------+-------+ | employee_id | int(6) | NO | PRI | 0 | | | first_name | varchar(20) | YES | | NULL | | | last_name | varchar(25) | NO | | NULL | | | email | varchar(25) | NO | UNI | NULL | | | phone_number | varchar(20) | YES | | NULL | | | hire_date | date | NO | | NULL | | | job_id | varchar(10) | NO | MUL | NULL | | | salary | double(8,2) | YES | | NULL | | | commission_pct | double(2,2) | YES | | NULL | | | manager_id | int(6) | YES | MUL | NULL | | | department_id | int(4) | YES | MUL | NULL | | +----------------+-------------+------+-----+---------+-------+由 employees表结构可知，每一位员工都有其对应的 employee_id(员工ID)和 department_id(部门ID)及其他数据然而，employees表中有一位特殊的员工，他由于刚入职还没有部门，他的员工ID是178，我们暂且叫他菜鸟SELECT employee_id,department_id FROM employees WHERE department_id IS NULL; /*+-------------+---------------+ | employee_id | department_id | +-------------+---------------+ | 178 | NULL | +-------------+---------------+*/再来观察 departments表，还是老样子先来看看它的表结构：+-----------------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-----------------+-------------+------+-----+---------+-------+ | department_id | int(4) | NO | PRI | 0 | | | department_name | varchar(30) | NO | | NULL | | | manager_id | …

思源笔记+Alist打造免费跨平台云端笔记
type: item
date: 2023-01-13T10:48:00+08:00
description: 前置需求支持WebDAV的Alist V2/V3或其他WebDAV支持WebDAV同步方式的思源笔记版本(iOS/Linux/Windows/Android/Docker皆可)Alist挂载的网盘的WebDAV必须具有可写属性挂载任意可写盘到Alist根目录注意：由于思源笔记的WebDAV设置目录功能只读到根目录，所以必须将可写盘的文件夹目录挂载到Alist根目录举例：如果要将阿里云盘中的 \文本\思源笔记云端同步目录作为思源同步的文件夹，则需要在Alist根目录挂载阿里云盘，并将根文件夹ID填写为该目录的ID 63c0bba729ec4b7520474404bb410a2e0f6d5fef开启WebDAV代理Alist V2：开启 webdav proxy 功能Alist V3：WebDAV 策略 - 本地代理注：这一步不一定每个人都要开，可以先跳过这一步先做下面的，如果同步失败的话再回来开启代理设置思源笔记设置 - 云端 - 云端存储服务提供商 - WebDAV - 按照下面的表格填写项目填写内容Endpointhttp://你的服务器IP:5244/dav/Username同Alist用户名(V2用户在设置 - 前端 查看)Password同Alist密码(V2用户在设置 - 前端 查看)Timeout (s)默认30即可TLS Verify推荐Skip，如果选择验证的话同步失败后换回Skip然后点击 云端同步目录 - 设置，选择刚刚挂载好的思源同步目录即可总结至此已经完成了思源笔记通过WebDAV的云端同步设置，接下来在各个平台的思源笔记上分别设置一遍即可完成各平台基于Alist的跨平台同步

记思源笔记无法正常保存文档内容的解决过程
type: item
date: 2023-01-08T21:34:00+08:00
description: [scode type="blue" size="simple"]此文章仅适用于Docker版思源笔记且使用的是宝塔付费版并启用了Nginx防火墙[/scode]起因花了一个多小时用思源笔记编辑了一篇不错的笔记，但等到关闭文档后想再打开看看时却发现根本没有保存！首先排查的是思源笔记内的设置，发现 自动保存历史记录 这一功能是打开的，但却没有正常保存记录然后又将Docker容器进行重启，但仍旧无法保存没有效果。最后将目光锁定在容器程序在保存时向指定路径提交POST请求进行保存时出了错误，才开始排查防火墙。原因Nginx防火墙在拦截恶意POST请求时误拦截了思源笔记的保存函数路径 /api/transactions，由于传值时函数会将Markdown语法整个传入，导致了一部分Markdown被误判解决方法将 /api/transactions 路径加入防火墙白名单即可总结由于使用Docker版思源笔记的人数较少且同时使用宝塔付费Nginx防火墙的概率太小，如果遇到这种问题可以这样解决，也不枉我搭进去两篇心血笔记T T

为WPF的MessageBox启用视觉样式
type: item
date: 2022-11-01T19:52:00+08:00
description: 问题WPF的MessageBox看上去像XP系统的风格，有种老系统的味道。但WPF作为微软的新一代技术，为何在MessageBox上反而不如同根同源而更古早的Winform？[column][block size="45%"][/block][block size="45%"][/block][/column]原因WPF控件的绘制方式和普通程序比如Winform不一样，它是采用 DirectX 进行绘制的，而 MessageBox 是在调用Windows API，所以 MessageBox 没有采用 DirectX 进行绘制，因此我们没能在MessageBox 上看到这种视觉样式。解决仔细观察Winform程序的Main方法会发现，方法中会调用一个方法去启用视觉样式Application.EnableVisualStyles();而对于WPF程序而言，可以采用 应用程序清单文件 来解决此问题在项目中添加一个应用程序清单文件然后进入清单文件，找到如下代码： <!-- <dependency> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*" /> </dependentAssembly> </dependency> -->将注释解除后重新Bulid即可解决此问题附记如果重新Bulid后没有改变，在项目属性的Debug选项卡下面，找到Enable Visual Studio hosting process，把前面的勾去掉即可！

宝塔Docker之三分钟搭建KMS服务器
type: item
date: 2022-09-09T01:40:00+08:00
description: 以下教程均以Linux宝塔面板为例，Windows Server需在远程桌面配合CMD和桌面端Docker使用环境要求Linux发行版或Windows Server符合Docker安装环境安装Docker管理器宝塔面板 - 软件商店 - Docker管理器 3.9.1 - 安装拉取镜像并启动在终端输入以下指令：拉取镜像docker pull teddysun/kms启动容器docker run -d -p 1688:1688 --name kms --restart=always teddysun/kms开放安全组端口在服务商安全组和宝塔面板的防火墙处开放TCP端口号1688检查PING情况打开PING网站，输入 你的服务器IP:1688 然后点击 Go 按钮等待后如果能全部Ping通显示Successful则表示KMS服务器已搭建成功检查Docker运行情况宝塔面板 - Docker - 容器查看容器名为kms的容器状态是否为已启动，已启动则为正常大功告成如果上述步骤都已经完成且没有异常，KMS服务器则已大功告成！

通过WebDAV像本地硬盘一样操作阿里云盘
type: item
date: 2022-09-01T23:48:00+08:00
description: [scode type="blue" size=""]此教程仅针对Windows系统而作，Linux系统推荐使用Docker[/scode]前言目前CSDN、知乎等通过WebDAV挂接阿里云盘可大致分为两类：利用Docker拉取zx5253大神的WebDAV镜像或是部署webdav-aliyundriver的jar包。奈何前者需要安装Docker，体积过于庞大有时还需要额外安装WSL 2才能正常跑起Docker且zx5253的WebDAV镜像源目前已被删除，暂无可靠的替换源。因此有了此篇文章，不需要Docker或Java知识即可轻松挂载阿里云盘。所用项目aliyundriver-webdav-software-uialiyundrive-webdav下载图形界面下载 aliyundriver-webdav-software-ui 并解压到文件夹，以待备用。[button color=#00BFFF icon="fa fa-github fa-lg" url="https://github.com/gylang/aliyundriver-webdav-software-ui"]Github[/button] [button color="info" icon="fa fa-cloud-download fa-lg" url="https://wwp.lanzoub.com/iVOQQ0au55ri"]蓝奏云盘[/button] [button color="primary" icon="fa fa-opera fa-lg" url="https://cloud.xn--e-5g8az75bbi3a.com/%E9%98%BF%E9%87%8C%E4%BA%91%E7%9B%98/%E8%BD%AF%E4%BB%B6/%E9%98%BF%E9%87%8C%E4%BA%91%E6%8C%82%E6%8E%A5/aliyundriver-webdav-software-ui-master.zip"]阿里云盘[/button] [button color="danger" icon="fa fa-buysellads fa-lg" url="https://mega.nz/file/RpIE1azL#NJxcANzMvICo3ljsxQ4D22E87BXMYIk3cqHtTjD1Utg"]MEGA(海外)[/button]下载阿里云盘WebDAV下载 aliyundrive-webdav-v1.10.1.x86_64-pc-windows-msvc ，将下载好的阿里云WebDAV压缩包中的 [font color="#00BFFF"]aliyundrive-webdav.exe[/font] 放入解压好的图形界面根目录的 [font color="#00BFFF"]bin[/font] 文件夹中，然后运行[font color="#FF0000"]根目录[/font]中的 [font color="#00BFFF"]aliyundriver-webdav.exe[/font]。[button color=#00BFFF icon="fa fa-github fa-lg" url="https://github.com/messense/aliyundrive-webdav/releases"]Github[/button] [button color="info" icon="fa fa-cloud-download fa-lg" url="https://wwp.lanzoub.com/iVeYj0au59ch"]蓝奏云盘[/button] [button color="primary" icon="fa fa-opera fa-lg" url="https://cloud.xn--e-5g8az75bbi3a.com/%E9%98%BF%E9%87%8C%E4%BA%91%E7%9B%98/%E8%BD%AF%E4%BB%B6/%E9%98%BF%E9%87%8C%E4%BA%91%E6%8C%82%E6%8E%A5/aliyundrive-webdav-v1.10.1.x86_64-pc-windows-msvc.zip"]阿里云盘[/button] [button color="danger" icon="fa fa-buysellads fa-lg" url="https://mega.nz/file/UthHRYSD#tWUV3hFr4hujfbKVq9eK0iwOkj0d6DuQtQKgiVVlfdc"]MEGA(海外)[/button][scode type="yellow" size=""]此处的两个 [font co…

搭建个人云盘并挂接阿里云盘、天翼云盘等
type: item
date: 2022-08-19T23:18:00+08:00
description: 介绍Alist是一款支持多种存储的目录文件列表程序，支持 web 浏览与 webdav，后端基于 gin，前端使用 react。[scode type="blue" size=""]官方文档：https://alist-doc.nn.ci/docs/intro演示站：https://alist.nn.ci[/scode]能够挂载支持的网盘有：本地存储、阿里云盘、OneDrive / Sharepoint（国际版, 世纪互联,de,us）、天翼云盘、GoogleDrive(需要服务器能直链谷歌，科学上网无效)、123云盘、蓝奏云(因蓝奏云经常打击直链更换协议等，自测已失效)、Alist、FTP、PikPak、闪电盘、S3、WebDav、Teambition（中国，国际）、分秒帧、和彩云、Yandex.Disk、百度网盘、夸克网盘、迅雷云盘 等等。优势[column][block size="50%"]部署方便，开箱即用文件预览（PDF、markdown、代码、纯文本……）画廊模式下的图像预览视频和音频预览（mp4、mp3 等）Office 文档预览（docx、pptx、xlsx、...）README.md 预览渲染文件永久链接复制和直接文件下载黑暗模式[/block][block size="50%"]国际化受保护的路由（密码保护和身份验证）WebDav（具体见https://alist-doc.nn.ci/docs/webdav ）Docker 部署文件/文件夹打包下载支持视频列表播放和字幕(ass,srt,vtt)网页上传，删除，新建文件夹，重命名，移动，复制[/block][/column]官方文档：https://alist-doc.nn.ci/docs/intro预览截图安装教程1.开放端口在阿里云、腾讯云或其他服务商的安全组处开放5244的出入站端口，如果是宝塔面板还需要在面板的安全里额外放行2.创建网站如果要使用域名访问需要先创建网站并设置反向代理(后文提及)，使用IP直接访问可跳过此步3.安装#安装 默认安装在/opt/alist curl -fsSL "https://nn.ci/alist.sh" | bash -s install #自定义安装路径 curl -fsSL "https://nn.ci/alist.sh" | bash -s install /www/wwwroot/yourweb.com手动安装请参阅：https://alist-doc.nn.ci/docs/install/manual4.更新#更新 curl -fsSL "https://nn.ci/alist.sh" | bash -s update #按路径更新 curl -fsSL "https://nn.ci/alist.sh" | bash -s update /www/wwwroot/yourweb.com[scode type="blue" size="small"]安装后请务必更新，最新版功能更多更加稳定[/scode]配置教程1.后台安装完成后会出现以下提示Alist 安装成功！访问地址：http://YOUR_IP:5244/配置文件：/www/wwwroot/你的安装目录/alist/data/config.json初始管理密码：#########访问地址为：服务器IP:5244 ，输入初始管理密码后进入该页面，务必修改管理密码！2.设置反向代理[scode type="blue" size=""]如果是直接用IP访问可跳过此步，设置反向代理可通过域名访问云盘[/scode]代理名称目标URL发送域名任意http://服务器IP:5244$host挂接云盘后台依次点击 账号—添加—类型—各类云盘1.通用基本配置虚拟路径必填，唯一标识符，即你要挂载到的位置，如果你要挂载到根目录，即为 /如你要挂载到根目录的 阿里云盘 文件夹，即为 /阿里云盘挂载到根目录的 阿里云盘 文件夹中的 A账号，即为 /阿里云盘/A账号index（索引）当有多个账号时，用于排序，越小越靠前proxy（代理相关）proxy：网页端和直链走不走中转webdav_proxy：webdav文件下载走不走中转webdav_direct：webdav是否直接由本机中转如果没有proxy和webdav_proxy选项，则说明只能走中转2.添加阿里云盘取阿里云盘token访问网页：https://alist-doc.nn.ci/docs/driver/aliyundrive点击网页中的绿色按钮“Get Token”后会出现二维码，使用阿里云盘手机App扫码后确认然后[font color="#FF0000"]再次点击[/font]按钮“Use AliyunDr…

Ngnix下部署.NET Core程序
type: item
date: 2022-08-06T22:19:00+08:00
description: [scode type="blue" size=""]本文于Ngnix 1.21版本及以下成功运行，高版本需自行测试可用性[/scode]1.在Ngnix下安装.NET Core SDK与Runtime引用自微软官方文档https://docs.microsoft.com/zh-cn/dotnet/core/install/linux-centosCentOS 7前置运行以下命令，将 Microsoft 包签名密钥添加到受信任密钥列表，并添加 Microsoft 包存储库sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm安装SDKsudo yum install dotnet-sdk-6.0安装运行时sudo yum install aspnetcore-runtime-6.0作为 ASP.NET Core 运行时的一种替代方法，可以安装不包含 ASP.NET Core 支持的 .NET 运行时：将上一命令中的 aspnetcore-runtime-6.0 替换为 dotnet-runtime-6.0：sudo yum install dotnet-runtime-6.0CentOS 8[scode type="yellow" size=""]*CentOS 8 将于 2021 年 12 月 31 日提前结束生命周期 (EOL)。 有关详细信息，请参阅官方 CentOS Linux EOL 页。 因此，CentOS Linux 8 不支持 .NET 6。[/scode]安装SDKsudo dnf install dotnet-sdk-5.0安装运行时sudo dnf install aspnetcore-runtime-5.0安装其他版本SDK更改上述安装SDK代码中的版本号即可各版本号参考https://dotnet.microsoft.com/en-us/download/dotnet在其他系统上安装其他系统如Ubuntu、Debian、Fedora、macOS请参阅https://docs.microsoft.com/zh-cn/dotnet/core/install/其他安装方法转载自https://blog.csdn.net/zhaobw831/article/details/78632675执行以下命令：sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc sudo sh -c 'echo -e "[packages-microsoft-com-prod]\nname=packages-microsoft-com-prod \nbaseurl= https://packages.microsoft.com/yumrepos/microsoft-rhel7.3-prod\nenabled=1\ngpgcheck=1\ngpgkey=https://packages.microsoft.com/keys/microsoft.asc" > /etc/yum.repos.d/dotnetdev.repo'sudo yum update sudo yum install libunwind libicu sudo yum install dotnet-sdk-2.0.3[scode type="blue" size="simple"]这里的SDK版本可参阅上述的SDK版本进行更改以安装自己想要的版本[/scode]执行完以上命令后，可使用 dotnet --version 查看当前.NET Core版本2.设置反向代理宝塔面板[scode type="blue" size="small"]以宝塔面板7.9为例，可向下兼容自行设置，需面板已安装Ngnix且至少有反向代理功能的版本[/scode]网站 - PHP项目 - 选择想要运行.Net程序的网站 - 设置 - 反向代理 - 添加反向代理 - 按照如下设置填写开启代理开启缓存代理名称目标URL发送域名开关自行填写http://localhost:5000localhost其他面板或系统自行配置Nginx反向代理：只需要配置如下内容，其他不需要修改，把80端口转发到5000即可3.生成并上传项目至网页目录4.运行项目在SSH终端进入项目网页目录并执行以下命令[scode type="blue" size="small"]项目名.dll需要替换为自己的项目dll名称，例如上图Estart.dll[/scode]dotnet 项目名.dll5.使用Screen保持程序运行由于…

宝塔<腾讯云专享版>？脸都不要了！
type: item
date: 2022-07-29T06:15:00+08:00
description: 起因目前在购买腾讯云的云服务器或轻量应用服务器时选择镜像会有“宝塔Linux面板 7.9.2 腾讯云专享版”的选项，且在介绍中有如下优点，让不了解所谓专享版的用户心动不已(我当时就上了当)[scode type="blue" size=""]宝塔面板腾讯云专享版由腾讯云与堡塔公司联合开发，与普通版相比，专享版默认集成腾讯云COSFS、CDN和DNS解析插件，让用户更便捷的使用宝塔面板对腾讯云产品进行管理和操作。该镜像基于CentOS 7.9 64位操作系统。[/scode]优点这个专享版根据我个人的体验，有好有坏，我会尽量写全它的优缺点，但是根据个人感情来说，肯定是缺点大于优点的1.安装便捷在腾讯云的系统镜像里就可以选择并一键安装，但现在宝塔面板已经可以在SSH中一行命令全自动安装了，因此此优点不明显2.对腾讯云系的产品有额外支持我个人体验了大约4个月，比较好用的功能如下：功能说明评价DNSPod联动在添加网站时如果你的域名是腾讯云的，可以自动向DNSPod添加A记录解析好用腾讯云COS联动在备份网站或数据库时，可以自动向COS存储桶中也添加备份无敌好用腾讯云CDN因为我不用CDN所以没有体验到，个人觉得用处不大，能方便一部分人无3.查询服务器数据不用登录腾讯云的控制台即可查看 服务器的到期时间、流量用量、地区(是否有必要?) 等数据，有一定的便捷性，最关键的是可以在面板内对服务器进行续费，那么此功能的目的不言而喻，很大程度上是让用户续费服务器PS:对第二点的额外注释腾讯云专享版似乎只是把COS的这个功能预集成到了这个版本里，实际上即使是宝塔官方版依旧可以在 软件商店 里找到“腾讯云COS 4.8”这个软件并安装，安装后可以在备份网站或数据库时向COS存储桶添加备份缺点1.面板频繁地出现报错包括但不限于“软件列表解析失败”等各类不同的报错，在我用腾讯云专享版的这几个月已经数几十次报错，我以前在用官方版本时从未遇过的报错一个一个都被我遇上了，很多时候都在被“软件列表解析失败”折腾，面板里每切换一个页面都会报错，根本无法正常使用2.专享版优势不明显且存在BUG专享版特有的功能可有可无，COS存储在软件商店中正式版也可以安装而无须特地安装专享版，并且在获取服务器到期时间、流量时存在BUG，我在刚刚使用的前一两个月很频繁地出现获取服务器信息失败，从而导致面板的布局加载错乱甚至无法使用3.无官方正式版稳定面板更新可随官方更新而更新，但据宝塔论坛大量反馈更新内容不同步于官方版(可能落后)，且让用户承担了专享版面板的各种不稳定性风险，非常不建议运行大型稳定/商业项目回滚官方正式版方法适用于任意版本方法1、先在专享版面板首页解绑腾讯云的绑定的账号信息2、删除/www/server/panel/data/o.pl3、在服务器SSH终端中执行正式版的安装命令，在已有面板的基础上会执行覆盖安装，可保留先前的数据yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh ed8484bec适用于老版本方法在服务器SSH终端中执行下面一行代码即可，无须再次安装宝塔curl http://download.bt.cn/install/update6.sh|bash一点杂谈宝塔论坛上关于腾讯云专享版的各种求助就有上百条，我自己在几个月的使用中也确实“苦专享版久矣”，希望腾讯云老老实实做云服务，不要什么都想分一杯羹，吃相那么难看吧，祝你也助我！