[{"content":"陆陆续续写了一些开源项目，有的是工作中用到的，有的是自己折腾着玩的。趁搭博客的机会整理一下。\n🎮 FuckYourACE GitHub · Go / Wails · ⭐ 124\n限制游戏反作弊进程 CPU 占用的工具。不杀进程，而是把它绑到小核上并降低优先级。打腾讯游戏的应该都懂这个痛点。\n👉 详细介绍\n📊 sysmon GitHub · Go · ⭐ 15\n轻量系统探针，单文件部署。CPU/内存/磁盘/网络实时监控 + Web 终端。给小机器用的，一个二进制扔上去就完事。\n👉 详细介绍\n📋 学生会违纪管理系统 GitHub · Go + Gin + MySQL\n学校内部用的系统，原来 PHP 那版漏洞太多，用 Go 重写的。录入、查询、公示、导出，Docker 一键部署。\n👉 详细介绍\n🔧 donut-lite GitHub · C\ndonut shellcode 生成器的精简版，只保留命令行工具，去掉了 loader 源码和 Python 绑定。快速编译、快速使用。\n👉 详细介绍\n归档项目 以下项目已经不再维护：\nZray / Zray-for-Android — 尝试用 AI 重写过一次，效果不太理想，精力有限就不继续了。有兴趣的可以自行 fork。 后面有新项目会继续更新这个列表。\n","permalink":"https://xiaoxinmm.github.io/posts/my-open-source-projects/","summary":"整理一下自己在 GitHub 上公开的几个项目，记录一下当时为什么做、解决了什么问题。","title":"我的开源项目整理"},{"content":"起因 玩腾讯游戏的都知道，SGuard64.exe 这玩意儿动不动就把 CPU 吃到 20%+，游戏本来就吃性能，再加上这个后台进程，帧数直接暴跌。\n关掉？不行，游戏会闪退。杀进程？账号可能异常。\n所以思路很简单：不关它，但把它限制住。\n原理 程序做的事情不复杂：\n每 60 秒扫一遍系统进程，找到 SGuard64.exe 和 SGuardSvc64.exe 检测 CPU 有没有能效核（E-Core），有的话就用 E-Core，没有就用最后一个逻辑核心 把目标进程的 CPU 亲和性绑到那个核心上 优先级降到最低（Idle） 相当于给它画了个圈：\u0026ldquo;你就在这待着，别出来。\u0026rdquo;\n循环执行是因为这些进程会自己恢复设置，所以得持续压制。\n技术实现 用 Wails v2 做的桌面应用，Go 后端 + 前端 UI。选 Wails 是因为打包出来就一个 exe，不用装运行时，双击就能用。\n核心逻辑都在 Go 这边，调的 Windows API：\nSetProcessAffinityMask 绑核 SetPriorityClass 降优先级 大小核检测用的 GetLogicalProcessorInformationEx 进程名单后来改成云端下发了，这样加新的目标进程不用更新程序。\n使用 下载 exe，右键管理员运行，完事。最小化挂着就行。\n日志在 %AppData%\\FuckYourACE\\app.log，出问题可以看看。\n项目地址：github.com/xiaoxinmm/FuckYourACE\n124 个 star，说明确实解决了不少人的痛点。\n","permalink":"https://xiaoxinmm.github.io/posts/fuckyourace/","summary":"打游戏被 SGuard 吃满 CPU？这个小工具帮你把它关进小黑屋。","title":"FuckYourACE — 游戏反作弊进程限制工具"},{"content":"为什么又造轮子 市面上监控工具不少，Prometheus + Grafana 一套下来确实强大，但有时候就是想在一台小机器上快速看看 CPU、内存、磁盘情况，再开个终端敲两下命令。装一整套监控栈太重了。\n所以写了 sysmon：一个二进制文件，扔上去运行，浏览器打开就能用。\n功能 该有的都有：\nCPU、内存、磁盘、网络实时监控，WebSocket 推送 进程列表，支持按 CPU/内存排序 历史趋势图，看一段时间内的变化 Docker 容器状态自动检测 Web 终端（WebShell）— 浏览器里直接操作服务器，完整 PTY 支持 密码认证，终端和监控页面可以设不同密码 前端资源全部 embed 进二进制，真·单文件 部署 一行命令：\nbash \u0026lt;(curl -sL https://raw.githubusercontent.com/xiaoxinmm/sysmon/master/install.sh) 自动下载二进制、创建配置、注册 systemd 服务。装完访问 http://你的IP:8888。\n也可以手动编译：\ngit clone https://github.com/xiaoxinmm/sysmon.git cd sysmon \u0026amp;\u0026amp; go build -o sysmon . \u0026amp;\u0026amp; ./sysmon 配置支持 JSON 文件和环境变量两种方式，看场景选择。\n一些设计考虑 Go 的 embed 包把前端打进去，部署就是复制一个文件 WebSocket 做实时推送，不轮询 Web 终端用 xterm.js + PTY，体验接近真终端 密码用 HMAC-SHA256，不存明文 手机上也能看，做了响应式适配。服务器出问题的时候掏出手机就能查状态、敲命令，比 SSH 客户端方便。\n项目地址：github.com/xiaoxinmm/sysmon\n","permalink":"https://xiaoxinmm.github.io/posts/sysmon/","summary":"一个 Go 写的轻量系统探针，自带 Web 终端，单文件部署，扔上去就能用。","title":"sysmon — 单文件系统监控探针"},{"content":"背景 学校学生会要管查寝、纪律检查这些事，需要一个系统录入违纪记录、查询、公示、导出。\n之前有一版 PHP 写的，用了一段时间发现问题一堆：SQL 注入随便打、密码明文存储、数据库按日期建表（对，每天一张表）……修补不如重写。\n功能 实际使用场景决定的功能：\n违纪录入：学生会成员登录后填写宿舍号、姓名、班级、时间段、原因等，支持拍胸卡照片上传 今日公示：当天记录滚动展示，20 秒自动刷新，接个大屏投影就是公示栏 审查管理：管理员看全部记录，按日期和关键词筛选，能删除和查看照片 数据导出：选日期范围导出 CSV，学生会开会时要用 用户管理：增删账号、重置密码 技术选型 Go + Gin：编译出来一个二进制，不用装 PHP 环境，不用配 nginx MySQL 8.0：数据就一张表，正常的关系型设计 前端原生 HTML/CSS/JS：这种内部系统没必要上框架，够用就行 为什么不用 Spring Boot 或 Node？因为最后部署的机器是一台老电脑，Go 编译出来占用小、启动快，Docker 一跑就完事。\n部署 Docker 一行搞定：\ndocker-compose up -d MySQL 数据持久化在 volume 里，首次启动自动建表、创建管理员账号。\n也可以手动编译，设几个环境变量就能跑。\n踩过的坑 JWT 的 secret 一开始写死在代码里了，后来改成环境变量 照片上传一开始没限制大小，有人传了个 20MB 的图直接把内存吃满 公示页面本来用轮询，后来发现 20 秒刷新一次其实轮询就够了，没必要上 WebSocket 项目地址：github.com/xiaoxinmm/Student-Union-Violation\n","permalink":"https://xiaoxinmm.github.io/posts/student-union-violation/","summary":"学校学生会用的违纪管理系统，原来 PHP 写的全是漏洞，用 Go 重写了一版。","title":"学生会违纪管理系统 — 从 PHP 屎山到 Go 重写"},{"content":"是什么 donut 是一个挺知名的 shellcode 生成器，能把 .NET 程序集、PE 文件之类的东西转成位置无关的 shellcode。\n问题是原项目包含了一大堆东西：loader 源码、Python 绑定、各种示例……很多时候只需要那个命令行工具。\ndonut-lite 就是做了一次瘦身，只保留 ./donut 命令行工具需要的文件。\n构建 make # Linux make win # Windows 交叉编译（需要 mingw） 没什么花哨的，Makefile 几行搞定。\n为什么做这个 实际使用中经常需要在不同环境快速编译一个 donut 出来，原项目 clone 下来一堆文件，编译还容易出问题。精简之后 clone 快、编译快、没有多余依赖。\n安全工具嘛，够用、能跑、不出错就行。\n项目地址：github.com/xiaoxinmm/donut-lite\n","permalink":"https://xiaoxinmm.github.io/posts/donut-lite/","summary":"donut 的最小化构建，只保留命令行生成功能，去掉了 loader 源码和 Python 绑定。","title":"donut-lite — 精简版 shellcode 生成器"}]