大陆直连TG Web?触手可及!

注意,将该项目直接绑定到你的域名会吃Abuse 推荐将 index.html 重命名。让别人访问根路径无法访问到正常页面即可,但不保证永远不会吃Abuse 然后创建一个新的 index.html 写入: <html><head> <title>Welcome to nginx!</title> <style> body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; } </style> <style data-id="immersive-translate-input-injected-css">.immersive-translate-input { position: absolute; top: 0; right: 0; left: 0; bottom: 0; z-index: 2147483647; display: flex; justify-content: center; align-items: center; } .immersive-translate-attach-loading::after { content: " "; --loading-color: #f78fb6; width: 6px; height: 6px; border-radius: 50%; display: block; margin: 12px auto; position: relative; color: white; left: -100px; box-sizing: border-box; animation: immersiveTranslateShadowRolling 1.5s linear infinite; position: absolute; top: 50%; left: 50%; transform: translate(-2000%, -50%); z-index: 100; } .immersive-translate-loading-spinner { vertical-align: middle !important; width: 10px !important; height: 10px !important; display: inline-block !important; margin: 0 4px !important; border: 2px rgba(221, 244, 255, 0.6) solid !important; border-top: 2px rgba(0, 0, 0, 0.375) solid !important; border-left: 2px rgba(0, 0, 0, 0.375) solid !important; border-radius: 50% !important; padding: 0 !important; -webkit-animation: immersive-translate-loading-animation 0.6s infinite linear !important; animation: immersive-translate-loading-animation 0.6s infinite linear !important; } @-webkit-keyframes immersive-translate-loading-animation { from { -webkit-transform: rotate(0deg); } to { -webkit-transform: rotate(359deg); } } @keyframes immersive-translate-loading-animation { from { transform: rotate(0deg); } to { transform: rotate(359deg); } } .immersive-translate-input-loading { --loading-color: #f78fb6; width: 6px; height: 6px; border-radius: 50%; display: block; margin: 12px auto; position: relative; color: white; left: -100px; box-sizing: border-box; animation: immersiveTranslateShadowRolling 1.5s linear infinite; } @keyframes immersiveTranslateShadowRolling { 0% { box-shadow: 0px 0 rgba(255, 255, 255, 0), 0px 0 rgba(255, 255, 255, 0), 0px 0 rgba(255, 255, 255, 0), 0px 0 rgba(255, 255, 255, 0); } 12% { box-shadow: 100px 0 var(--loading-color), 0px 0 rgba(255, 255, 255, 0), 0px 0 rgba(255, 255, 255, 0), 0px 0 rgba(255, 255, 255, 0); } 25% { box-shadow: 110px 0 var(--loading-color), 100px 0 var(--loading-color), 0px 0 rgba(255, 255, 255, 0), 0px 0 rgba(255, 255, 255, 0); } 36% { box-shadow: 120px 0 var(--loading-color), 110px 0 var(--loading-color), 100px 0 var(--loading-color), 0px 0 rgba(255, 255, 255, 0); } 50% { box-shadow: 130px 0 var(--loading-color), 120px 0 var(--loading-color), 110px 0 var(--loading-color), 100px 0 var(--loading-color); } 62% { box-shadow: 200px 0 rgba(255, 255, 255, 0), 130px 0 var(--loading-color), 120px 0 var(--loading-color), 110px 0 var(--loading-color); } 75% { box-shadow: 200px 0 rgba(255, 255, 255, 0), 200px 0 rgba(255, 255, 255, 0), 130px 0 var(--loading-color), 120px 0 var(--loading-color); } 87% { box-shadow: 200px 0 rgba(255, 255, 255, 0), 200px 0 rgba(255, 255, 255, 0), 200px 0 rgba(255, 255, 255, 0), 130px 0 var(--loading-color); } 100% { box-shadow: 200px 0 rgba(255, 255, 255, 0), 200px 0 rgba(255, 255, 255, 0), 200px 0 rgba(255, 255, 255, 0), 200px 0 rgba(255, 255, 255, 0); } } .immersive-translate-toast { display: flex; position: fixed; z-index: 2147483647; left: 0; right: 0; top: 1%; width: fit-content; padding: 12px 20px; margin: auto; overflow: auto; background: #fef6f9; box-shadow: 0px 4px 10px 0px rgba(0, 10, 30, 0.06); font-size: 15px; border-radius: 8px; color: #333; } .immersive-translate-toast-content { display: flex; flex-direction: row; align-items: center; } .immersive-translate-toast-hidden { margin: 0 20px 0 72px; text-decoration: underline; cursor: pointer; } .immersive-translate-toast-close { color: #666666; font-size: 20px; font-weight: bold; padding: 0 10px; cursor: pointer; } @media screen and (max-width: 768px) { .immersive-translate-toast { top: 0; padding: 12px 0px 0 10px; } .immersive-translate-toast-content { flex-direction: column; text-align: center; } .immersive-translate-toast-hidden { margin: 10px auto; } } .immersive-translate-modal { display: none; position: fixed; z-index: 2147483647; left: 0; top: 0; width: 100%; height: 100%; overflow: auto; background-color: rgb(0, 0, 0); background-color: rgba(0, 0, 0, 0.4); font-size: 15px; } .immersive-translate-modal-content { background-color: #fefefe; margin: 10% auto; padding: 40px 24px 24px; border-radius: 12px; width: 350px; font-family: system-ui, -apple-system, "Segoe UI", "Roboto", "Ubuntu", "Cantarell", "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; position: relative; } @media screen and (max-width: 768px) { .immersive-translate-modal-content { margin: 50% auto !important; } } .immersive-translate-modal .immersive-translate-modal-content-in-input { max-width: 500px; } .immersive-translate-modal-content-in-input .immersive-translate-modal-body { text-align: left; max-height: unset; } .immersive-translate-modal-title { text-align: center; font-size: 16px; font-weight: 700; color: #333333; } .immersive-translate-modal-body { text-align: center; font-size: 14px; font-weight: 400; color: #333333; margin-top: 24px; } @media screen and (max-width: 768px) { .immersive-translate-modal-body { max-height: 250px; overflow-y: auto; } } .immersive-translate-close { color: #666666; position: absolute; right: 16px; top: 16px; font-size: 20px; font-weight: bold; } .immersive-translate-close:hover, .immersive-translate-close:focus { text-decoration: none; cursor: pointer; } .immersive-translate-modal-footer { display: flex; justify-content: center; flex-wrap: wrap; margin-top: 24px; } .immersive-translate-btn { width: fit-content; color: #fff; background-color: #ea4c89; border: none; font-size: 14px; margin: 0 8px; padding: 9px 30px; border-radius: 5px; display: flex; align-items: center; justify-content: center; cursor: pointer; transition: background-color 0.3s ease; } .immersive-translate-btn-container { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 8px; } .immersive-translate-btn:hover { background-color: #f082ac; } .immersive-translate-btn:disabled { opacity: 0.6; cursor: not-allowed; } .immersive-translate-btn:disabled:hover { background-color: #ea4c89; } .immersive-translate-link-btn { background-color: transparent; color: #ea4c89; border: none; cursor: pointer; height: 30px; line-height: 30px; } .immersive-translate-cancel-btn { /* gray color */ background-color: rgb(89, 107, 120); } .immersive-translate-cancel-btn:hover { background-color: hsl(205, 20%, 32%); } .immersive-translate-action-btn { background-color: transparent; color: #ea4c89; border: 1px solid #ea4c89; } .immersive-translate-btn svg { margin-right: 5px; } .immersive-translate-link { cursor: pointer; user-select: none; -webkit-user-drag: none; text-decoration: none; color: #ea4c89; -webkit-tap-highlight-color: rgba(0, 0, 0, 0.1); } .immersive-translate-primary-link { cursor: pointer; user-select: none; -webkit-user-drag: none; text-decoration: none; color: #ea4c89; -webkit-tap-highlight-color: rgba(0, 0, 0, 0.1); } .immersive-translate-modal input[type="radio"] { margin: 0 6px; cursor: pointer; } .immersive-translate-modal label { cursor: pointer; } .immersive-translate-close-action { position: absolute; top: 2px; right: 0px; cursor: pointer; } .imt-image-status { background-color: rgba(0, 0, 0, 0.5) !important; display: flex !important; flex-direction: column !important; align-items: center !important; justify-content: center !important; border-radius: 16px !important; } .imt-image-status img, .imt-image-status svg, .imt-img-loading { width: 28px !important; height: 28px !important; margin: 0 0 8px 0 !important; min-height: 28px !important; min-width: 28px !important; position: relative !important; } .imt-img-loading { background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADgAAAA4CAMAAACfWMssAAAAtFBMVEUAAAD////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////oK74hAAAAPHRSTlMABBMIDyQXHwyBfFdDMSw+OjXCb+5RG51IvV/k0rOqlGRM6KKMhdvNyZBz9MaupmxpWyj437iYd/yJVNZeuUC7AAACt0lEQVRIx53T2XKiUBCA4QYOiyCbiAsuuGBcYtxiYtT3f6/pbqoYHVFO5r+iivpo6DpAWYpqeoFfr9f90DsYAuRSWkFnPO50OgR9PwiCUFcl2GEcx+N/YBh6pvKaefHlUgZd1zVe0NbYcQjGBfzrPE8Xz8aF+71D8gG6DHFPpc4a7xFiCDuhaWgKgGIJQ3d5IMGDrpS4S5KgpIm+en9f6PlAhKby4JwEIxlYJV9h5k5nee9GoxHJ2IDSNB0dwdad1NAxDJ/uXDHYmebdk4PdbkS58CIVHdYSUHTYYRWOJblWSyu2lmy3KNFVJNBhxcuGW4YBVCbYGRZwIooipHsNqjM4FbgOQqQqSKQQU9V8xmi1QlgHqQQ6DDBvRUVCDirs+EzGDGOQTCATgtYTnbCVLgsVgRE0T1QE0qHCFAht2z6dLvJQs3Lo2FQoDxWNUiBhaP4eRgwNkI+dAjVOA/kUrIDwf3CG8NfNOE0eiFotSuo+rBiq8tD9oY4Qzc6YJw99hl1wzpQvD7ef2M8QgnOGJfJw+EltQc+oX2yn907QB22WZcvlUpd143dqQu+8pCJZuGE4xCuPXJqqcs5sNpsI93Rmzym1k4Npk+oD1SH3/a3LOK/JpUBpWfqNySxWzCfNCUITuDG5dtuphrUJ1myeIE9bIsPiKrfqTai5WZxbhtNphYx6GEIHihyGFTI69lje/rxajdh0s0msZ0zYxyPLhYCb1CyHm9Qsd2H37Y3lugVwL9kNh8Ot8cha6fUNQ8nuXi5z9/ExsAO4zQrb/ev1yrCB7lGyQzgYDGuxq1toDN/JGvN+HyWNHKB7zEoK+PX11e12G431erGYzwmytAWU56fkMHY5JJnDRR2eZji3AwtIcrEV8Cojat/BdQ7XOwGV1e1hDjGGjXbdArm8uJZtCH5MbcctVX8A1WpqumJHwckAAAAASUVORK5CYII="); background-size: 28px 28px; animation: image-loading-rotate 1s linear infinite !important; } .imt-image-status span { color: var(--bg-2, #fff) !important; font-size: 14px !important; line-height: 14px !important; font-weight: 500 !important; font-family: "PingFang SC", Arial, sans-serif !important; } @keyframes image-loading-rotate { from { transform: rotate(360deg); } to { transform: rotate(0deg); } } </style></head> <body> <h1>Welcome to nginx!</h1> <p>If you see this page, the nginx web server is successfully installed and working. Further configuration is required.</p> <p>For online documentation and support please refer to <a href="http://nginx.org/">nginx.org</a>.<br> Commercial support is available at <a href="http://nginx.com/">nginx.com</a>.</p> <p><em>Thank you for using nginx.</em></p> <div id="screenity-ui"><div class="screenity-shadow-dom"><div><div class="screenity-scrollbar"></div><div class="screenity-scrollbar"></div></div><style type="text/css"> #screenity-ui, #screenity-ui div { background-color: unset; padding: unset; width: unset; box-shadow: unset; display: unset; margin: unset; border-radius: unset; } .screenity-outline { position: absolute; z-index: 99999999999; border: 2px solid #3080F8; outline-offset: -2px; pointer-events: none; border-radius: 5px!important; } .screenity-blur { filter: blur(10px)!important; } .screenity-shadow-dom * { transition: unset; } .screenity-shadow-dom .TooltipContent { border-radius: 30px!important; background-color: #29292F!important; padding: 10px 15px!important; font-size: 12px; margin-bottom: 10px!important; bottom: 100px; line-height: 1; font-family: 'Satoshi-Medium', sans-serif; z-index: 99999999!important; color: #FFF; box-shadow: hsl(206 22% 7% / 35%) 0px 10px 38px -10px, hsl(206 22% 7% / 20%) 0px 10px 20px -15px!important; user-select: none; transition: opacity 0.3 ease-in-out; will-change: transform, opacity; animation-duration: 400ms; animation-timing-function: cubic-bezier(0.16, 1, 0.3, 1); will-change: transform, opacity; } .screenity-shadow-dom .hide-tooltip { display: none!important; } .screenity-shadow-dom .tooltip-tall { margin-bottom: 20px; } .screenity-shadow-dom .tooltip-small { margin-bottom: 5px; } .screenity-shadow-dom .TooltipContent[data-state='delayed-open'][data-side='top'] { animation-name: slideDownAndFade; } .screenity-shadow-dom .TooltipContent[data-state='delayed-open'][data-side='right'] { animation-name: slideLeftAndFade; } .screenity-shadow-dom.TooltipContent[data-state='delayed-open'][data-side='bottom'] { animation-name: slideUpAndFade; } .screenity-shadow-dom.TooltipContent[data-state='delayed-open'][data-side='left'] { animation-name: slideRightAndFade; } @keyframes slideUpAndFade { from { opacity: 0; transform: translateY(2px); } to { opacity: 1; transform: translateY(0); } } @keyframes slideRightAndFade { from { opacity: 0; transform: translateX(-2px); } to { opacity: 1; transform: translateX(0); } } @keyframes slideDownAndFade { from { opacity: 0; transform: translateY(-2px); } to { opacity: 1; transform: translateY(0); } } @keyframes slideLeftAndFade { from { opacity: 0; transform: translateX(2px); } to { opacity: 1; transform: translateX(0); } } #screenity-ui [data-radix-popper-content-wrapper] { z-index: 999999999999!important; } .screenity-shadow-dom .CanvasContainer { position: fixed; pointer-events: all!important; top: 0px!important; left: 0px!important; z-index: 99999999999!important; } .screenity-shadow-dom .canvas { position: fixed; top: 0px!important; left: 0px!important; z-index: 99999999999!important; background: transparent!important; } .screenity-shadow-dom .canvas-container { top: 0px!important; left: 0px!important; z-index: 99999999999; position: fixed!important; background: transparent!important; } .ScreenityDropdownMenuContent { z-index: 99999999999!important; min-width: 200px; background-color: white; margin-top: 4px; margin-right: 8px; padding-top: 12px; padding-bottom: 12px; border-radius: 15px; z-index: 99999; font-family: 'Satoshi-Medium', sans-serif; color: #29292F; box-shadow: 0px 10px 38px -10px rgba(22, 23, 24, 0.35), 0px 10px 20px -15px rgba(22, 23, 24, 0.2); animation-duration: 400ms; animation-timing-function: cubic-bezier(0.16, 1, 0.3, 1); will-change: transform, opacity; } .ScreenityDropdownMenuContent[data-side="top"] { animation-name: slideDownAndFade; } .ScreenityDropdownMenuContent[data-side="right"] { animation-name: slideLeftAndFade; } .ScreenityDropdownMenuContent[data-side="bottom"] { animation-name: slideUpAndFade; } .ScreenityDropdownMenuContent[data-side="left"] { animation-name: slideRightAndFade; } .ScreenityItemIndicator { position: absolute; right: 12px; width: 18px; height: 18px; background: #3080F8; border-radius: 50%; display: inline-flex; align-items: center; justify-content: center; } .ScreenityDropdownMenuItem, .ScreenityDropdownMenuRadioItem { font-size: 14px; line-height: 1; display: flex; align-items: center; height: 40px; padding: 0 5px; position: relative; padding-left: 22px; padding-right: 22px; user-select: none; outline: none; } .ScreenityDropdownMenuItem:hover { background-color: #F6F7FB !important; cursor: pointer; } .ScreenityDropdownMenuItem[data-disabled] { color: #6E7684; !important; cursor: not-allowed; background-color: #F6F7FB !important; } @keyframes slideUpAndFade { from { opacity: 0; transform: translateY(2px); } to { opacity: 1; transform: translateY(0); } } @keyframes slideRightAndFade { from { opacity: 0; transform: translateX(-2px); } to { opacity: 1; transform: translateX(0); } } @keyframes slideDownAndFade { from { opacity: 0; transform: translateY(-2px); } to { opacity: 1; transform: translateY(0); } } @keyframes slideLeftAndFade { from { opacity: 0; transform: translateX(2px); } to { opacity: 1; transform: translateX(0); } } </style></div></div></body><div id="immersive-translate-popup" style="all: initial"></div></html> ...

August 1, 2025 · 8 min · 1560 words

CSP标头是什么?为什么有人能神不知鬼不觉地盗走你的信息?

举个例子吧! 这是一个无CSP标头的网站: 点我 不出意外,你的浏览器会弹出一个提示 这是如何做到的? 这个项目开源在 afoim/none_csp_demo HTML内容为 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>欢迎页面</title> </head> <body> <h1>欢迎</h1> <p>你好,<span id="name"></span>!</p> <script> // 从 URL 参数读取用户名并显示 const params = new URLSearchParams(location.search); const name = params.get("name"); document.getElementById("name").innerHTML = name; </script> </body> </html> 这个网站非常简单:页面会通过查询参数 ?name=xxx 动态显示用户名。 比如你输入 https://none-csp-demo.pages.dev/nocsp?name=AcoFork 网页就会显示 从源码可以看出,这个网页是通过 innerHTML 直接插入文本内容的。 这种写法没有做任何安全处理,会把传入内容直接拼接进 HTML。 那么…如果我们给网站这样一个 name 呢? 尝试输入 https://none-csp-demo.pages.dev/nocsp?name=%3Cimg%20src=x%20onerror=%22alert(%27XSS%E6%94%BB%E5%87%BB%E6%88%90%E5%8A%9F%27)%22%3E 你会发现网站并没有打印出任何用户名,而且浏览器还弹出了一个奇怪的窗口 我们F12查看当前网页的源代码 发现在 <span id="name"></span> 中 被插入了一条 <img src="x" onerror="alert('XSS攻击成功')"> ! 也就是说,网页并没有把我们传入的 name 当作纯文本处理, 而是直接把它插入成了 HTML。 因此浏览器并不会把它渲染成普通文字,例如 你好,<img src="x" onerror="alert('XSS攻击成功')"> ! ...

July 30, 2025 · 1 min · 156 words

如何提高网站的SEO?

标题 即每个HTML head部分的 title 不要重名 如果你的标题是中文,请尽量避免和任何知名事物重名。比如,不要叫 树叶博客,而可以换成 叶树博客 这种更容易区分的名字。 搜索引擎通常会给知名事物更高的权重;如果你的站点名称恰好与之重名,用户就很难通过搜索结果准确找到你。 使用英文标题 比如 AcoFork Blog、afoim Blog。 你可以尝试自创一个英文单词。和中文标题一样,最好也不要与知名事物重名。 对于这类独特名称,搜索引擎更容易把它识别为一个独立品牌或独立站点。 这样一来,用户只要直接搜索这个自创单词,比如 AcoFork,大概率就能找到你的网站。 跨页面使用主标题锚定 一个网站大多数情况下都会有多个页面,比如主页、分类页、归档页等等。 除了首页要展示你的主标题,其他页面也应尽量围绕这个主标题展开。 例如,主页面标题为 AcoFork Blog,那么副页面可以写成 分类 - AcoFork Blog,或者: AcoFork Blog - 分类 。 但请尽量不要只写一个 分类。虽然在同一域名下,这未必会严重影响搜索引擎判断,但很可能会误导用户。 例如,用户搜索你的网站时,排在前面的结果标题却只是一个 分类 页面,看起来就会很奇怪。 言简意赅写明description 即每个HTML head部分的 meta name="description" 网站描述不要太短,也不要过长,更不能留空。 我的网站简介是 分享网络技术、服务器部署、内网穿透、静态网站搭建、CDN优化、容器化部署等技术教程与实践经验的个人技术博客,专注于云原生、无服务器架构和前后端开发,作者为AcoFork/afoim/二叉树树 关键词 即每个HTML head部分的 meta name="keywords" 现代搜索引擎基本已经不再重视这个字段,而且它也非常容易被滥用,所以通常不需要填写。 同内容网站只能有一个 如无必要,请不要变更域名。也不要将其他域名指向您的站点 假如我同时拥有 acofork.com 和 acofork.cn,并且都想指向同一个网站,该怎么处理? 请使用 301 重定向 否则你的 SEO 会受到影响,搜索引擎可能不会把这两个站点视为同一个站点。 同时,最好确保这个域名今后只用于重定向。因为 301 重定向会在客户端留下长期缓存。 ...

July 29, 2025 · 1 min · 135 words

关于本站为什么不进行ICP备案

目前已备案,该文章存档 被DDOS大肘子打回CF了 违规内容 早期本站发布过文章 点此查看 该文章不符合备案规范。曾尝试过备案被打回 域名不支持备案 ICP备案是针对于域名的,本人名下的 2x.nz 并不在ICP备案支持的域名后缀内 所有支持备案的域名后缀请查看 https://domain.miit.gov.cn/ 中国节点加速收效甚微 目前本站使用的CDN为Netlify CDN,Netlify采用AWS的IP,速度极快,在中国大陆可用性很高,延迟如下图 由于本站为静态站,若进行备案可以直接使用EdgeOne Page中的中国大陆节点,延迟固然会更低,但是对比目前的速度收效甚微 备案步骤繁琐 若进行备案,则需要填写实际运营人相关信息并且需要购买备案码(这是最低成本的备案方式) GFW未对本站进行SNI阻断 本站目前并未被GFW阻断。除部分省市防火墙进行非备案域阻断外皆可正常访问 泉州等地区用户仅支持访问备案域? 本站之前有一个IP站点,由于业务服务器1Panel V1升级至V2破坏了原有的CI/CD工作流,暂时停用 后续会进行修复并且重新恢复IP站点的运营 已恢复 后续是否会备案 可能。但是不会用做主要业务,更多是提高访问可达性,主站仍为未备案站。 且如果备案后我需要管理两个内容分支(即无违规内容分支和原分支)我可能会放弃这么做

July 28, 2025 · 1 min · 29 words

网易云音乐歌曲时间戳获取

正式开始 首先我们要获取一首歌的ID,如果你是App可以点击分享,然后 复制链接 。如果是Web,直接复制浏览器地址栏 你将得到类似这样的URL https://music.163.com/#/song?id=29812004&uct2=U2FsdGVkX1+0Ic0zSL7yd7aZMm+xya0r1rUmiRUO5Us= 其中的 id=29812004 中的值就是我们的歌曲ID 接下来拼接URL https://music.163.com/api/song/media?id=29812004 访问就得到歌词时间戳啦 {"songStatus":1,"lyricVersion":44,"lyric":"[by:月餖]\n[00:19.30]The clock stopped ticking forever ago\n\n[00:23.300]How long have I been up?\n[00:25.300]I don't know.\n[00:26.300]I can't get a grip,\n[00:28.300]But I can't let go\n[00:30.300]There wasn't anything\n[00:31.300]To hold onto though...\n[00:33.300]Why can't I see?\n[00:35.300]Why can't I see?\n[00:37.300]All the colors that you see?\n[00:40.300]Please, Can I be,\n[00:42.300]Please, Can I be\n[00:44.300]Colorful and free?\n[00:47.300]WHAT THE HELL'S GOING ON?!\n[00:48.300]CAN SOMEONE TELL ME PLEASE--\n[00:50.300]WHY, I'M SWITCHING FASTER THAN THE CHANNELS ON TV!!\n[00:53.300]I'M black, THEN I'M white!!\n[00:55.300]NO!!!\n[00:56.300]SOMETHING ISN'T RIGHT!!\n[00:57.300]MY ENEMY'S INVISIBLE, I DON'T KNOW HOW TO FIGHT!!\n[01:01.300]THE TREMBLING FEAR IS MORE THAN I CAN TAKE,\n[01:04.300]WHEN I'M UP AGAINST\n[01:05.300]THE ECHO IN THE MIRROR!!\n[01:08.300]ECHO!!\n[01:14.300]\n[02:23.300]I'm gonna burn my house down,\n[02:27.300]Into an ugly black.\n[02:28.300]I'm gonna run away, Now\n[02:31.300]And never look back.\n[02:32.300]I'm gonna burn my house down,\n[02:34.300]Into an ugly black.\n[02:35.300]I'm gonna run away, Now\n[02:37.300]And never look back.\n[02:39.300]I'm gonna run away down,\n[02:41.300]I'm gonna run away.\n[02:42.300]I'm gonna run away, Now\n[02:44.300]I'm gonna run away\n[02:53.300]I'm gonna burn my house down.\n[02:54.300]And never look back.\n[02:56.300]And never look back.\n[02:58.300]AND NEVER LOOK BACK!!\n[02:59.300]WHAT THE HELL'S GOING ON?!\n[03:01.300]CAN SOMEONE TELL ME PLEASE--\n[03:03.300]WHY, I'M SWITCHING FASTER THAN THE CHANNELS ON TV!!\n[03:06.300]I'M black, THEN I'M white!!\n[03:08.300]NO!!!\n[03:08.300]SOMETHING ISN'T RIGHT!!\n[03:10.300]MY ENEMY'S INVISIBLE, I DON'T KNOW HOW TO FIGHT!!\n[03:13.300]WHAT THE HELL'S GOING ON?!\n[03:15.300]CAN SOMEONE TELL ME PLEASE--\n[03:17.300]WHY, I'M SWITCHING FASTER THAN THE CHANNELS ON TV!!\n[03:20.300]I'M black, THEN I'M white!!\n[03:21.300]NO!!!\n[03:22.300]SOMETHING ISN'T RIGHT!!\n[03:23.300]MY ENEMY'S INVISIBLE, I DON'T KNOW HOW TO FIGHT!!\n[03:27.300]THE TREMBLING FEAR IS MORE THAN I CAN TAKE,\n[03:31.300]WHEN I'M UP AGAINST\n[03:32.300]THE ECHO IN THE MIRROR!!\n[03:34.300]THE TREMBLING FEAR IS MORE THAN I CAN TAKE,\n[03:37.300]WHEN I'M UP AGAINST\n[03:39.300]THE ECHO IN THE MIRROR!!","code":200} ...

July 26, 2025 · 2 min · 250 words

记录人生中第一次破解软件!FKvocechat!

前因 可以直接看 记录被voce.chat坑了350 - 屮蛋Blog 正版激活的原理? 一般来说。大部分授权系的软件会将你的授权文件首先经过加密,然后发送到授权服务器,等待授权服务器返回一个正确的状态,然后激活 如何伪造这个正确的状态? 大部分软件的授权通信是通过后端进行的(但是vocechat不一样,它在前端🤣),我们需要捕获软件向授权服务器发送的授权请求以及授权服务器返回的正确状态 假如你发送一个有效的许可证,得到 check: true 这个响应,同时软件本体显示 已激活 。然后发送一个无效的许可证,得到 check: false 这个响应,同时软件本体显示 许可证无效 。那么我们可以非常简单的去破解,只需要让对方服务器无论对软件发送的任意许可证都返回 check: true 即可。 这涉及到响应体修改,需要使用第三方软件,推荐 BurpSuite 上面的情况是一个最简单的授权激活方案。真实情况下可能授权服务器并不会返回一个明确的值,会返回一串密文,然后软件进行解密得到授权可信性信息。如果你使用的软件并未开源,后续的一系列操作就看你造化了 正片,怎么破解VoceChat? 不需要你有一个正版许可证,因为我花350买了😭 部署完毕VoceChat后,进入授权界面开启浏览器的DevTools,如图 设置你的 BurpSuite 软件,全局替换 "sign": false 为 "sign": true 点击手动更新,上传如下内容 LkA5K1paaxyiNckLwYxdektr64uk6zFs322ZAXDp4aQWkTNcY9ztKKFBwpPbonS3TeFTnveHi6w5VR1MVLL4WyEw3QTfHuitLcVkQFjYZoiQumdQ4XPTN9Xo5hwdEZwCmb7rSus1Sg51b87HjRFZEGHSYYUoqRZPhte1sqBxXdRqwpvLubkhvH4kPB4PXddcdLj2bmXSF7Ww3UZ3Sp6LvueXGw3GggDkgKDP4C7466VVhX6gPBZnaQNovX2G5ugnuN9B6uUeeg63jDSVFnZRPF1bZUxPM5cqdA6U399x8uzEpamhMTMkT3ZiQmVerjszsr3vB8K5DvwKXYp6qKtuna5MgQMC4oFKMNKCSPg7F4Eox8s61i1yjtE33JgxXqrwqkJYqDfqQv1La5h3mYnu6PLDcmmgSEuUHaetzbcEfRJrzi4KwiZwmy4kX6RjEp12KjEvVdS7uwd8wEYjiohXFPG2WRhLe9Cz2oLpsy15ssa8Y34EUVbABryKiqv6xpdb8ujiiucyvybAtgsurnYv3D8eRGWZyttnBWfcqWnXWFZvFZx4ZtuW6ML7ZEcNpM3qcdW8mU8L7Jg2C1so1dFE2phwtLpFyCNwSK8QbPFwdg3Fr4BbMDE8Yq5UPwAQrMtEcAJ1nQyDTZSJa4n2CTC3Lo48jHdbVWZYTejfD2a4y4sJxwRTZQkgs4Jx3kAeepAM5weLfq9ogBY4VWRwjCuNJyt1GoVRmhRs7ZvqNTdBvhRx8LSo6cKFx6LZWPZP7q5Pefo3qmof9QdTYU6PGWQNXR5fp7vc 然后你就能得到 原理剖析 VoceChat是前端验证(没绷住),刚才给你们的内容是一个经过base58编码后的内容,解码后为 *,999999,2025-07-16T12:00:03.675696030+00:00,2125-07-16T00:00:00+00:00,266c90ae11f5d0c2f7a42f29108cc4c6480d6c6d16c561adba7d6ff28aab54eaa7236e708efdfd9315a9a88d88709fae5c3029129494d16470121835aca6b9280c41d5c5f73a78d70c8231a8f66b9dbcd513629dd17456d771d2d0caa670208bdcacdf51fca89204b300b35a123fd99978754713e60ec50dcb7ddb5c64e129488250feca1dd52a258bcbf8d6dd8a93601e0f103c8cc457c4da16641777f9d0a440796af0ad32d3551e406b56e129bd40ac19e88423b645e732e991344781a235b7f83a40190c80dbab1ed56259cab296e5ec183228dfd49c0574d1b535b77954542636c0ae5c05e8f542007c608fe0634bcfd8dfabacdf152c006e14c3d30975 一共有4个字段 * 即被授权的域名,这里填 * 就是所有域名的意思。如果你从官方买还只能绑定一个域名🤣。如果你想伪造的更完美就把 * 改为你正在用VoceChat的域名即可 999999 为用户数限制,前端会显示为 No Limit 2025-07-16T12:00:03.675696030+00:00 为授权开始日期 2125-07-16T00:00:00+00:00 为授权结束日期 266c***975 似乎是一个验证码,类似身份证的最后一位验证位,但是貌似不起作用😂 那我花350买的授权谁给我补啊🤣

July 22, 2025 · 1 min · 61 words

国内对象存储免流量费?Cloudflare带宽联盟究竟是什么?

这是什么 Cloudflare带宽联盟(Bandwidth Alliance) 由一群具有前瞻性思维的云服务和网络公司组成,致力于为共同客户降低或免除数据传输(带宽)费用。 人话:你买的阿里云OSS,腾讯云COS套上CF就可以免流量费 具体哪些服务支持免流量费? 可以前往 Cloudflare云服务_数据传输_高速云数据传输服务_|Cloudflare中国官网 | Cloudflare 查看 截止到文章发布日,这些服务支持 在这里可以看到,如果您每月需要传输1TB的流量,Cloudflare将为您每月节省如此多的美刀 如何使用? 假如您有一个阿里云OSS实例,正常来说如果您需要绑定自定义域名,需要CNAME到阿里云的Endpoint,如果您恰好使用Cloudflare NS服务器托管您的域名,只需要打开小黄云即可。 Cloudflare将托管您的阿里云OSS流量,从Cloudflare出口的流量将不收取流量费用 基于阿里云5G内存储费用免费的政策,您可以白嫖5G的对象存储 注意事项 永远不要泄露您的源站,也就是上文所说的阿里云OSS Endpoint,如果有人发现了您的源站,这些流量不从Cloudflare出口,您将会被收取费用 当然,大部分对象存储服务商支持配置私有访问,详细规则和使用方法请咨询各方客服

July 21, 2025 · 1 min · 22 words

N款CDN/静态托管服务商的优缺点比较

Netlify 注册门槛高,需要使用谷歌邮箱注册。支持IPv6回源。用量限制较宽松,仅有带宽和构建时间限制。 我认为是免费计划里最快的CDN!并且限制很少! 需要注意,构建时间是每月限制。但是流量限制较为宽松 因为节点禁Ping,所以这里用Tcping结果展示 推荐CNAME: apex-loadbalancer.netlify.com Vercel 零成本用上。注册无门槛,延迟良好。用量限制较严格。仅支持IPv4回源。默认的 *.vercel.app 在国内会被SNI阻断,需要绑定自己的域名 Vercel每天可以构建100次,每次构建时间不得超过45分钟 推荐IP: 76.76.21.21 EdgeOne CDN 目前处于内测,需要兑换码。获取方式前往 腾讯云EdgeOne免费计划兑换码 - 立即体验 。无流量和请求数限制。 支持高级回源设置 全球可用区(不含中国大陆) 本人博客目前使用的CDN 默认提供的CNAME延迟一般。下图是使用了本人的HK优选: eo.072103.xyz(注: EdgeOne Page不可用) EdgeOne CDN 中国大陆可用区 需要实名认证,需要域名备案 默认CNAME可用 Cloudflare 无流量和请求数限制。无法被打死 戳我查看优选域名 下图使用本人的分流优选: fenliu.072103.xyz Render 注册简单,具有严格的用量限制 Github Page 需要使用Github Action发布。中国大陆大部分地区会间歇性阻断,不推荐使用

July 13, 2025 · 1 min · 44 words

我用Claude10分钟写了个六子棋...?

前情提要 本来大晚上被干醒了 准备吃点东西睡回笼觉 顺便在QQ群吹水 然后被委托做一个神经小项目 于是就… 开整! 首先使用最熟悉的Python Flask框架! 然后使用最简单的内存数据库! 然后开始调教AI! 这里本想用JSON存的但是聪明小AI最终交付的仍然是内存存储 然后就写出来了!(并非,总共问了7次 上线! 现已可在 https://sixqi.afo.im/ 游玩! 开源: GitHub - afoim/sixqi

July 13, 2025 · 1 min · 21 words

分享一个IPFS图片API

正式开始 该API为xLog的图床API POST https://ipfs-relay.crossbell.io/upload 头无鉴权 body使用 from-data ,key为 file vlaue选择一个图片文件,不宜太大,会报错 示例Curl curl --location 'https://ipfs-relay.crossbell.io/upload' \ --form 'file=@"/C:/Users/AcoFork/Pictures/b_53bb4f7fa91d684e72b666504e3fcc1897.webp"' 会返回 { "status": "ok", "cid": "QmVHG3KdGs3M8otdqjZEei6AzWt1usWRP6UmfLMbEub5nc", "url": "ipfs://QmVHG3KdGs3M8otdqjZEei6AzWt1usWRP6UmfLMbEub5nc", "web2url": "https://ipfs.crossbell.io/ipfs/QmVHG3KdGs3M8otdqjZEei6AzWt1usWRP6UmfLMbEub5nc", "fileSize": "77199", "gnfd_id": null, "gnfd_txn": null } 其中, web2url 就是可以直接访问的URL,无CORS限制

July 3, 2025 · 1 min · 37 words