逆向工具实战:还原 Shottr v1.9.1 的 Hash 算法

一场有趣的猫鼠游戏:当开发者针对旧版破解方案引入了硬编码的校验逻辑,我们该如何层层剥茧,还原其背后的算法真相? 0x01 前言在 8 月份的文章中,我分享了如何通过 mitmproxy 激活 Shottr。原本以为这只是一个简单的 HTTP 数据包篡改游戏,但作者在 v1.9.1 版本中打了一个「反击战」。 ...

2025-12-29 · 4 分钟

FFmpeg 参数顺序的隐藏陷阱

AI 建议我调整 FFmpeg 参数顺序来解决 OOM,结果对「首帧」毫无作用。但我却意外发现,这个优化对于「非首帧」有着 54 倍 的性能天差地别。 0x01 前言在排查生产环境的一个 FFmpeg 截帧 OOM(内存溢出)问题时,经历了一段有趣的「反转」剧情。 ...

2025-12-29 · 6 分钟

Go 的 SSE 实时日志方案

在构建后台管理系统或运维平台时,「实时日志查看」是一个非常高频的需求。传统的做法往往是前端通过 setInterval 每隔几秒轮询一次接口,这种方式不仅时效性差,而且对服务器造成了大量无效请求。 ...

2025-12-17 · 3 分钟

Obsidian 如何设置 Mermaid 主题

用 Obsidian 画 Mermaid 图表的人很多,但知道可以单独给每个图表设置主题的人很少。 不需要插件,不需要写 CSS,只要在代码块开头加一行配置,就能让同一篇笔记里的不同图表呈现完全不同的风格。 ...

2025-12-10 · 3 分钟

如何通过 mitmproxy 激活 Shottr

Shottr 是一款功能强大的 macOS 截图软件,虽然基础功能免费,但许多实用的高级功能(如 backdrop 背景虚化等)需要付费使用。 0x01 激活原理通过 Charles 抓包发现,每当在 Shottr 里的 “License” 界面进行激活时,App 都会向 shottr.cc 发送一个 POST 请求来验证激活码的有效性。 ...

2025-08-29 · 4 分钟

二分查找的通用模型与常见错误

在算法面试中,二分查找(Binary Search) 是一个非常重要的知识点。许多人在实际应用时会遇到边界处理的问题,导致程序出现 bug。本文将总结二分查找的通用模型,并分析常见错误。 ...

2025-02-05 · 3 分钟

Kernighan’s Algorithm 位操作解析

在位操作(Bit Manipulation)的领域里,有一些技巧因其简洁和高效,常常被称作「魔法」。Kernighan’s Algorithm 就是其中最令人印象深刻的一个。 ...

2025-02-05 · 4 分钟

数组求和系列详解与分析

数组求和问题(N-Sum)是算法面试中经久不衰的经典题型。从最基础的 Two Sum 到进阶的 kSum,其核心本质往往殊途同归。本文将以资深工程师的视角,系统梳理 2Sum、3Sum、3Sum Closest 及 4Sum 的解题演进之路,探讨如何通过双指针与剪枝策略将时间复杂度压榨至极限。 ...

2025-02-01 · 4 分钟

无线电考试中频率相关的考题

