易姐的博客
type: channel
link: https://shakaianee.top/
items: “绿尸寒事件”后的思考
items: 【公告】B站第三方开源API项目bilibili-API-collect永久停止维护并删除
items: 【转载】赛博MtF养成手册
items: 零开销在线运行代码！glot.io服务私有化部署
items: 尝鲜抓包工具Reqable，巧用脚本解密网易云音乐
items: 拆解华为Matebook E，扩容1T固态
items: 记一次kernel 6.0.0内核引发的bug
items: 1024节快乐
items: 研究学习通答题字体加密的随笔（二）
items: 记2022国庆傍晚骑车游校外2公里有感

“绿尸寒事件”后的思考
type: item
date: 2026-02-04T19:22:00+08:00
description: ps：本文写于2026年2月4日，前情提要：【公告】B站第三方开源API项目bilibili-API-collect永久停止维护并删除律师函风波整整过去一周，现在总算回归平静。有幸一次性收获这么大关注量，因这个项目实在是太过于知名，也不乏科技圈媒体（IT之家、蓝点网等）投稿转发带起的热度，这泼天的流量过后，该对事件本身进行一些思考，把事情看开看透，而不是深陷焦虑和懊恼之中。前一阵不少朋友得知此事后关心我，提醒我保护自己，这里就不逐一道谢了，总之感谢那些贡献过项目、关心过我的朋友们，我目前状况还好，没有收到船票（划掉）、没有被摁、工作生活一切正常、其他的开源项目也在继续参与。就这件事，下面我将采用设问（QA）的方式写下思考后的一些个人拙见，实在是不愿使用AI润色会有点啰嗦，见谅：为什么会有bilibili-API-collect？20年叮咚鸡时代，那时候我高二在读，封闭宅家期间除了网课和作业，就是打游戏、看番、水群，娱乐久会倍感虚无，迫切需要有价值感的事接替。某天在某群看到自制的“B站粉丝计数牌”，又看到可以解析链接和av号的qq bot，作为16年就入站的老用户，我敏锐地察觉到这种“不通过浏览器或客户端”就能获取B站信息的神奇之处。俗话说“兴趣是最好的老师”，在好奇心驱使下我试图深入了解这一全新的领域，原来无论是浏览器还是客户端都用一种叫“API”（应用程序接口）的技术与服务端通讯，以此交换信息，顺便也对HTTP协议和json格式进行了解。当目光不再局限于“视频解析”和“粉丝数”时，我按下F12、安装fiddler和burpsuite，这又带我进入了一个全新的领域......起初只是闲聊意味地分享自己的研究成果，编辑成txt发到群文件中，群友觉得好玩、有用，建议我写得更详细更美观，我听劝学习了markdown；再到后来章节越发繁多，不方便查阅，改为了多文件多目录的形式；在群文件中不便共享、不便版本管理，于是学习了git，并传到了世界上最大的代码托管平台————github，项目命名主打一个直球、通俗易懂，就叫“bilibili-API-collect”，至此命运的齿轮开始转动。仓库创建不到几个月，就收获100 star，我有了更大的动力把这件事做下去。从第一个参与者发来的PR起，我就意识到做这件事并不孤独，开源社区是属于技术宅们的乌托邦，我把思想从“玩”转变成了一个开源参与者、一个项目的maintainer。现在回过头来看，BAC项目能做到如此知名，说实话是超乎预料的，参加工作后仍能抽出点时间和经历维护一个“不赚钱”的项目，只因想做好一个曾经被肯定过的事、只因兴趣使然。BAC项目创建自2020年3月4日，关闭于2026年1月28日，历时将近6年，收获20.4K star，有215位直接贡献者参与，感谢这个项目曾经对社区、对参与者们、对下游生态、对我个人的意义，这是一个时代的句号。bilibili-API-collect给我带来了什么？高二之前，自己几乎没什么技术栈，从小的兴趣是硬件，也就是玩板子、搞电路，直到初中那会接触单片机才学习了C和C++，也算是入门了编程语言和计算机，但仍对网络相关领域一窍不通。有了做BAC项目的动力和经验，我在高二时就提前利用课余时间点满自己的技术栈，奠定了自己现在的方向。整个过程可谓是“任务式学习”，效率比老师填鸭讲课不知道高到哪里去了。遇到域名、端口和ip地址就去学习TCP/IP；遇到浏览器里看到的HTML、Js、CSS，就去学习Web开发；遇到Js里乱七八糟的字符，就去学习反混淆和动态调试；遇到需要逻辑测试的接口，那就顺便把Python也给学了；遇到安卓和Windows客户端，就去学习反编译技术；遇到需要黑盒测试的接口，误打误撞敲开了信安的门，简要学习了CTF技术，甚至还给B站主动提交了几个漏洞......本着不要把所有的兴趣都做成职业的想法，我把网络作为主业，硬件作为副业，这个领域的兴趣和技术也决定了我大学的专业和就业的方向。与此同时，在和BAC项目的参与者接触后，不仅掌握管理大型项目的经验，也掌握了沟通的经验，更难能可贵的是加入了这个圈子。依托开源社区交到了许多朋友，这些朋友不仅是BAC项目的参与者，也和我在其他领域有所交集，有的从普通网友发展成为了真心朋友，有的给我工作生活提供了帮助。可以说没有BAC项目就没有今天的自己！bilibili-API-collect给我带不来什么？BAC不是一个代码项目，它本身也并不能运行以实现什么功能，之所以能做到这么大体量，收获20K+ star并不是因为它的独创性，而是它在官方开发API使用门槛高、文档质量差的背景下，抢占了“B站第三方文档”这个生态位。曾有一些朋友开玩笑，说拿着这个项目去应聘技术岗位（甚至去B站应聘）绝对很吃香，我却不这么认为，这个项目…

