惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

I
InfoQ
S
SegmentFault 最新的问题
N
Netflix TechBlog - Medium
B
Blog
Jina AI
Jina AI
人人都是产品经理
人人都是产品经理
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
H
Hackread – Cybersecurity News, Data Breaches, AI and More
博客园 - 聂微东
Last Week in AI
Last Week in AI
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
V
V2EX
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
大猫的无限游戏
大猫的无限游戏
U
Unit 42
J
Java Code Geeks
IT之家
IT之家
aimingoo的专栏
aimingoo的专栏
博客园 - 叶小钗
T
The Blog of Author Tim Ferriss
博客园 - 【当耐特】
Hugging Face - Blog
Hugging Face - Blog
WordPress大学
WordPress大学
腾讯CDC

小野博客

Hexo 主题 Win7:把 Windows 7 装进博客 Bandizip 签名程序 RegDll 实现 DLL 白加黑加载 Typora 1.14.9 离线授权机制分析与本地 Hook 实现 nProtect BlackCipher 反作弊分析 FinalShell 4.6.5离线激活 朱镕基同志逝世 【开源主题】LB_Down下载站-支持1.3.0版本typecho主题 没有信用卡,我为了注册一个20.uy域名,走了一条多长的弯路 QQ音乐播放接口:PHP逆向分析与实现 CTF:最好的语言解密过程 狐蒂云疑似准备跑路:低价云服务器的水有多深 WeMod PRO 会员高级版脚本分享 PowerShell 执行策略被禁止解决方法 一款可以屏蔽国外广告的IP过滤评论插件 当 PCDN 来敲门:一个"小"博客的 200G 流量惊魂记 船新升级!我的“一言”系统支持一键换肤了(内附10套精美皮肤) 再续前缘:利用自建一言Api接口嫁接给typecho 给网页装个“灵魂”:我写了一个超丝滑的【一言】自建语录api 桌面工具-极光便签-随时笔记
Snipaste 2.11.X 离线授权分析
小野 · 2026-08-23 · via 小野博客

博主分析了Snipaste 2.11.X的离线授权机制,指出授权码可本地生成,包含Ed25519签名和gzip压缩JSON,并详述机器码生成算法及通过修改exe三字节跳过验签的补丁方法,最后提供脚本工具。

Snipaste 的授权码可以离线本地生成,不需要联网。
激活只有两步:伪造一把客户端认可的授权码 + 打一个补丁让授权码通过

授权码分析

1. 授权码格式

它是一串 base64 文本,形如:


0F-xxxxxxxxxxxx...

逐步分析授权码:

位置含义
第 1 位 0固定头
第 2 位 F校验字符
-分隔符
后面一长串真实数据(签名 + 载荷)

真实数据 = 64 字节 Ed25519 签名 + gzip 压缩的授权信息 JSON

授权码里面的 JSON 主要字段:

字段作用客户端检查吗
eml邮箱检查,不能为空
dom工作组检查,要匹配本机工作组
hwi.machineid机器验证码检查,必须匹配本机
hwi.platform平台检查,必须等于 1
iat / exp签发时间 / 到期时间检查时间范围
lic / pln / api版本类型等不检查

2. 关键一步:机器验证码(machineid)

Snipaste 的授权是绑定机器的。

生成验证码的算法(和客户端完全一致):

验证码 = blake2s("Snipaste 2" + "1" + MachineGuid) 取后 10 字节
       → 转十六进制大写 → 按 4-8 分段加横杠
       → 末尾追加一个校验字符 → 再追加 "1"
  • MachineGuid 存在注册表:HKLM\SOFTWARE\Microsoft\Cryptography\MachineGuid
  • 每台电脑唯一,重装系统会变
  • 注意:这里说的验证码,不是 Snipaste 设置界面里显示的设备码。填错就会报"无效凭证"。

3. 签名与验签

授权信息 JSON 用自签的 Ed25519 私钥签名,客户端用内置公钥验签。

想让伪造的授权码通过验签,有两条路:

  • 方式 A:把客户端内置公钥换成自己的公钥(需要改 exe 里的公钥数据)
  • 方式 B(本文采用):直接改 exe,让验签结果直接"通过",伪造公钥都不用换

4. 打补丁

Snipaste 2.11.3 x64 只需改 3 个字节:

偏移 0x24AC80(即 RVA 0x14024B880):
  0F B6 D8   →   B3 01 90
  (取验签结果)   (直接置 1,nop)

把验签结果存进寄存器,改成"寄存器等于 1 "。补丁后,授权码直接通过验证

谨记:激活后,不要重新解压覆盖 exe 程序,补丁会被还原,激活立刻失效。脚本会自动备份原版为 .bak,重跑脚本即可重新打补丁。

激活成功PRO

5. 几个坑

  • 状态码 8(时钟过早):签发时间 iat 不能是未来,默认 now - 5 分钟,出错改 --iat-offset +1
  • 状态码 12(无效凭证):多半是 machineid 或 dom 不匹配,别把界面显示码当验证码填。
  • 状态码 31(已过期):exp 太短,默认 +10 年不用管。
  • ref 字段必须设成远未来(直接等于 exp):否则客户端会走联网刷新授权,离线环境刷新必失败,授权会掉。

脚本

  1. snipaste_offline_keygen.py 命令模式运行
  2. SnipasteKeygen.EXE 图形工具
  3. 两款都是python写的脚本。为了方便写了一个图形界面的

Snipastepatched.zip

截图

SnipasteKeygen.EXEsnipaste_offline_keygen

声明

本项目基于:Snipaste-2.10.8-x64 离线激活记录

本方案仅用于个人学习研究,请支持正版。