0x01 与频率相关的考题 1 2 3 4 5 6 113. 用通常的调频方式进行话音通信,必要带宽约为: [LK0123] A. 6.25kHz B. 2700Hz C. 200Hz D. 12.5kHz 1 2 3 4 5 6 0123. 我国分配给业余业务和卫星业余业务专用的频段有: [LK0144] A. 7MHz、14MHz、21MHz、28MHz、47GHz频段 B. 7MHz、14MHz、21MHz、28MHz、144MHz频段 C. 3.5MHz、14MHz、21MHz、28MHz、10GHz频段 D. 7MHz、14MHz、28MHz、144MHz、430MHz频段 1 2 3 4 5 6 0124. 我国在VHF和UHF范围内分配给业余业务和卫星业余业务与其他业务共用并设业务类别为主要业务与次要业务,以下那些频率分配给业余业务和卫星业余业务与其他业务共用并且业余业务和卫星业余业务作为主要业务: [LK0146] A. 50MHz、144MHz B. 144MHz、430MHz C. 50MHz、430MHz D. 220MHz、430MHz 1 2 3 4 5 6 0125. 我国分配给业余业务和卫星业余业务与其他业务共用、并且业余业务和卫星业余业务作为唯一主要业务的频段的个数以及在3GHz以下的该类频段分别为: [LK0147] A. 3个,144-146MHz B. 4个,7.0-7.2MHz C. 5个,50-54MHz D. 5个,28-29.7MHz 1 2 3 4 5 6 0126. 我国分配给业余业务和卫星业余业务与其他业务共用、并且业余业务和卫星业余业务作为次要业务的1200MHz以下频段有: [LK0148] A. 135.7kHz、10.1MHz、430MHz B. 3.5MHz、7MHz、50MHz C. 3.5MHz、18.068MHz、144MHz D. 10.1MHz、24.89MHz、430MHz 1 2 3 4 5 6 0127. 俗称的6米业余波段的频率范围以及业余业务和卫星业余业务的使用状态分别为: [LK0157] A. 50-54MHz,主要业务 B. 50-52MHz,次要业务 C. 51-54MHz,专用 D. 52-56MHz,次要业务 1 2 3 4 5 6 0128. 俗称的2米业余波段的频率范围以及我国业余业务和卫星业余业务的使用状态分别为: [LK0158] A. 144-148MHz;其中144-146MHz为唯一主要业务,146-148MHz为与其他业务共同作为主要业务 B. 144-146MHz;专用 C. 144-148MHz;其中144-146MHz为专用,146-148MHz为次要业务 D. 144-148MHz;次要业务 1 2 3 4 5 6 0129. 俗称的0.7米业余波段的频率范围以及业余业务和卫星业余业务的使用状态分别为: [LK0159] A. 430-440MHz,次要业务 B. 430-440MHz,主要业务 C. 430-440MHz,专用 D. 420-470MHz,次要业务 1 2 3 4 5 6 0130. 在我国和多数其他国家的频率分配中,业余业务在430-440MHz频段中作为次要业务与其他业务共用。这个频段中我国分配的主要业务是: [LK0160] A. 无线电定位和航空无线电导航 B. 固定业务 C. 移动业务 D. 水上移动和航空移动 1 2 3 4 5 6 0131. VHF业余无线电台在144MHz频段进行本地联络时应避免占用的频率为: [LK0171] A. 144-144.035MHz和145.8-146MHz B. 144.035-145.8MHz C. 144.050-144.053MHz和145.100-145.750MHz D. 144.035-144.053MHz和145.550-145.750MHz 1 2 3 4 5 6 0132. UHF业余无线电台在430MHz频段进行本地联络时应避免占用的频率为: [LK0172] A. 431.9-432.240MHz和435-438MHz B. 430-431.9MHz和432.240-435MHz C. 431-432MHz和438-440MHz D. 430-431.2MHz和435-436MHz

2024-11-11 · 3 分钟

Go errors.Is 失效问题的本质剖析

0x01 问题复现最近在 Code Review 时发现了一个有趣的案例。代码逻辑清晰,测试也覆盖了主要分支,但在生产环境中 errors.Is 的行为与预期不符: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 type Error struct { ErrorCode int Message string } func (e Error) Error() string { return e.Message } var ErrTest = Error{ErrorCode: 100301, Message: "请求失败"} func getErr() error { return ErrTest } func main() { err := getErr() if errors.Is(err, ErrTest) { fmt.Println("ok") } else { fmt.Println("failed") // 实际输出 } } 预期输出 「ok」,实际却输出 「failed」。这个问题暴露了 Go 错误处理机制中一个常被忽视的细节。 ...

2024-11-01 · 3 分钟