【公告】B站第三方开源API项目bilibili-API-collect永久停止维护并删除
type: item
date: 2026-01-29T18:32:00+08:00
description: 2026年1月28日，本仓库维护者收到B站委托的律师事务所发律师函警告邮件，指控本仓库中的项目存在“通过技术手段对哔哩哔哩平台非公开的API接口及其调用逻辑、参数结构、访问控制及安全认证机制进行系统性收集、整理，并以技术文档、代码示例等形式向不特定公众传播”的侵权行为。即日起停止维护并删除相关文档及源代码。仓库链接：https://github.com/SocialSisterYi/bilibili-API-collect相关函件如下：仓库已做删除文件和Archive处理：

【转载】赛博MtF养成手册
type: item
date: 2025-07-20T23:30:00+08:00
description: 原文：https://shef.cc/2024/03/01/how_to_pretend_to_be_a_mtf/嘿，我是SheepChef！这是一篇挺有意思的文章，是我第一次尝试研究一种文化和一类人的共同点。本文章旨在用简洁的语言告诉各位顺直[1]和MtF[2]，在网上如何发言，才能从标准意义上”被认为”是一个MtF。简言之，本文章会告诉你：怎么做才能伪装成一个MtF，或被MtF群体更好地接纳。本文会分别阐述MtF作为一个群体的行为，语言，文化，和其他特质，并从这些方面来分析你为了伪装成一个MtF的最佳实践。本文也适用于那些仅想了解一下MtF流行文化的读者。注意：本文章不是写给大多已经入圈的MtF看的。本文不会包含用药指南，手术，心理支持等与主题无关的内容。本文也不是写给FtM群体看的，除非看这篇文章的读者您期望自己融入MtF群体。让我们开始吧。应了解的基本知识先从基本知识说起。本节介绍你应该了解的所有（至少大多数）有关MtF群体的基本知识，有助于你的身份伪装。如果你想了解更多更深入的跨性别专业知识，可以查阅 MtF Wiki。文化标志旗帜跨性别文化的标志颜色是蓝色，粉色，和白色。下面是跨性别旗帜的示例，如果你想要比较标准的颜色代码，请前往文末的附录。跨性别旗你可能见过网上有些人的头像以上方旗帜为背景，搭配一个动漫人物。这是跨性别群体的典型特征之一。这里先按住不表，下文将会进一步介绍相关内容。这里还不得不提另外一个小知识，2020年1月29日，Unicode Emoji 13.0 标准更新了跨性别旗帜的Emoji（🏳️‍⚧️）。如果你的设备接受了此次更新或者你所使用的软件平台支持它，那么你可以找到并使用这个Emoji。雷达MtF群体的“雷达”，是一种隐晦的身份标志物，皆在隐晦地暗示自己是一名MtF。其图案是日式拉面的一种配菜，称作鸣门卷，又称鱼板。鸣门卷/鱼板（日式拉面的配菜之一）补加乐鸣门卷是之所以会成为MtF的标志物，是因为它，歪打正着地，和MtF群体常用的一种雌激素药物 戊酸雌二醇(补加乐) 的商品Logo很像，在圈内渐渐成为了标志物。你可能见过网上有些人在昵称里加入了鱼板 （🍥） Emoji，或者现实中遇到的某些人佩戴了类似的小挂件，这同样是MtF群体的典型特征之一，下文中会继续介绍。鲨鱼 BlåhajIKEA，在中国又叫宜家家居，推出过一款蓝色鲨鱼抱枕，并为其取名 Blåhaj （布罗艾）。其推出时和跨性别群体本没什么关系，但由于该鲨鱼抱枕采用蓝粉白配色，和上文中提到的跨性别旗帜的配色相近，所以被跨性别群体视为其象征物之一。Blåhaj 抱枕（IKEA 官网广告图）鲨鱼抱枕在MtF群体内被称为 小鲨鱼 或者 抱鲨 。MtF群体并不会特别地在昵称或者头像中突出它，不过，你可能见过某些以鲨鱼为主题的表情包。如果你单纯地喜欢这种鲨鱼抱枕的设计和质感，也可以前往电商平台购买一个，无需担心潜在影响。一个额外的信息是，这种鲨鱼抱枕有两种尺寸，小尺寸版被称为 幼鲨。本站未收费推广此产品。性激素和相关药物MtF群体为了达到外观女性化之目的，需要使用各种药物。你，正在阅读的读者，为达到伪装成一个赛博MtF之目的，也需要了解相关基本信息。这并不意味着一定要买来药物才能证明你是MtF，不过在大多数情况下，假装自己正在服药对你的身份更加有说服力。本文不会深入地介绍药物用法，请所有想要了解药物用法的人士移步MtF Wiki（见本文开头链接）同一种有效化学物质，因制药企业不同，可能对应不同的商品名。本文接下来介绍的药物均使用有效成分的化学/药学/生物学名称，在内容中会注明此类化学物质在MtF群体中的常见商品名。MtF群体中，有些人会将所有激素类药物隐晦地称为 糖。不推荐非MtF人群服用下文中即将介绍的药物，请将它们作为知识看待。贸然服用MtF所用的激素类药物，可能会带来诸多不良的副作用，还有造成男性不孕不育和显著减少预期寿命的风险，切勿因好奇而随意服用之。雌二醇雌二醇（Estradiol，E2），顾名思义，是人体中一种主要的雌性激素。一般情况下由卵巢分泌。负责调节女性特征、附属性器官的成熟和月经-排卵周期，促进乳腺导管系统的产生。男性由于没有卵巢，不具备直接分泌雌二醇的能力，男性体内的雌二醇在正常状况下仅保持非常低的水平，是睾酮的代谢产物。但外部摄入的雌二醇可以直接作用于男性，使机体发生一系列变化，譬如：声音女性化（在男性喉结发育前）、四肢和躯干变细，皮肤肤色变白、乳腺发育、肌肉萎缩、性功能和性欲下降或消失等等。补加乐一种十分常见的雌激素药物是戊酸雌二醇（补加乐，拜耳制药），常见用途是治疗雌激素分泌不足的女性，但现在也被用于跨性别人群的激素治疗。补加乐MtF群体中，常常将补加乐简称为 补 或者 补子 。还有一些MtF将雌激素类药物简称为 雌，…

