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.

Datos de origen

Repositorio
angusdevgo/Seep-Reverse-Lab
Última actividad en el origen
23 de septiembre de 2026 a las 18:06
Idioma detectado de SKILL.md
chino
Estrellas
957
Forks
279

Opciones de instalación

De forma predeterminada está seleccionado el prompt que primero revisa el origen. Puedes cambiar a un comando directo o descargar una copia local.

Revisa los archivos de origen

Lee SKILL.md y los archivos complementarios que muestra SkillsMP antes de decidir si quieres instalarlo.

Mostrando SKILL.md

SKILL.md
Instrucciones de origen · Vista previa de solo lectura
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 位)但须合法且未被占用。
Ver en GitHub
Este SKILL.md es muy grande, por eso SkillsMP muestra aqui solo la primera seccion. Ver en GitHub