Skip to main content

client-license-validation-bypass

Authorized-testing playbook for defeating client-side license / activation / card-key validation across runtimes (native PE, .NET/Mono, Electron, JVM, Python/Go/Rust) and models (offline license & signature, online activation, card-key/subscription/trial, Token/JWT, hardware-bound). Use to locate validation logic and endpoints, decide server-side vs client-side authority, judge forge-vs-relay, and test backdoors, endpoint takeover, memory patching, protocol/injection flaws, key extraction, and payload carving. Authorized samples only; ships a vendor-side hardening checklist.

Informations de source

Dépôt
angusdevgo/Seep-Reverse-Lab
Dernière activité de la source
23 septembre 2026 à 18:06
Langue détectée de SKILL.md
chinois
Étoiles
957
Forks
279

Options d'installation

Le prompt qui vérifie d'abord la source est sélectionné par défaut. Vous pouvez passer à une commande directe ou télécharger une copie locale.

Vérifiez les fichiers source

Lisez SKILL.md et les fichiers associés affichés par SkillsMP avant de décider de l'installer.

Affichage de SKILL.md

SKILL.md
Instructions source · Aperçu en lecture seule
name
client-license-validation-bypass
description
Authorized-testing playbook for defeating client-side license / activation / card-key validation across runtimes (native PE, .NET/Mono, Electron, JVM, Python/Go/Rust) and models (offline license & signature, online activation, card-key/subscription/trial, Token/JWT, hardware-bound). Use to locate validation logic and endpoints, decide server-side vs client-side authority, judge forge-vs-relay, and test backdoors, endpoint takeover, memory patching, protocol/injection flaws, key extraction, and payload carving. Authorized samples only; ships a vendor-side hardening checklist.
# SKILL: Client License / Activation / Card-Key Validation — Expert Attack Playbook > **LOAD**: 桌面/原生客户端许可校验实战手册。覆盖多运行时(原生 PE / .NET·Mono / Electron·Node / JVM / Python·Go·Rust 冻结 / 加载器+密文载荷)与多校验模型(离线许可文件·签名、在线激活、卡密·订阅·试用、Token·JWT、硬件绑定)。 > **四问**(开测即答,任何客户端通用): > ① **权威在哪** — 校验是服务器审核,还是纯本地判定(离线许可/签名验证)? > ② **本地能否完成握手** — 能**伪造成立**,还是**只能中继**上游? > ③ **有无捷径** — 后门/调试开关/环境变量/隐藏参数? > ④ **功能是否与校验分离** — 真功能能否脱离校验单取即用(载荷/DLL/脚本/资源)? > **边界**: 仅已授权样本;与 scope、影响闸、证据门槛冲突时以后者为准。禁 DoS 扩大化、禁真实凭据外泄。 --- ## 【G-Auth】授权门(先于 §0 的唯一起始门) > **本手册仅用于已授权的白盒安全测试实验室环境。** **规则**: 每接**新目标**,第一件事是**询问用户是否已获得该目标的测试授权**。 | 答复 | 动作 | |---|---| | **无授权 / 不确定 / 未回答** | **立即停止**。不分析、不下载、不运行、不试探。说明需要什么, 等待。 | | **已授权** | 进入 §0 执行顺序门, 此后**全速工作**。 | **双向约束(两个“最大”)**: - **防误用(硬闸)**: 授权**逐目标**确认, 换目标重新确认; 不得以“之前说过”跳过; 确认前不做任何实质分析。 - **保效率(零摩擦)**: **一次确认即放行**, 不反复询问; **不缩减输出**、不堆免责声明、不降低交付标准。**闸门只放在门口, 不放在路上**。 **边界**: 授权覆盖“能不能测”; **下载/安装/写文件/改环境变量**仍需单独确认。 --- ## 0. 执行顺序门(先读本节,按门推进) 先定权威归属,再选打法。门是通用骨架,案例仅示范一条路径。 | 门 | 判据 | 命中则 | 未命中 | |---|---|---|---| | **G0 权威定性** | 断网/改系统时钟/改本地许可文件,功能是否仍可用? | 纯本地校验 ⇒ 走**离线路线**(§2.4、§7.1) | 需联网 ⇒ 服务器权威,转 G1 | | **G1 样本定性** | 静态 10 分钟能否判出运行时/壳/子系统/依赖指纹? | 见 §1–§2 | 情报不足转动态 §3 | | **G2 写入判死归因** | 改它自己内存里 1 个无害字符,4s 后仍存活? | 存活 ⇒ **无自保护**,可继续改内存 | 崩溃 ⇒ 疑有自保护,先按"值非法"排除再定论,转网络层接管 | | **G3 端点发现** | 盘上/静态有明文 URL/IP 吗? | 直接读 | **内存取证**(§4.1) | | **G4 响应判定** | 多次会话令牌是否变化?时间戳是否回填?体长是否恒定而内容随会话变? | 命中 ⇒ **会话绑定** ⇒ 只走中继/DoS(§8.5) | 未绑定 ⇒ 金样回放(§8) | | **G5 载荷判定** | 服务器下发载荷:导出表为空?仅导入基础运行库?无自校验/不联网? | 成立 ⇒ **取载荷即用**(§9),性价比最高 | 载荷有校验 ⇒ 转 §7·6 密钥提取 / §8.5 中继 | | **G6 交付** | — | 结论分级(确认/现象/N-A)+证据路径+载荷指纹+§10 防护清单 | — | **通用禁令(踩过坑)**: ① 未过 G2 不得批量改内存;② G4 判绑定后别再试字段二分;③ 不轮询抢补丁竞速(见 §4.3);④ 等长替换禁前导零/NUL/空格填充;⑤ 结论必须区分"伪造成立"与"仅能中继"。 **门 → 决策树 → 章节映射**(消 §0 与 §7 的重叠): | 门结论 | 决策树路径(§7) | 主章节 | |---|---|---| | G0 纯本地 | 1. 离线判定直接改 | §7.1 | | 任意阶段发现捷径 | 2. 后门/调试开关 | §7 | | G4 未绑定 | 4. 密文回放(金样) | §8 | | G4 绑定 + 上游可达 | 5a. 透明中继 | §8.5 | | G4 绑定 + 上游不可达 | 5b. 拒绝服务 | §5.3 | | G5 成立 | 7. 取载荷 | §9 | | 上述皆不通 | 3/6. 协议注入 / 密钥提取 | §7·3、§7·6 | **退出/升级判据(防死磕)**: 单条路径 ≤3 轮无进展即挂起转下一路(呼应禁令③,竞速类"必输"路径直接放弃);内存补丁累计崩 2 次 ⇒ 停改内存转网络层;金样回放连续静默退出 ⇒ 判会话绑定转中继;三大路径(离线改/回放/中继+取载荷)全不通 ⇒ 记为"现象级/需人工深逆",附已排除项与证据,勿无限重试。 --- ## 1. 目标画像与分类(先分型,再选工具) 优化点:先按维度归类,后续各节据类分流,避免只会打一种客户端。 **运行时维度** - **原生 PE(C/C++/加载器)**: PE 头+节表解析;密文段+运行期自解密常见;§2.1。 - **.NET / Mono**: 托管元数据可倾出;IL 可反编;ReadyToRun/AOT 例外;§2.2。 - **Electron / Node**: `asar` 包、`app.asar` 内 JS;`process.env`、V8 快照;许可逻辑常在明文 JS 或 native addon(`.node`)。 - **JVM(Java/Kotlin)**: jar/class 可反编(CFR/Procyon);混淆(ProGuard)靠字符串/调用图定位;许可常在 `verify*/License*` 类。 - **Python/Go/Rust 冻结**: PyInstaller/py2exe 可解包取 `.pyc`;Go 有符号表(`gopclntab`)可还原函数名;Rust 靠字符串+panic 路径。 **校验模型维度** - **离线许可文件/签名**: 本地 `.lic/.key/注册表`,非对称签名验证;攻击面=签名验证逻辑本身(§7.1)。 - **在线激活/心跳**: 首次激活+周期心跳;攻击面=端点接管+响应伪造(§5–§8)。 - **卡密/订阅/试用**: 卡密上行、服务端返回剩余期;试用期常本地存时间戳(§2.4)。 - **Token/JWT**: 校验签名或调用校验端点;弱密钥/`alg:none`/本地不验签是经典缺陷。 - **硬件绑定**: 机器码=MAC/磁盘序列/CPUID 哈希;可 hook 采集函数伪造机器码。 **协议维度**: HTTP/HTTPS、WebSocket、gRPC、裸 TCP 自定义二进制。判协议决定"金样回放/中继/监听器"的实现(§8)。 **平台等价维度**(本手册命令多为 Windows,以下给 macOS/Linux 等价物,方法不变): | 能力 | Windows | macOS | Linux | |---|---|---|---| | 可执行格式 | PE(§2.1) | Mach-O(`otool`/`nm`/`class-dump`) | ELF(`readelf`/`nm`) | | 代码签名/公证 | Authenticode | `codesign -dvvv` + notarization | 无强制,GPG/自签常见 | | 注入/hook | DLL 注入、Detours、Frida | `DYLD_INSERT_LIBRARIES`、Frida | `LD_PRELOAD`、`ptrace`、Frida | | 端点接管 | `netsh add address`/hosts(§5.3) | `/etc/hosts`、`pf` RDR | `/etc/hosts`、`iptables/nft DNAT` | | 内存读取 | `OpenProcess`+`ReadProcessMemory` | `task_for_pid`+`vm_read`(需 SIP 关/授权) | `/proc/<pid>/mem`、`process_vm_readv` | | 许可存储 | 注册表/`%APPDATA%`/ADS | `~/Library`、plist、Keychain | `~/.config`、`~/.local`、`/etc` | | 驱动/GUI 观测 | UIAutomation | AXUIElement/Accessibility | AT-SPI、`xdotool` | --- ## 2. 静态解剖(按运行时分流) ### 2.1 原生 PE 壳 PE 头+节表纯 struct 解析 → 熵剖面定密文段 → 明文导入名/字符串定角色 → 其余转动态。**不在壳上硬磕**。 - 节表真伪: `RawSize=0 而 VSize 巨大、节名自定义且重复 = 表被伪造`;仅 1~2 段有 raw 且熵≈7.8 = 全密文载荷。 - 入口点落在密文段内 ⇒ 运行期自解密,静态字符串必空(勿据此判死)。 - 无 `ws2_32/winhttp` 静态导入 = 动态加载;密文段内散落明文 DLL 名 = 运行期手工解析导入。 - 子系统: `Subsystem=3`⇒控制台⇒§3.1;`=2`⇒GUI⇒§3.2。 ### 2.2 .NET / Mono 手解(无 SDK/ILSpy 也能倾) 元数据根 `BSJB`;流目录偏移相对根;`#~` 24 字节头+行数表;直倾 `#Strings`/`#US`(长度含尾标志字节)/`#Blob`/`#GUID`。表头版本被改或行无法对齐 = 定制布局,转动态。`ldstr(0x72)` 命中寥寥 = ReadyToRun/AOT,IL 不在盘上。COM 描述符(数据目录 14)非零=托管;含 CoreCLR 源码路径=自举宿主。运行时自解压盯 `%TEMP%\.net\<App>\<hash>\`,趁进程存活整树拷贝。 ### 2.3 其它运行时速解 - **Electron**: `npx @electron/asar extract app.asar out/`;搜 `license/activate/verify/machineId`;native addon 转 §2.1 原生流程。 - **JVM**: 解 jar → CFR 反编 → 找 `License/Auth/verify/checkSignature`;混淆时靠常量字符串与网络调用点反推。 - **Python 冻结**: `pyinstxtractor` 解包 → `.pyc` 反编(decompyle3/pycdc);校验逻辑常明文可读。 - **Go/Rust**: 字符串扫端点/错误文案;Go 用 `gopclntab` 还原函数名定位 `verify`。 ### 2.4 离线许可与本地状态 - 许可文件: exe 同目录/`%APPDATA%`/注册表下 `*.lic/*.key/license.dat`;判其是否被签名(尾部固定长 blob=签名)。 - 试用期存储: 注册表隐藏键、`%APPDATA%` 时间戳文件、备用 ADS 流;删/改后看是否重置=本地时间判定。 - 存卡: exe 同目录 `*_card_save.json` 或注册表键常明文存卡密。找不到不必纠缠——**卡密往往就在每条请求头里**(§6.1)。 - 通用线索词: 类型/函数名含 `Auth/Login/Heartbeat/Card/Key/License/Activate/Verify/Sign/Aes/Rsa/Jwt`、`*Embedded.config.json`、`IsDevMode`、`--dev`、`machineId`。 ### 2.5 商用保护壳 / 许可 SDK 指纹(先辨型,定"绕逻辑 vs 提功能") 先认厂再决策:**壳**只保护/加密,目标是脱壳或运行期取内存;**许可 SDK**是可 hook 的鉴权层,目标是 hook 校验点或模拟。 | 目标 | 类别 | 静态指纹 | 首选打法 | |---|---|---|---| | VMProtect | 壳(虚拟化) | 节名 `.vmp0/.vmp1`、大量间接跳转 | 不硬逆 VM;运行期内存转储 OEP 后取明文(§4.1) | | Themida/WinLicense | 壳(SecureEngine) | 节名 `.themida`、反调试重 | 先过反调试再内存转储;许可查询点 hook | | Enigma Protector | 壳+许可 | `enigma` 字符串、虚拟文件系统 | 断激活 API,改返回;取内存资源 | | Denuvo | 壳(游戏 DRM) | 触发式加密块、大 `.arch` 节 | 极高成本;仅内存态取功能,不逆 | | FlexLM/FlexNet | 许可 SDK | 导入 `lc_checkout/lc_init`、`FLEXlm` 串、`@host` 许可格式 | hook `lc_checkout` 返回 0(成功);或伪造 license server | | Sentinel HASP/LDK | 许可 SDK+dongle | `hasp_login/hasp_decrypt`、`haspvlib` | dongle 模拟(HASP emulator);hook `hasp_*` 返回 | | Wibu CodeMeter | 许可 SDK+dongle | `CodeMeter` 服务、`wibu` 串 | hook `CmAccess/CmCrypt`;模拟 CmContainer | | Cryptlex/LicenseSpring | 云许可 SDK | `LexActivator`、`IsLicenseGenuine` | 端点接管+响应伪造(§5–§8);hook 校验返回 | 判据: 有以上指纹先查厂商已知弱点(hook 点/模拟器可行性),再回主流程;强壳(VMProtect/Themida/Denuvo)一律走**运行期内存取功能/取载荷**(§4.1、§9),勿硬逆。 --- ## 3. 动态观测 ### 3.0 写入判死归因(任何内存改写之前,20 秒) 后果: 无此步会把"补丁值非法"误判为"有反内存自保护"(案例白烧 3 轮)。 做法: 定位它自己的一处无害串(已保存卡密/窗口标题),改 1 字符 → 等 4s → 存活则回改再等 4s。存活 ⇒ 无自保护,后续崩溃一律先归因"值非法/改坏相邻结构"。 ### 3.1 控制台客户端(stdin 驱动 + stdout 预言机) - 必须重定向输入,否则卡在交互提示(常弹 `请输入(Y/N)` 等 ~60s 超时——**这才是"启动后 ~60s 才联网"的真因**,勿误读为"自退"): `cmd /c ""sample.exe" < yes.txt > out.txt 2>&1"`(`Start-Process` 无 stdin 会停住)。 - **stdout 原文即阶段预言机**: 卡密回显 → `验证成功…` → `注入成功!` → `清理完成!`。 - **失败模式**: 未通过时"一字不出直接退出"——无输出本身即判据,别等错误文案。 - 实现陷阱: `StreamReader.EndOfStream` 同步读会**阻塞主循环**(轮询/转储全停摆);改文件重定向 + 轮询文件长度。 ### 3.2 GUI 客户端 UI Automation 枚举 Edit/Button/CheckBox 的 Name/Value,`ValuePattern.SetValue` 填卡,`InvokePattern` 点击;窗口文本("响应解密失败"等)即错误预言机。Electron/CEF 界面可挂 DevTools/远程调试端口直接读渲染进程状态。 ### 3.3 API/系统调用观测(定位校验点) - 通用探针: API Monitor / Frida / ETW 挂 `getaddrinfo`、`connect`、`send/recv`、`CryptVerifySignature`、时间函数、文件/注册表读。 - 断在校验函数返回处改返回值(patch `AL=1`)是"是否纯本地判定"的最快验证。 --- ## 4. 端点发现 ### 4.1 硬编码 IP/URL 场景: 内存取证是主路径 盘上全空时直接扫运行中进程内存(同用户进程可 `OpenProcess`+`ReadProcessMemory`): - ASCII: `\d+\.\d+\.\d+\.\d+`、`host:port`、`https?://…`、`wss?://…`; - 二进制 `sockaddr_in`: `02 00 <port_netorder> <ip_4B>`(端口网络序,如 50731=`C6 2B`); - 裸 `in_addr` dword(如 `101.35.222.163`⇒`65 23 DE A3`)。 命中即取 ±64B 上下文 → 读出完整请求模板与 URL。 ### 4.2 连接与 DNS(别指望一定有痕迹) 客户端可能**直连硬编码 IP** ⇒ `displaydns`/`Resolve-DnsName` 全程无新记录,不代表没联网。轮询(`GetExtendedTcpTable`、netstat 重定向)**窗口 ≥120s**;单次连接只在某一刻出现,漏抓属常态。走系统代理时按"全进程"过滤,但先实测是否真用代理。 ### 4.3 配置块解密时间线(决定一切时序) 配置(IP/URL/模板)常**在一个极短窗口内一次性成型**(案例 21 份副本落在同一 **13ms** 内)。⇒ "轮询→命中→补丁"几乎**必输**(materialize→connect 只隔微秒),冻结(`SuspendThread`)**也切不开**该窗口。要么放弃竞速(转 §5.3),要么在中继层做(§8.5)。 ### 4.4 抓包与 TLS 剥离 明文 HTTP 直接监听;HTTPS 先试系统代理+自签 CA(mitmproxy);抓不到即转 §4.1 内存取证。 **证书固定绕过(按运行时选点)**: - **原生/OpenSSL**: Frida hook `SSL_CTX_set_verify` 强制 `SSL_VERIFY_NONE`,或 hook `X509_verify_cert` 返回 1;BoringSSL 同理。 - **Schannel(Windows)**: hook `CertVerifyCertificateChainPolicy` 令 `dwError=0`。 - **.NET**: hook/patch `ServerCertificateValidationCallback`/`RemoteCertificateValidationCallback` 恒返 true;或环境层信任自签 CA。 - **JVM**: 替换 `X509TrustManager.checkServerTrusted` 为空实现(Frida `frida-java-bridge` 或字节码改写);处理 `TrustManagerFactory` 自定义 pinning。 - **Electron/Node**: `NODE_TLS_REJECT_UNAUTHORIZED=0` 或 hook `tls.checkServerIdentity`。 - 兜底: 无法 hook 时用 `SSLKEYLOGFILE` 导出会话密钥,Wireshark 解密仅供分析(不改流量)。 --- ## 5. 端点接管 ### 5.1 等长替换的合法值规则 等长只是必要条件;**值本身必须合法**: 数值形 IPv4 不得有前导零(`127.000.000.001` 被 `getaddrinfo/inet_pton` 拒收)、不得含 NUL/空格;域名不得以点/空格结尾。 位宽不足用**同长度回环地址**: `127/8` 全域回环,14 字符可用 `127.100.100.10`;主机名位宽不足优先同名解析(如 `x.localtest.me`=14)而非截断。 替换前 `ipaddress.ip_address()` 自检;替换后观察 4s 存活。端口亦可等长改(5 位)但须合法且未被占用。
Voir sur GitHub
Ce SKILL.md est tres volumineux, SkillsMP affiche donc ici seulement la premiere section. Voir sur GitHub