零开销在线运行代码！glot.io服务私有化部署
type: item
date: 2024-05-19T01:11:00+08:00
description: 感谢 来笙云 Laysense.cn 提供算力作为一个全栈工程师，开发、维护和测试一些软件系统时，必然会涉及到多种编程语言，有时还需要测试一些编程语言的安全特性，常常需要敏捷地了解它们并立即上手。在朋友的推荐和社区分享下，我了解到一个名叫 glot.io 的开源项目。它支持40多种编程语言，无论是热门的 Python、Go、Rust、Kotlin，还是冷门的 COBOL、Erlang、Haskell 只需在网页上选择对应的语言，即可开始编写。为使用者提供了一个 Sandbox（沙箱）和 Playground（游乐场）环境，既不需要配置它们的 Runtime（运行环境）和 IDE（集成开发环境），也不需要担心误操作对系统产生破坏性，还不会占用任何用户端的系统资源，实现真正的零开销运行代码。在代码编写界面，可以创建多个源码文件，完成后点击Run就能执行它并得到输出，类似我们平时编程那样，将输出打在终端上。整个过程不会生成任何可执行文件，所以它的应用场景不是在线编译，而是在线运行代码片段。glot.io 这个网站提供了公开的代码片段执行和分享功能，任何人在注册后都可以分享自己的代码片段，并使用它的 API。但有时为了安全性和访问速度考量，需要自行搭建这个开源平台，这篇文章将介绍 Glot 的私有化部署。Glot是什么根据项目 README 上的一句介绍：an open source pastebin with runnable snippets and API.这是一个开源的共享剪切板和代码片段执行器，并提供 API。它使用 MIT 协议开源，代码托管于 github 之上。https://github.com/glotcode/glotGlot 并不是一个独立的工程，它分为多个组件，这样设计底层架构有利于业务解耦，降低后期维护和升级开发的难度，它们之间的逻辑关系如下：由下面这些组件构成，也全部使用 MIT 协议开源，均托管于 Github：glot-www：提供 B/S 前端应用docker-run：提供执行 glot-images 镜像能力的微服务glot-images：按需构建的执行器镜像code-runner：容器内的执行调度器其中 glot-www 是一个 B/S 架构应用的服务器，用来提供一个面向用户的 WebUI（网站），它包含前后端的组件，后端使用 Haskell 语言编写。实现代码片段保存和共享、用户登录、以及共享剪切板所的功能，由 pgSQL 提供存储支持。与此同时，它与实际的代码执行业务互相解耦，使用 RestAPI 进行 RPC 调用，可做到前端服务器和后端代码执行服务器逻辑上隔离。Glot 的代码执行沙箱基于 Docker，在容器中编译和运行，不但与宿主机隔离，且容器之间也相互隔离，还能对运行资源进行限制，防止宿主机被不信任的代码破坏。当然，各编程语言的执行容器构成不尽相同，这样才能在节约存储空间的同时最大保持运行效率，比如 C 和 C++ 共用了glot/clang这个镜像，C# 和 F# 的镜像都有 mono 这个依赖……这些 Docker 镜像由 glot-images 项目进行生成，它并非使用传统的 Dockerfile，而是使用了 nix 进行构建，支持多种主流编程语言。宿主机与沙箱的通讯，实际上就构建并将代码传入容器。这个传递方式不使用文件，而使用 stdi（基本输入）的方式传递 json，例如这样的形式：echo '{ "language": "python", "files": [ { "name": "main.py", "content": "print(42)" } ] }' | docker run --rm -i --read-only --tmpfs /tmp:rw,noexec,nosuid,size=65536k --tmpfs /home/glot:rw,exec,nosuid,uid=1000,gid=1000,size=131072k -u glot -w /home/glot glot/javascript:latest执行完成之后以 stdo（基本输出）的方式输出 json，stdout、stderr 流、以及错误信息在序列化后拆分成各个字段：{ "stdout": "42\n", "stderr": "", "error": "" }一般编程语言分为编译型、解释型和虚拟机型，其中解释型直接执行文本文件中的内容，编译型则需将其编译为可执行文件再执行，而虚拟机型在编译完之后，还需用 vm 执行字节码。glot-images 将各类编程语言生成的工作流统一归做 json 格式的文本流，这样标准化更利于开发和扩展，这种能力归功于 code-runner 这个组件。code…

尝鲜抓包工具Reqable，巧用脚本解密网易云音乐
type: item
date: 2023-10-19T19:30:00+08:00
description: 作为新一代国产跨平台 HTTP 抓包调试工具，Reqable 继承了它的前身 HttpCanary 小黄鸟的优良传统，免费版足以胜任开发、逆向、调试，是真正的生产力工具。不同于其他基于 Electron 的跨平台应用那么臃肿，它使用 Fultter 开发，软件打开速度那叫一个快。不止拥有强大的抓包功能，还可以打断点、脚本、重写、HTTP 请求调试，甚至可以在抓包时复制任意一条记录到接口测试页，可重放发包和修改后发包，是非常高效的功能。对于抓包，可以进行域名和路径的收集和筛选；对于 HTTP 调试，可以做多个接口测试页，方便整理和生成模板代码。是 Fiddler/BurpSuite/Charles 的平替，是 Postman/Apipost/Apifox 的下位替代品，至于具体场景哪个顺手就用哪个啦～博主了解到这款工具时，它已经发布正式版5个月，截至这篇文章编写时，最新的版本是V1.6.0准备工作今天博主就利用它强大的脚本功能，探究网易云音乐PC客户端的 API首先第一步当然是去官网 https://reqable.com/zh-CN/download 下载软件了，它目前支持 Windows/Linux/MacOS 三种 PC 端平台，分别对应 .exe/.deb/.dmg 安装包，这里使用 Windows 10 系统，首先安装软件现在绝大多数 C/S 架构的应用程序与服务器之间的连接使用 SSL/TLS 加密，即 https，防止在传输途径中被中间人监听和篡改，保证了数据的安全性和完整性抓包软件作为中间人，必然是需要它有监听和篡改的权限。因此，第一次使用 Reqable 需要配置 CA 根证书，只有系统中添加了信任的 CA 根证书，才可以正常绕过 SSL 的服务端验证并加解密 https 协议这里 Reqable 的默认代理端口是9000无需修改，要让网易云音乐客户端走这个代理，而不是直接访问互联网，就需要在设置中配置它，在工具中添加自定义代理，地址填127.0.0.1本地回环，端口填9000接下来，就可以愉快地进入网络协议的世界了抓包分析修改代理后，网易云音乐客户端就会自动重启，同时在调试选项卡可以看到软件刚启动时收发的数据包记录下方一排按钮可以对结果进行筛选，针对协议类型、响应类型、状态字这几个维度，筛选出最关注的类型，提升调试效率点击左侧工作台按钮，可以按照域名、应用程序、路径进行筛选，适合用来分析 REST API如果稍有经验，就可以判断出哪些请求是在线的静态资源，哪些是 REST API图中选中的区域都是 REST API 类型的请求双击任意一条请求，即可在右边窗格中分析请求与响应的详细信息，如头部、Cookie、表单、时间、证书等等对于响应体为图片的请求，还可以对图片进行解析显示切换头部选项卡，可以查看解析后的请求与响应头部字段，是 key-value 格式，其中请求头以:起始的都是元字段，如路径、方法等等查看的这个请求的方法是 POST，根据头部字段Content-Type的值，请求体类型为application/x-www-form-urlencoded，即 urlquery 表单格式；响应体的类型是application/json;charset=UTF-8，即 json解密数据我们了解完这款软件的基本使用方法，就可以直接开抓了但网易云音乐客户端的接口并不友好，可以看出请求体表单只有一个字段params，它的值是一段毫无规律的数字与字母组合，并没有其他的字段，由于只有0-9和A-F那么它很有可能是一段以 base16 编码的二进制数据；响应体也并非 json，而是一段乱码，可能也是某种人类无法直接读取的编码这是因为网易云音乐 API 请求体与响应体都是加密的数据，需要进行解密才能获取到真实的数据经过一番STFW（在网上查找资料）后，发现这是一段用 AES-ECB 对称加密算法加密后的密文，密钥为e82ckenh8dichen8，通过硬编码写死在程序中所以我们很容易对它们进行解密，这里使用 Python 语言做验证解密后的明文数据还需要对它进行处理，首先去除末尾的\x0b（AES 的特性导致，输入数据必须是 16Byte 的整数倍），再以-36cd479b6b5-作为分隔符拆分文本数据的三部分，分别对应接口路径 请求参数 接口sign其中只关注请求参数即可，这是一段 json 数据所以可以把这一系列操作封装为一个函数，输入params字段的密文，输出接口路径和请求参数import base64 from Crypto.Cipher import AES from Crypto.Util.Padding import unpad import json EAPI_KEY = b"e82ckenh8dichen8"…

拆解华为Matebook E，扩容1T固态
type: item
date: 2023-04-09T16:26:00+08:00
description: 21年底入手了一台 Matebook E，作为在大学时的主力机使用，上能做开发、剪视频，下能看番、看论文、甚至玩 GAL，轻便得像本书，可随手拿走带到教室，除发烧外似乎也没什么很大的槽点。由于工（zhe）作（teng）需要，上面装了各种虚拟机和开发环境，存储空间就显得有些捉急，时长看到硬盘剩余空间 100GB 左右，鉴于这款机子全网的拆解资料一只手都能数清，我决定挑战一波，看看有没有升级的可能性。拆解由于机身上看不到任何一颗螺丝，所以它应该是类似大多数平板电脑的贴合结构，只能从正面屏幕入手了手头没有加热垫，只能试图用吹风机吹开，折腾了半个小时未果，我猜想应该是散热效应导致的，可能日常背后发烧的温度都要比瞎吹一阵的温度高最后无奈，苦想中突然意识到这会是冬天，房间角落里有个小太阳，这不可以利用一下哈哈把整个屏幕面加热至 80~90℃，配合塑料拆机片划开四周期间继续配合吸盘和吹风机操作拆的时候需要注意屏幕正下方的排线，以免划断把4个边缘的胶都划开后提起屏幕，可以发现有一条排线与后面的机身相连屏幕排线的接口为 BTB 分为左右两个端子，并且上面有盖板，要分离首先需要把盖板左右的螺丝卸下屏幕下方的中框为铝镁合金材质，上面有 30 多颗十字螺丝，一定要准备好一把电起子和磁铁，不然会很麻烦电池粘在中框的背面，为 3 电芯 3S 结构，对于电池没有任何可升级空间右上方镂空区域对应散热风扇的位置，使用一年积灰还是比较多的接着把目光拉回后壳的主体部分左上部位是一个小板，上面主要集成着 Wifi 模块和后摄，有两条排线与主板相连，它的旁边就是散热风扇，顺便清一下灰中间的部位覆盖着导热板，它的下方压着 CPU、内存和南桥，并延申至散热风扇下，这里不想破坏原厂的硅脂就不去拆它了顶部的区域有前摄、手写笔的充电线圈和麦克风，右上角是一些外围电路，盲猜是 PMIC EC 时钟 等等，主板一直延申到机身右下方的 Type-C 接口处一览它的全貌，可见设计得十分紧凑，不同于普通笔记本的设计语言，布局更像是手机和平板左右两侧下方的巨大黑块就是左右声道的中低音扬声器 BOX，上方的小黑块是高音扬声器 BOX在主板边缘包裹着铜箔的，就是 2280 全长的 SSD，也是这款机子唯一可以升级的地方撕开铜箔，原装的 SSD 为致态的 OEM，无印良品撕开可以发现主控是慧荣的 SM2262ENG，有缓存，单面两颗粒扩容在拆机的同时，我在🐶东 600 多下单了一款致态的 TiPlus7100，1T 的 SSD，算是国货之光了使用联芸 MAP1602A 主控，只装了单面个两个颗粒，没有缓存接下来就是迁移数据了，在不重装系统的情况下需要让新硬盘换后可以立即投入使用由于手头没有 M2 的硬盘盒，只能借助一下台式机的主板了，正好它有两个 M2 的插槽对了，顺便提一嘴，迁移数据之前一定要把 bitlocker 加密关掉，不然压根没法迁移接着就是启动 PE 用 Diskgenius 进行分区克隆了（这里因为拔走了台式机原本的系统盘，当然不进 PE 也可以进行克隆然后...就是漫长的等待了， 把原装的 SSD 作为克隆源，把新的 SSD 作为克隆对象，大概需要等待 1 个多小时可以顺便把“Onekey”分区给扬了，克隆后需要使用chkdsk对系统盘进行修复，例如我这里系统盘是 K 盘chkdsk /f /x K:再使用引导修复工具对 BCD 进行重建当修复完之后就可以把新的 SSD 装回机器了，务必不要拧上全部螺丝，只拧上电池触点周围的几颗螺丝即可，防止返工这时如果开机，会直接蓝屏，因为需要清空一下内建 TPM，重启按 F2 或者音量下键，进入 BIOS 设置，把安全启动关闭保存重启后就能正常进入系统了，检查软硬件没任何问题后，需要进 BIOS 重新开启安全启动后，才可以打开 bitlocker 加密磁盘管理中 C 盘的大小已经变成了 935GB（只分了一个区）可以存更多的学习资料了最后顺便测一下速，顺序读取已经可以突破 6GB/s 了，其实只看测速也没什么参考价值真正使用下来了几个月，发现存储了大量数据的情况下，速度没有很严重的衰减最后的步骤就是“倒放”了，注意刚才拆下的螺丝，可别“优化”掉几颗（忽略满屏幕的爪子印用酒精加上卫生纸把屏幕擦干净，并且把四个边缘的胶压结实至此扩容工程全部完成，希望它还可以再战五年视频版不会吧不会吧，竟然还发了视频？[bili av="524989935"]

记一次kernel 6.0.0内核引发的bug
type: item
date: 2022-12-16T01:05:00+08:00
description: 被迫当了一天半“自宅服务器运维员”，差点数据火葬场，在这里给大家避个坑吧我实体服务器放家里，系统是原生 Debian 11存储环境是 4*2T HDD 组的软件 RAID5，容量大概 5T 左右，文件系统是 btrfs，这里/dev/md0p1就是 RAID 分区，挂载在/storage上。系统盘也就是/目录和/boot目录存放在 128G SSD 上RAID 区上主要存储各种文件，比如电影照片游戏等、以及自己的各种工程项目，当然服务器上同时还跑着 Docker 和 MySQL，它们的存储路径也放在/storage下，也就是存在 RAID 区里问题的导火索昨天下午收拾东西的时候撞了下网线，没过一会就收到了 uptimebot 的告警邮件，原来是服务器断网了（这里监控的是使用 frp 穿透的 https 服务），赶紧用手机连上 ssh 检查，但内网没问题外网却连不通，寻思着服务器也连续运行了 90 多天该重启了，无脑sudo reboot了一下，这下好，直接闯祸了（事后才知道是重启后 grub 默认加载了6.0.0-0.deb11.2-rt-amd64kernel发现问题我 qq 机器人的服务端和数据库是分离的，服务端基于 Aridane+Mirai 搭建，数据库用 MySQL，由于这玩意业务逻辑比较复杂，自己优化做的也很差，所以放在云服务器上跑，因为自己撺出来这实体机性能也明白，但数据库服务还是使用这台实体机，之间使用 VPN 组网进行连接（因为用家宽没有公网 IP在重启服务器后，突然发现 qq 消息不停刷，原来是机器人给我连续抛出几十个异常上报，内容都是关于 MySQL 连接失败的这下我就纳闷了，于是又火速连上 ssh 检查 VPN 的状态，设备之间能互相 ping 通（云服务器是10.50.9.1家里这台服务器是10.50.9.10），那么接着按照惯例就该检查 MySQL 状态了。我已经设置为开机自启，但sudo systemctl status mysql查看，发现服务没有启起来，如果稍微懂那么一丢丢 Linux，那么你第一反应就是赶紧 start 它。但事实上，start 后它就寄了！一般 start MySQL 服务也就几秒完毕，但这次我等了半分钟也没启动完毕，紧接着我在 ssh 终端上看到一条 broadcast 消息，作为浅尝过 Linux 的小白，肯定知道终端出现 broadcast 消息一定大事不妙。很好，CPU 直接 stuck 了，按 Ctrl-C 虽然能回到 shell 环境，但 htop 查看 CPU 其中一个核心占用 100% 却看不到任何占用它的进程，当然 SSH HTTP SMB FTP VPN VNC FRP 这些服务无一例外没活着的，端口正常开放，连上后没响应尝试解决问题我的天，正常关机也不能实现了，因为这个时候 systemd 也卡住了，走不了流程，只好强行拔电，插电开机继续找问题我当时一度认为 MySQL 的 binlog 过大把进程卡死了，因为这个服务器上的数据库不仅给 qq 机器人用，还给爬虫、网盘服务用，数据的吞吐量很大。就尝试删除 MySQL 的 binlog，没想到一删直接踩雷，ssh 连接给我断了、硬盘刚才还轰隆轰隆，顿时变得安静起来了、硬盘灯全部熄灭、当然 ping 不通了。它，这次没有报 stuck，而是直接宕机了！太怪了，为啥删几个文件就轻松死机，有点不对劲（内心 OS：快进到数据火葬场）赶紧让老子先备份一下数据库，整个 MySQL 存储文件夹端走得了，已经用systemctl disable mysql关闭 MySQL 开机自启了，这样至少不会开机既死机，可以苟一会尝试把 Mysql 文件转移到 SSD 去，但涛声依旧，没拷过去几个文件，咔的一下系统又宕了rsync -ravh /storage/DataBase/mysql /Mysql越来越离谱了，难道是只要访问/storage/DataBase/mysql这个路径就会触发宕机？于是我排除一下，扫描/storage/File下的文件（这个路径下主要存项目、学习资料、游戏，大概有1T左右），因为du会遍历整个目录树，所以正好能用来检查读取文件的稳定性du -hd1没想到啊，仍涛声依旧，不碰 MySQL 存储目录还是会宕机，证明不是 MySQL 的问题。如果，读写某些特定路径会死机，那么照常理讲，最大的可能应该是文件系统损坏。如果真是 btrfs 损坏那基本上没人能恢复得了，再加之我是在 RAID 之上建立的分区，如果损坏那么就像火化后再浇一盆冷水（整个人慌了起来，万一数据火葬场就哭得没眼泪了一波三折首先我怀疑是 RAID 的问题，就手动触发一下 RAID 的一致性检查机制吧，因为该服务器使用 RAID5，有一定的容错…

1024节快乐
type: item
date: 2022-10-24T10:38:00+08:00
description: HAPPY1024 在宿舍的业余十八线程序员祝大家1024节快乐，代码少出bug、服务器别宕机，保护好头发和眼睛，早点睡觉，参上٩(๛ ˘ ³˘)۶♥

研究学习通答题字体加密的随笔（二）
type: item
date: 2022-10-17T16:41:00+08:00
description: 本文操作只做技术讨论，请勿用于非法用途！前情提要书接上回，学习通答题页在未答时，考虑到防止作弊存在字体加密，复制或者直接用脚本搜索会表现为乱码，为了刷题，于是乎我给搜题后端整合了一个复杂的加解密逻辑又到了完成网课的时间，不过这次是《军事理论》这门课这次需要刷更多的题，以前写的程序 bug 百出，望着自己的屎山代码发呆，根本无从下手修改，寻思一定是架构设出了问题重拾本源，厘清思路首先学习通的答题页面是 SSR（Server Side Render），原始密文和密钥（加密字体）都通过 html 回传至浏览器而经过加密的文本是随机替换掉一些字体的编码看上去是混有部分乱码的文本，把乱码和正确字形对应起来放在传入的 TTF 加密字体中，在前端渲染后视觉上是正确的，但复制后人类和机器都不太容易阅读，加密原理就这么简单使用 F12 工具分析 html 结构得知，每道题目div中均含有Timu类，题干和选项略楼不同，如下：题干是div下存在font-cxsecret类，文本就是标签内容 【单选题】从1842喣喟1937喣喡喢被喠签喞了()个不喤等条约。 选项在div下存在font-cxsecret类，但文本存在于该标签下的a子标签下 A 俄坌坍 规定密文区段使用font-cxsecret class，在 css 中为该 class 指定了 font-family，字体也是 SSR 的以 base64 编码放在其中，之所以密文可以和正常文本混合，是因为 css 字体的 fallback 机制如下： 所以，为什么要整那么复杂捏？会不会存在一种可能性，就是不在搜题过程中实现加解密、处理各种复杂情况，而在搜题前直接把这些密文替换掉？还是使用和上次相同的技术栈，前端油猴脚本 + 后端 Flask有了以上的归纳总结，再配合自己所学的那么一点点 JQuery（学习通前端使用了JQ）和 JS 编程经验，就可以利用油猴脚本提前抓取字体数据、以及这些经过加密的文本，并进行遍历请求，让后端解密，从而以明文取代掉密文先定义一个抓取加密字体的base64的函数，使用正则表达式暴力匹配带有type="text/css"属性的style标签中的文本// 拾取加密字体 function getSecFont() { return $("style[type='text/css']").text().match(/'(data:application\/font-ttf;.*?)'/)[1] }由上文可得，抓取所有题干及选项文本，就是几个特定 class 的他特定标签内容所以我们写一个 JQ 选择器，同时匹配每道题的题干以及全部选项，化繁为简$('.TiMu').find('div.font-cxsecret,.font-cxsecret a')下一步就是向后端回传数据了通过查阅文档，了解到油猴脚本中创建跨域请求需要用到一个 API 函数GM_xmlhttpRequest而不能使用传统的 xhr 以及JQ.ajax这里使用JQ的.each()方法遍历选择器的匹配列表，使用快捷方法$(this)得到遍历的当前项，再把刚才所抓取的字体数据一并序列化成 json POST 给后端当后端解密返回响应时，异步执行一个回调函数，替换掉当前标签的文本，并敲除font-cxsecret类// 解密全部字体 function decryptAll() { let secFont = getSecFont(), encryptTexts = $('.TiMu').find('div.font-cxsecret,.font-cxsecret a'); // 遍历加密字体项 encryptTexts.each(function() { let dstText = $(this); GM_xmlhttpRequest({ method: 'POST', url: `${setting.tiku}/decrypt`, headers: { 'Content-type': 'application/json', }, data: JSON.stringify({secFont: secFont, dstText: dstText.text().trim()}), responseType: 'json', onload: function (xhr) { if (xhr.status == 200) { dstText.text(xhr.response.srcText); dstText.removeClass('font-cxsecret'); } } }); }); }把函数decryptAll()放在开始搜题的处理之前执行，那么搜题时就全是明文了（搜题部分不在本篇探讨范围内，略过。。。这样一来，后…

记2022国庆傍晚骑车游校外2公里有感
type: item
date: 2022-10-01T20:27:00+08:00
description: 比病毒更可怕的，是人心。返校至今坐牢两周出头，一天一核酸，门禁如防川。在校不必封楼“自我隔离”，但网课依旧，俨然失去了教学功能，如同“大型招待所”。盼望已久的救星来了，十一假期虽说仅有三天，实则停课三天，放假是不可能的。我终于蚌埠住了，但你觉得这样大门能轻易出去吗，还得是“走老路”溜号子。。。。。。。出校之后如脱笼之鹄，但恍惚间又浑身不自在，无负罪之感，但罪犯就是我，监狱很大，有到天边那么大，身上穿着囚服，手脚拴着无形的镣铐。街上很冷清，但又不完全冷清。所有的店似乎都关着门，哦不对，只有商店和药店开着门；街灯和车灯依旧耀眼，路上的行人和车漫无目的地走，我也骑着车漫无目的地走。街上听不到庆祝声、喧闹声、玩乐声，甚至曾经街边店里的吆喝也销声匿迹，取而代之的则是每个小区门口每个村口那此起彼伏的、喧天的“赶紧下楼做核酸”之声。街上人们的精神状态不像是已经放假，不像即将度假亦或要去和家人团聚，而感觉一个个都在赶路，有的手里提着大小塑料袋来回跑动。万达广场关门、城市各处的公园没人去、市中心一片死寂，熙攘夜市今何在，唯有大铁门吧，甚至一家蜜雪冰城都没给我留。我低头看看手表，是10月1号国庆节没错，抬头看看满街的国旗，确定自己没有穿越，当然两周多的牢也不至于坐得心理障碍，只能说一切都是真实的。我有一点点渴，但不想停下来进商店买水，因为我好奇外面的世界，满脑子的问号。这时脚下的自行车已然加快————还是爬回大牢好吧。因为，一个在监狱里待习惯的犯人，一时间适应不了外面的世界，认为一切都是怪的。4年了，我们最怕的还仅仅是蛋白质包裹着RNA的病毒吗，我看未必。。。。。。