吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2057|回复: 15
上一主题 下一主题
收起左侧

[CrackMe] C++ 无壳 无联网 无反调试 的CrackMe 已更新

  [复制链接]
跳转到指定楼层
楼主
LXGZJ237 发表于 2026-6-28 01:07 回帖奖励
CM是什么?Crackme是什么?这是什么东西?楼主发的什么?
他们都是一些公开给别人尝试破解的小程序,制作 Crackme 的人可能是程序员,想测试一下自己的软件保护技术,也可能是一位 Cracker,想挑战一下其它 Cracker 的破解实力,也可能是一些正在学习破解的人,自己编一些小程序给自己破解,KeyGenMe是要求别人做出它的 keygen (序号产生器), ReverseMe 要求别人把它的算法做出逆向分析, UnpackMe 是要求别人把它成功脱壳,本版块禁止回复非技术无关水贴。

本帖最后由 LXGZJ237 于 2026-7-4 13:08 编辑

1、编写语言:C++ 23
2、编译器:MSVC x64 Release
3、联网行为:无
4、是否加壳:无
5、是否有反调试:无
6、正确/错误信息:正确可进入主界面



下载地址:

https://lxgz.lanzouv.com/imeEF3t9pvxg


20260703更新,OLLVM编译的版本:
https://lxgz.lanzouv.com/iuk7c3u6yhzg



20260704更新OLLVM编译的版本,修复0703及之前没有保护main函数的bug:
https://lxgz.lanzouv.com/iQ8K13u92dyh




登录界面:


主界面:


PS:不单单是个CM,是个真实在用的程序

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册[Register]

x

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
唐小样儿 + 1 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

推荐
囚徒灬 发表于 2026-6-28 21:34
本帖最后由 囚徒灬 于 2026-6-28 21:35 编辑


压缩包密码:HMAC 密钥  49位那个

Serial: MG-9049b63f-38fe-487c-a1ee-a2b422e59498
Card key (19 digits): 8500108909809909918

DeviceDataProcessImgui.exe 逆向分析报告

1. 目标概述

项目 详情
文件名 DeviceDataProcessImgui.exe
架构 x86-64, MSVC 编译
函数总数 ~3995
图形框架 DirectX 11 + Dear ImGui + ImPlot
数据解析 nlohmann::json
其他库 QR Code 生成器 (qrcodegen)
性质 电流/功率测量数据可视化分析工具 (Current Meter)

2. 授权系统架构总览

程序采用双文件授权机制,两个文件缺一不可:

用户输入卡密 (19位数字)
        │
        ▼
  ┌─────────────────┐     ┌──────────────────────┐
  │ credentials.bin  │     │  activation.bin       │
  │ (加密存储卡密)    │     │ (加密存储授权信息)     │
  └────────┬────────┘     └──────────┬───────────┘
           │                         │
           ▼                         ▼
     卡密验证通过              type|level|issued|expiry
           │                         │
           └──────────┬──────────────┘
                      ▼
               程序解锁运行

文件位置: %APPDATA%\DeviceDataProcessImgui\


3. 序列号生成 (sub_140039470)

3.1 逻辑流程

序列号用于将授权绑定到具体机器,有两种来源(按优先级):

优先级 来源 格式 示例
1 注册表 MachineGuid MG-{GUID} MG-9049b63f-38fe-487c-a1ee-a2b422e59498
2 C:\ 卷序列号 VOL-%08lX VOL-1A2B3C4D

3.2 注册表读取 (sub_140039700)

  • 键路径: HKLM\SOFTWARE\Microsoft\Cryptography
  • 值名: MachineGuid
  • 访问标志: 0x20119 = KEY_READ | KEY_WOW64_64KEY
  • 类型校验: 必须为 REG_SZ (1)

3.3 字符串混淆

所有敏感字符串在二进制中均混淆存储,运行时动态解码:

原始位置 解码算法 解码结果
0x14003973C (31 wchar) (wchar - 229) ^ 0x73 SOFTWARE\Microsoft\Cryptography
0x14003982B (11 wchar) (wchar - 0xFE) ^ 0x38 MachineGuid
xmmword_140197260 (14 byte) (byte + 2) ^ 0x38 activation.bin
xmmword_140197280 (15 byte) (byte + 27) ^ 0x73 credentials.bin
0x140039068 (22 wchar) (wchar - 184) ^ 0x8C DeviceDataProcessImgui

3.4 序列号降级机制

MachineGuid 读取失败时 (注册表不可访问等):

  • 调用 GetVolumeInformationW("C:\\") 获取卷序列号
  • 格式化为 VOL-%08lX

证据: sub_140039470 @ 0x14003961B 调用 GetVolumeInformationW, @ 0x140039652 调用 swprintf 格式化


4. 密钥派生体系 (HMAC-SHA256 三层 KDF)

4.1 硬编码 HMAC 密钥

属性
密钥内容 kp9X_DDPI_credstore_2f7Aq_Lz0Wm_Rb4Nh_Vt6Ec_Sd8Yu
长度 49 字节
存储位置 xmmword_1401972C0 / 1401972A0 / 1401972B0
解码算法 (byte + 72) ^ 0x8C

证据: sub_14002D730 @ 0x14002D772 加载三组 xmmword, 循环解码 49 字节

4.2 三层密钥派生

硬编码密钥 (49 bytes)
    │
    │  HMAC-SHA256(secret, "ddpi-cred-v1|" + serial_utf8)
    ▼
 Master Key (32 bytes)
    │
    ├── HMAC-SHA256(master, 0x01 || IV_16)  →  Encryption Key (32 bytes)
    │
    └── HMAC-SHA256(master, 0x02 || IV_16)  →  MAC Key (32 bytes)

证据:

  • KDF 标签 "ddpi-cred-v1|"sub_14002D730 @ 0x14002D814 硬编码
  • 模式字节 0x01/0x02 在 sub_14002D970 的参数 a2 中传递 (0x14002DCF4 / 0x14002DD12)

4.3 HMAC 实现验证

  • ipad = 0x36 重复 (标准值), 存储于 xmmword_140197270
  • opad = 0x5C 重复 (标准值), 存储于 xmmword_140197290
  • SHA-256 初始向量: 0x6a09e667, 0xbb67ae85, ... (标准值)

证据: sub_14002E140 中 ipad/opad 与 FIPS 180-4 标准完全一致


5. DCR1 容器格式

5.1 文件结构

偏移     大小       内容
───────────────────────────────
0x00     4 bytes    魔术头 "DCR1"
0x04     16 bytes   IV (随机 Nonce)
0x14     32 bytes   HMAC-SHA256 签名
0x34     N bytes    密文 (HMAC-CTR 加密)

最小文件大小: 52 字节

5.2 加密算法: HMAC-CTR 流加密 (sub_14002E460)

  • PRF: HMAC-SHA256
  • 每块产生 32 字节密钥流: keystream[i] = HMAC-SHA256(enc_key, counter_i_le32)
  • 计数器: int32 小端序, 从 0 递增
  • 对称操作: plaintext XOR keystream (加密 == 解密)

证据: sub_14002E460 中计数器 v30[0] = v3, 4 字节喂入 HMAC, 输出 XOR 数据

5.3 MAC 方案: Encrypt-then-MAC

MAC = HMAC-SHA256(mac_key, "DCR1" || IV || ciphertext)

MAC 比较采用常量时间实现 (SIMD XOR + OR 归约), 防时序攻击。

证据: sub_14002D410 @ 0x14002D551 ~ 0x14002D59F 使用 SSE 指令做逐字节 XOR 累积


6. 卡密系统 (Card Key System)

6.1 卡密格式

19 位纯数字, 结构如下:

位置:  0  1  2  3  4  5  6  7  8  9  10 11 12 13 14 15 16 17  18
含义: [C0 C1 L0][C2 C3 L1][C4 C5 L2][C6 C7 L3][D0 D1 L4][D2 D3 L5] [Luhn]

C = HMAC 校验码 (8位)
D = 有效天数 (4位, 最大 9999)
L = 授权等级 (6位)
Luhn = Luhn 校验位

交织规则: 每 3 位中, 前 2 位来自 code+days 序列, 第 3 位来自 level 序列。

证据: sub_14002C610 @ 0x14002C87A add r14d, 3, 循环 6 次到 18, 每次取 3 个字节分别存入两个缓冲区

6.2 卡密验证流程 (sub_14002C610)

输入卡密 (用户输入, 可含非数字分隔符)
    │
    ▼
1. sub_14002C3B0: 过滤非数字字符, 仅保留 0-9
    │
    ▼
2. 长度校验: 必须恰好 19 位
    │
    ▼
3. Luhn 校验: 对前 18 位计算 Luhn, 与第 19 位比对
    │
    ▼
4. 反交织: 从 19 位中分离出:
   - code_str (8位): 位置 [0,1,3,4,6,7,9,10]
   - days_str (4位): 位置 [12,13,15,16]
   - level_str (6位): 位置 [2,5,8,11,14,17]
    │
    ▼
5. 解析:
   - code  = strtoul(code_str, base=10)
   - days  = atoi(days_str)   → 必须 1 ≤ days ≤ 9999
   - level = strtoul(level_str, base=10)
    │
    ▼
6. sub_14002C0A0: 计算期望校验码
   msg = serial + "|" + f"{days:04d}|{level:06d}"
   expected = HMAC-SHA256(CARD_HMAC_KEY, msg)[:8]  (big-endian) % 100000000
    │
    ▼
7. 比对: expected == code → 通过

6.3 卡密验证 HMAC 密钥

属性
密钥内容 HMJFCIXEENJQFMFSNZWXJKYKRYZS_FEXHOPSRJJAQUGD_QXJ
长度 48 字节
存储位置 xmmword_140197120 / 140197110 / 140197100
解码算法 (byte + 72) ^ 0x8C

证据: sub_14002C0A0 @ 0x14002C1BF 加载三组 xmmword, 解码后作为 HMAC 密钥

6.4 验证码计算 (sub_14002C0A0)

msg = f"{serial}|{days:04d}|{level:06d}"
hmac_result = HMAC-SHA256(CARD_HMAC_KEY, msg)
code = int.from_bytes(hmac_result[:8], 'big') % 100_000_000

证据: @ 0x14002C2F9 取 v31[0..7] 按大端拼接 8 字节, 对 0x5F5E100 (100000000) 取模

6.5 卡密激活后的处理 (sub_140032B30)

验证通过后:

  1. 写入 activation.bin: type=days高位 | level=level | issued=当前时间 | expiry=当前时间+days*86400
  2. 写入 credentials.bin: 加密存储卡密原文
  3. 设置内存标志 a1+97 = 1 (已激活)

过期判断: 当前时间 >= expiry → 显示 "卡密已过期,请更换新卡"

6.6 UI 提示字符串

场景 混淆位置 解码结果
未输入卡密 xmmword_140197370 请输入卡密
设备信息获取失败 xmmword_1401973E0 无法获取设备信息
卡密验证失败 xmmword_140197460+140197410 卡密无效,请检查后重试
卡密已过期 xmmword_140197450+140197430 卡密已过期,请更换新卡

7. 初始化流程 (sub_1400307F0)

程序启动时执行:

1. sub_140030640 → sub_140039470: 生成序列号, 存入对象偏移 +32
2. sub_14002E930: 尝试读取 activation.bin
   → 成功: 设置 a1+100=1 (已激活), a1+104=expiry
3. sub_14002ED70: 尝试读取 credentials.bin
   → 成功: 将解密后的卡密存入对象偏移 +0

证据: sub_1400307F0 按序调用三个函数, 分别初始化对象的三个区域


8. 安全评估

方面 评价 说明
字符串混淆 中等 简单算术+异或, 但每处使用不同参数
机器绑定 良好 MachineGuid + 降级卷序列号双重保障
加密方案 良好 标准 HMAC-SHA256, Encrypt-then-MAC
MAC 比较 优秀 常量时间 SIMD 实现
IV 生成 良好 混合 atomic counter + QPC + RDTSC
核心弱点 致命 HMAC 密钥硬编码在二进制中, 可完整提取

9. 产出文件清单

文件 说明
get_serial.py 序列号生成独立脚本
credential_system.py 完整卡密系统 (序列号+KDF+加解密+文件读写)
generate_cardkey.py 卡密生成器 (生成+验证+写入激活文件)
analysis_report.md 本报告

10. 关键地址速查表

地址 函数 功能
0x140039470 sub_140039470 序列号生成 (MG-/VOL-)
0x140039700 sub_140039700 注册表读取 MachineGuid
0x14002D1D0 sub_14002D1D0 解码文件名 "activation.bin"
0x14002D360 sub_14002D360 解码文件名 "credentials.bin"
0x140038F50 sub_140038F50 构造 AppData 目录路径
0x14002D730 sub_14002D730 Master Key 派生
0x14002D970 sub_14002D970 子密钥派生 (enc/mac)
0x14002E140 sub_14002E140 HMAC-SHA256 实现
0x14002E460 sub_14002E460 HMAC-CTR 流加密
0x14002D410 sub_14002D410 DCR1 容器解密+验证
0x14002DBA0 sub_14002DBA0 DCR1 容器加密+签名
0x14002E930 sub_14002E930 读取 activation.bin
0x14002F320 sub_14002F320 写入 activation.bin
0x14002ED70 sub_14002ED70 读取 credentials.bin
0x14002F690 sub_14002F690 写入 credentials.bin
0x14002C610 sub_14002C610 卡密验证主逻辑
0x14002C0A0 sub_14002C0A0 卡密校验码计算
0x14002C3B0 sub_14002C3B0 输入过滤 (仅保留数字)
0x140032B30 sub_140032B30 卡密激活处理+UI提示
0x1400307F0 sub_1400307F0 启动初始化
0x14002FA70 sub_14002FA70 SHA-256 块压缩
0x140030110 sub_140030110 SHA-256 最终化
0x14002F950 sub_14002F950 SHA-256 单次哈希

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册[Register]

x
推荐
吾爱廖小雨 发表于 2026-6-28 23:56
经过 17 处补丁,你的程序的防爆破测试结论如下:
破解成功卡密验证、设备绑定、过期检查全部被绕过。总共 17 处修改即可完全绕过。你的程序被攻破的层次:
防护层
位置
破解方式

反调试 IsDebuggerPresentsub_140176DD8跳转 NOP 化
文件 credentials.bin HMAC 验证sub_14002ED70直接返回 1
文件 activation.bin 读取sub_14002E930不触发
卡密 Luhn 校验sub_14002C610直接返回 1
过期时间检查sub_140032B30条件跳改无条件跳
渲染登录检查sub_140032460条件跳 NOP 化
状态重置sub_140032330NOP 化总结:防爆破能力 中低
  • 字符串加密做得不错(XOR + 动态解密)
  • 但核心验证函数可被单字节 patch 绕过
  • 缺少代码完整性校验(CRC/签名检测)
  • 建议加壳 + 多点交叉校验 + 关键逻辑虚拟化

    PS: 纯ai破解的

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册[Register]

x

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
evea + 1 + 1 谢谢@Thanks!

查看全部评分

推荐
Tonyha7 发表于 2026-6-29 02:18
LXGZJ237 发表于 2026-6-28 19:34
大佬厉害,顺便问一下,我这个程序爆破强度怎么样?

以下包含剧透,未激活的兄弟不要看了

爆破强度不算高 上线之前可以把验证部分vm下
推荐
Tonyha7 发表于 2026-6-28 11:18





注册的算法没太看明白

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册[Register]

x

免费评分

参与人数 1吾爱币 +1 收起 理由
outdoorreadbook + 1 用心讨论,共获提升!

查看全部评分

推荐
囚徒灬 发表于 2026-7-6 10:10

DeviceDataProcessImgui_V70.exe 逆向分析报告(新版)

本报告针对 V70 新版本,与旧版报告 analysis_report.md 对比。
分析方法:IDA Pro + Hex-Rays,6 个子系统并行深挖 → 每个结论由独立分析员对抗式复核(亲手 get_bytes 读字节 + 脚本复现解码)→ 完备性 critic 用 callgraph/xrefs 总装。
所有密钥、URL、常量均经两次独立 get_bytes 验证


0. 一句话结论

V70 = 旧版授权逻辑原封不动 + 全面控制流平坦化(CFF)混淆 + 一个与授权无关的自动更新器。

  • ✅ 你的判断正确:main 确实被混淆了,形态是控制流平坦化(CFF)
  • ⚠️ 重大澄清:新增的 WinHttp 网络代码是 update::Updater 软件自动更新器(检查版本 + 下载更新包),不是在线授权验证。授权仍是纯本地 DCR1 双文件机制。
  • 🔑 所有硬编码密钥逐字节未变(卡密密钥、凭据主密钥、DCR1、KDF、SHA-256/HMAC 全部与旧版相同)。
  • 🛡️ 新增一个反篡改整数完整性不透明谓词
目标文件 MD5 函数数 镜像大小
DeviceDataProcessImgui_V70.exe 7fa19f21ed3580de7e8c5a54af9127c9 5044(旧版 ~3995) 0x281000
SHA-256 4c398cff78a577d6965ba649d12406915280f76697baf62a493cc2617b5708f2 imagebase 0x140000000

1. 与旧版的变化总览

维度 旧版 (v1) V70 判定
main 线性初始化 sub_1400307F0 前置到 0x140001000,CFF 平坦化(236 块 / 圈复杂度 2795 / 31-case 跳转表) 混淆升级
网络 完全无 新增 WinHttp update::Updater 自动更新器 新增(非授权)
授权判定 本地 DCR1 双文件 本地 DCR1 双文件(不触网) 未变
序列号/指纹 MG-/VOL- 两维 MG-/VOL- 两维(无新增指纹) 未变
密码学 SHA-256/HMAC/三层 KDF/DCR1 同上,标准实现 未变
卡密 19 位交织 + Luhn + HMAC 同上 未变
硬编码密钥 2 把 (byte+72)^0x8C 逐字节相同,未轮换 未变
字符串混淆 算术偏移 + XOR,每处不同参数 同族算法,部分改 SIMD 向量化实现 等价
反篡改 未记录 新增整数完整性不透明谓词 新增

核心洞察:V70 的全部改动都是对抗性的(增加逆向难度),业务逻辑与密钥零变化。任何针对旧版的注册机/密钥恢复逻辑在 V70 理论上仍然成立(唯一待坐实项见 §9)。


2. main 混淆分析(CFF 控制流平坦化)

2.1 形态

  • 入口main @ 0x140001000(size 0x31ef2397 指令 / 236 基本块 / 圈复杂度 2795 / 597 个 state 常量)。被前置到 .text 最前端。
  • 主分发表jpt_140002195 @ 0x14024a5d031-case switch,首项 0x140001F3D 正是 main 首块后继,确证为主分发器)。
  • 机制:非单一 while(state){switch},而是 MSVC 风格的"栈上 {state 常量, jpt 指针} 表 + 间接 jmp"。序言把几十个跳转表指针与递增 state 常量(0x3,0x7,0xa,0x10,0x16…)成对写入栈变量,运行期按 state 索引跳转。
  • 虚假控制流:密集的 "switch 2 cases" 二值分发(0x140001F9C / 0x140001FF6 / 0x140002065 …)——不透明谓词,把顺序代码劈成两半再汇合。
  • 指令替换:字符串解码普遍用 SIMD(paddb/pxor 替代普通加减异或,既解码又混淆。
  • 授权/注册表相关函数(sub_140083810sub_140085630sub_140012540、DCR1/KDF 簇)同样 CFF,Hex-Rays 对入口常直接输出 return jpt_xxx() 无法反编译。

2.2 绕过策略(实战建议)

  1. 不要线性读 main 的 Hex-Rays;按"功能簇"从叶子函数逆向。
  2. 靠 Win32 API 交叉引用定位语义RegOpenKeyExW→序列号、WinHttp*→更新、ofstream/ReadFile→授权文件、0x5F5E100→卡密。
  3. 忽略 2-case 不透明谓词,只跟 16/31-case 主 switch。
  4. 底层密码学原语(SHA-256 压缩、HMAC)未被平坦化,可正常反编译——从这里锚定。
  5. 字符串一律运行期解码:读 .rdata 密文 + 复现 (byte±K)^X(见 §7)。

3. 新增子系统:自动更新器(update::Updater

这是 V70 相对旧版最大的结构性新增,但它与授权无关。 RTTI 符号 ??runDownload@Updater@update@@AEAAXXZ0x14024ca90 / 0x14024cb00)实锤类名与方法。

3.1 唯一网络端点(两次独立 get_bytes 解码确认)

https://api.lxgzj237.win/DeviceDataProcessImgui/version.json
  • 密文位置:0x1401FAB18长度前缀 4 字节(0x3C=60)+ 正文自 +4 起
  • 解码:(byte+2)^0x38(SIMD paddb+pxor)。
  • host=api.lxgzj237.win,端口 443,HTTPS/TLSsub_140081210 判 scheme;0x140081d33 shl ecx,0x17=WINHTTP_FLAG_SECURE),方法 GET,path=/DeviceDataProcessImgui/version.json
  • 全库仅此一条业务 URL:不存在 /activate / /verify 第二路径find_regex + WinHttpCrackUrl 唯一喂入点均已排除)。

3.2 网络栈函数

地址 职能
0x140081210 WinHttpCrackUrl 解析 URL(host/path/port,http→80/https→443,空 path→/
0x140081AF0 WinHttpOpen(UA) + WinHttpConnect + WinHttpOpenRequest(GET) 建会话
0x1400815D0 HTTP GET 取正文到内存(SendRequestReceiveResponseQueryHeaders状态码→ReadData累积 body);超时 8000/15000ms
0x140081FA0 HTTP GET 落盘下载_wfopen_s(L"wb")+fwrite,状态码须==200,带进度回调,无哈希/签名校验
0x140047A40 检查更新线程主体(CFF):GET version.json → 手写 JSON 花括号提取 → 选 windows 平台节点
0x140049DF0 下载更新线程主体(CFF,= runDownload):构造本地 update/ 目录,取清单 URL,调 0x140081FA0 下载
0x1400470A0 加锁把版本/更新信息写入 Updater 对象 +280 成员供 UI 读
  • User-Agent(复核纠正):实际是宽字符串 DeviceDataProcessImgui/1.00x140225d56,UTF-16LE)。WinHttpOpen 第二参数 4dwAccessType=WINHTTP_ACCESS_TYPE_AUTOMATIC_PROXY,非字符串长度。
  • 请求 GET、无自定义头、无 body不携带序列号/卡密/机器指纹/nonce/时间戳——纯拉取静态清单。
  • 下载 URL 不硬编码,来自服务端 version.json 清单动态给出。

3.3 触发路径与安全属性

  • 唯一入口:设置面板 sub_140012540 → 更新面板 sub_14001B480 → 线程创建 sub_1400473B0(xrefs 实证三者唯一调用关系)。由 UI 触发,非启动强制。
  • fail-open:网络不可达 / HTTP≠200 / 清单缺字段时,仅把错误串("检查更新失败:" / "下载失败:")交 UI 显示,不阻断运行、不改授权判定、不退出
  • ⚠️ 安全风险:version.json 与下载文件无 HMAC/签名/证书 pinning 客户端校验,仅靠 WinHTTP 默认 TLS。下载 URL 来自无签名清单 → 存在 MITM 投毒诱导下载任意文件的风险面(明显弱于本地授权的 Encrypt-then-MAC)。

4. 反篡改:整数完整性不透明谓词(新增)

序列号包装器 sub_140083810 @ 0x140084085

switch ((dword_1402591D0 ^ 0x46966C1D) + (dword_1402591D4 ^ 0xD0AB09EF) != 1262420994)
  • 两个运行期装配的全局字与常量异或再相加,与 1262420994(0x4B3F0402) 比较,结果 0/1 作为注册表读取路径的 CFF 分发条件——把校验和当分发条件的 CFF+tamper 融合手法。
  • 两全局仅在 sub_140083810 内被引用(0x140083849/0x140083854),局部化于序列号读取。
  • 校验和失败(走 case 1)的确切后果未逐指令展平(疑为跳过注册表读取降级到 VOL-),列为遗留项。

5. 授权子系统 vs 旧版(逐一 diff:均未变)

5.1 序列号 / 设备指纹 — 机制未变

  • 总入口 sub_140083810:调 MG 主来源 sub_1400856300x1400850fc/0x140085129)与 VOL 降级 sub_1400876100x1400850a6),拼装最终串。
  • MG 路径RegOpenKeyExW(HKLM, "SOFTWARE\Microsoft\Cryptography", samDesired=0x20119)RegQueryValueExW("MachineGuid", REG_SZ)。前缀 MG-0x140084889 mov word[rbx],0x474D('MG') + 0x140084885 mov byte[rbx+2],0x2D('-') 运行时拼装。
  • VOL 降级GetVolumeInformationW("C:\")VOL-%08lX0x140221897 明文格式串,单一 C 盘)。
  • 无新增指纹维度:导入表中仅 GetVolumeInformationW,无 GetComputerNameW/GetSystemFirmwareTable/GetAdaptersInfo/WMI/CPUID。机器绑定强度与 v1 相同(两维)。
  • ⚠️ 修正旧认识:sub_140008CF0 在 V70 已改作读 HKCU\...\AppsUseLightTheme(暗色主题探测),与序列号无关

5.2 密码学核心 — 算法全部标准且未变

组件 地址 验证
SHA-256 压缩 0x14004E4C0 标准;K 表 0x1401FB0B0(0x428a2f98…)、IV 0x1401FAFA0(0x6a09e667…)均 get_bytes 确认
SHA-256 finalize 0x14004DCE0 标准(0x80 填充 + 大端位长)
HMAC-SHA256 0x140070B30 标准;ipad 0x1401FB440(全0x36) / opad 0x1401FB450(全0x5c)
子密钥派生 0x140070970 HMAC(Master, domainByte‖IV)
KDF 主层 0x14006DBC0 Master=HMAC(secret49, label‖serial)
DCR1 解密+MAC校验 0x14005F480 min 52 检查(cmp rax,0x34)、常量时间 pcmpeqb+pmovmskb 比较(0x140064374)
DCR1 加密写入 0x140065DA0 Encrypt-then-MAC
  • 三层 KDF 结构不变:Master → EncKey=HMAC(Master,0x01‖IV16) / MacKey=HMAC(Master,0x02‖IV16)(domain 字节 0x01@0x140064DBB0x02@0x140064DD3 已 disasm 确认)。
  • DCR1 容器不变:魔术头 "DCR1"(明文 0x1401FB460)+ 16B IV + 32B HMAC + 密文,最小 52 字节;HMAC-CTR 流加密;Encrypt-then-MAC。

5.3 卡密系统 — 格式与算法未变

  • 长度必须 19 位cmp eax,0x13 @ 0x14005DBF7sub_140058150)。
  • 字段 code(8)+days(4)+level(6)+Luhn(1) 交织;level ∈ [0,999999]cmp esi,0xF4240 @ 0x140052486);days 4 位。
  • 校验码:HMAC-SHA256(CARDKEY, serial‖"|"‖days‖level) 前 8 字节大端折叠 % 100000000(0x5F5E100 魔数除法 @ 0x140057316| 分隔符 @ 0x140050F73)。
  • 激活:expiry = now + days*86400imul rax,rsi,0x15180 @ 0x140073315),写 activation.bin + credentials.bin。
  • 卡密链 callees 无任何 WinHttp*——纯本地。

主要函数(均深度 CFF):sub_140058150(编排/长度校验)、sub_1400503E0(HMAC+level+|拼接)、sub_140053170(HMAC 核心+%1e8+密钥解码)、sub_140071870/sub_14006D200(激活写盘)。


6. 硬编码密钥清单(两次独立 get_bytes 复核,均与旧版逐字节相同,未轮换

⚠️ 存储地址采用复核纠正后的正确值(finder 初值有 ±1 及 +0x1c 偏差,已修正)。

密钥 明文 长度 数据地址 长度前缀 解码
卡密 HMAC 密钥 HMJFCIXEENJQFMFSNZWXJKYKRYZS_FEXHOPSRJJAQUGD_QXJ 48 0x1401FB31C 0x1401FB318(0x30) (byte+72)^0x8C
凭据主 HMAC 密钥 kp9X_DDPI_credstore_2f7Aq_Lz0Wm_Rb4Nh_Vt6Ec_Sd8Yu 49 0x1401FB3C8 0x1401FB3C4(0x31) (byte+72)^0x8C
  • 解码常量向量:0x1401FB350(16×0x48=72)、0x1401FB360(16×0x8C)——SIMD paddb+pxor 实现 (byte+72)^0x8C,与旧版标量版数学等价。
  • 卡密密钥手算样例:0x7C → (124+72)&0xFF=0xC4 → 0xC4^0x8C=0x48='H' ✓。

7. 字符串解混淆算法族 + 明文清单

7.1 算法族(与旧版一致,未升级,部分改 SIMD 实现)

  • 字节串明文[i] = ((enc[i]+K)&0xFF) ^ X
  • 宽字符明文[i] = ((enc16[i]+K)&0xFFFF) ^ X(K 常写 32 位补码,如 0xFFFFFF02=-0xFE
  • 存储:[4字节小端长度 L][L 个混淆元素];宽字符版常用 SSE(_mm_add_epi16+_mm_xor_si128 一次 8 个 wchar)。
  • 逆向捷径:IDAPython 扫 .textadd reg,K; xor reg,X 站点得 (K,X) 集(实测 167 处),对 .rdata 长度前缀块批量枚举解码,一次性绕过 CFF 还原全部明文

7.2 授权/设备相关字符串

明文 地址 解码
SOFTWARE\Microsoft\Cryptography 0x1401FBD20 (wchar-229)^0x73
MachineGuid 0x1401FBD64 (wchar-0xFE)^0x38
DeviceDataProcessImgui(AppData 子目录) 0x1401FBCEC (wchar-0xB8)^0x8C
VOL-%08lX 0x140221897 明文
C:\ 0x140225d2c 明文
credentials.bin 0x1401FB3B0 (byte+27)^0x73(另有明文副本 @0x14005F2E5
activation.bin 0x1401FB3FC (byte+2)^0x38
type\|level\|issued\|expiry 格式串 %llu\|%llu\|%lld\|%lld 0x140221286 明文
DCR1 容器魔术头 0x1401FB460 明文

路径SHGetFolderPathW(CSIDL_APPDATA=26) + \ + DeviceDataProcessImgui + CreateDirectoryW%APPDATA%\DeviceDataProcessImgui\{credentials.bin, activation.bin}(未改名,无新增 license/token/cache 文件)。

7.3 授权 UI 中文提示

明文 地址 解码
请输入卡密 0x1401FB464 (byte+0x48)^0x8C
无法获取设备 ID 0x1401FB478 (byte+0x1B)^0x73
卡密无效,请检查后重试 0x1401FB494 (byte+0x02)^0x38
卡密已过期,请更换新卡 0x1401FB4BC (byte+0x11)^0x3A
登录 ##LicenseLogin 0x1401FB4E4 (byte+0x4D)^0x91
##cardCode 0x1401FB550 (byte+0x0C)^0x87
记住卡密 (下次自动登录) 0x1401FB560 (byte+0x20)^0x33
当前卡密已过期: 0x1401FB624 (byte+0x5C)^0x1A
有效期至: 0x1401FB644 (byte+0x2F)^0x12
将以上 Device ID 提供给作者以获取卡密。 0x1401FB5E8 (byte+0x2A)^0x9C

7.4 更新器 UI 中文提示(新增)

明文 地址 解码
正在检查更新… 0x1401FAAE0 (byte+0x48)^0x8C
正在下载更新… 0x1401FAAFC (byte+0x1B)^0x73
检查更新失败: 0x1401FAB5C (byte+0x11)^0x3A
检查更新失败:HTTP 0x1401FAB78 (byte+0x4D)^0x91
更新清单缺少本平台信息。 / 更新清单格式错误。 0x1401FAB98 / 0x1401FABC4 (byte+0x16)^0x18 / (byte+0x11)^0x14
已是最新版本。 0x1401FABFC (byte+0x11)^0x8B
无有效的下载信息。 0x1401FAC18 (byte+0x0C)^0x87
下载失败: 0x1401FAC38 (byte+0x39)^0x56
正在校验… 0x1401FAC4C (byte+0x20)^0x33
下载完成,点击"重启并更新"。 0x1401FACBC (byte+0x39)^0x13
尚未准备好应用更新。 0x1401FACF0 (byte+0x25)^0x38
正在应用更新… 0x1401FAD40 (byte+0x2A)^0x9C
应用更新失败: 0x1401FAD5C (byte+0x5C)^0x1A

8. main 授权控制流骨架(callgraph/xrefs 实证)

main (0x140001000) [CFF: 236 块 / 圈复杂度 2795 / 31-case jpt_140002195@0x14024a5d0]
│
├─[启动] sub_140006CD0  应用上下文构造 + 加载本地授权态
│    ├─ sub_140007630     设备指纹收集(SHGetFolderPath+驱动枚举,非核心)
│    ├─ sub_14005EDF0  ★凭据加载: "credentials.bin" → ifstream 读 → sub_14005F480(DCR1解密+常量时间MAC) → sub_140083810(序列号 MG-/VOL-)
│    ├─ sub_14006CAC0  ★激活读取: activation.bin → DCR1解密 → 解析 type|level|issued|expiry → now>=expiry 判到期
│    └─ sub_140008CF0     HKCU AppsUseLightTheme 主题探测(非授权)
│    → 结果写入应用上下文授权标志(a1+1416 序列号 / a1+1424,1425 授权有效位)
│
├─[登录门 UI] sub_140004940
│    └─ sub_140077100 → sub_1400779F0  登录窗口("登录##LicenseLogin"/"请输入卡密"/"##cardCode")
│        └─ sub_140071870  卡密校验+激活写盘编排(巨型 CFF)
│            ├─ sub_140058150   卡密解析(len==19, Luhn, 反交织)
│            ├─ sub_140053170   卡密 HMAC-SHA256 核心(%1e8, 密钥 SIMD 解码)
│            ├─ sub_140065A60   写 credentials.bin(DCR1 加密 sub_140065DA0)
│            └─ sub_14006D200   写 activation.bin(expiry=now+days*86400)
│
└─[每帧渲染] sub_140009F70  主 UI 构建器
    └─ sub_140012540  设置面板(读授权标志, strftime "%Y-%m-%d %H:%M" 显"有效期至:")
        ├─ sub_14006D810      返回全局授权信息串 qword_1402517B0
        └─ sub_14001B480  ★内嵌自动更新面板("%.1f/%.1f MB"进度)
            └─ sub_1400473B0  _beginthreadex 起后台线程
                ├─ sub_14004E860 → sub_140047A40  ★★在线版本检查(version.json)
                └─         → sub_140049DF0 → sub_140081FA0  下载落盘 update/ 目录

关键结论

  • 网络唯一入口 = 设置面板 → 更新面板 → 线程创建;启动链与登录门均不触及 WinHttp*
  • 授权门控在 UI 层(按 a1+1424/1425 布尔切换"已授权/未授权"渲染),非 main 里硬 exit
  • 无自定义反调试门IsDebuggerPresent 唯一 xref 在 CRT 未处理异常过滤器 sub_1401E05B8(callers = abort/_invoke_watson),非授权路径。

9. 遗留未决点(需动态调试收尾,均不改变总判定)

  1. KDF 标签明文:旧版 "ddpi-cred-v1|"。V70 中 sub_14006DBC0label‖serial 做 Master HMAC,但 label 属 0x1401FB468 起的 period-3 逐位置混淆短串,常规 (byte±K)^X 未解出。建议在 sub_140070B30(HMAC) 入口断点 dump msg 缓冲区坐实。此项只影响 .bin 文件的加解密,不影响卡密本身的生成/校验。
  2. 反篡改谓词失败分支sub_140083810 case-1 落点是否静默降级到 VOL-,未逐指令确认。
  3. 卡密反交织位表:字段宽度(19/8/4/6)、|分隔、level 范围均确认,但精确位映射(旧版 code=0,1,3,4,6,7,9,10 / days=12,13,15,16 / level=2,5,8,11,14,17)在 CFF 下未逐位复原(强推定未变)。
  4. HMAC 大端折叠字节数:无 bswap/movbe(手工移位),确切切片字节数未逐条复原。
  5. version.json 强制更新语义sub_140049DF0 比对版本号后是否有强制分支、下载后 memcmp@0x14004b6f5 语义未 100% 定位(已排除哈希校验)。

10. 关键地址速查表(V70)

地址 功能
0x140001000 main(CFF 平坦化入口)
0x14024a5d0 jpt_140002195 main 主分发表(31-case)
0x140006CD0 启动:应用上下文构造 + 加载本地授权态
0x14005EDF0 凭据加载(读 credentials.bin)
0x14006CAC0 激活读取(读 activation.bin)
0x140004940 登录门 UI 分发器
0x1400779F0 登录窗口渲染
0x140071870 卡密校验 + 激活写盘编排
0x140058150 卡密解析/长度校验(len==19)
0x140053170 卡密 HMAC 核心(%1e8, 密钥 SIMD 解码)
0x1400503E0 卡密 HMAC 期望 code 计算(level 校验 + \| 拼接)
0x14006D200 写 activation.bin(expiry=now+days*86400)
0x140065A60 写/读 credentials.bin 上层
0x140083810 序列号总入口/组合器(含反篡改谓词)
0x140085630 MachineGuid 读取核心(RegOpenKeyExW,CFF)
0x140087610 卷序列号读取(VOL 降级)
0x140083250 AppData 目录构造(未平坦化)
0x140008CF0 HKCU AppsUseLightTheme 主题探测(非授权)
0x14004E4C0 SHA-256 压缩
0x14004DCE0 SHA-256 finalize
0x140070B30 HMAC-SHA256 原语
0x140070970 子密钥派生(domain‖IV)
0x14006DBC0 KDF 主层(加载 49B secret,Master HMAC)
0x14005F480 DCR1 解密 + 常量时间 MAC 校验
0x140065DA0 DCR1 加密写入
0x140064374 常量时间 MAC 比较(pcmpeqb+pmovmskb)
0x140009F70 主 UI 构建器
0x140012540 设置面板(授权状态 UI + 更新面板宿主)
0x14006D810 全局授权信息串取值器(&qword_1402517B0)
0x14001B480 自动更新 UI 面板
0x1400473B0 起检查更新后台线程
0x140047A40 在线版本检查(GET version.json)
0x140049DF0 下载更新线程(runDownload)
0x1400815D0 HTTP GET 取正文
0x140081FA0 HTTP GET 落盘下载
0x140081AF0 WinHttpOpen+Connect 建会话
0x140081210 WinHttpCrackUrl 解析 URL
0x140084085 反篡改整数完整性不透明谓词
0x1401FB31C / 0x1401FB3C8 卡密密钥(48B) / 凭据主密钥(49B) 数据
0x1401FB460 DCR1 魔术头明文
0x1401FAB18 更新端点 URL 密文

11. 安全评估(更新)

方面 评价 说明
混淆强度 显著提升 main 及授权函数全面 CFF + SIMD 解码 + 反篡改谓词
机器绑定 良好(同旧版) MachineGuid + C 盘卷序列号两维,无新增指纹
本地加密 良好(同旧版) 标准 HMAC-SHA256,Encrypt-then-MAC,常量时间比较
密钥保护 仍致命 两把 HMAC 密钥硬编码,可完整提取(且与旧版相同)
更新器网络 弱点 fail-open,无应答签名/证书 pinning,下载 URL 来自无签名清单 → MITM 投毒下载任意文件风险
授权与网络耦合 授权 100% 本地,网络仅自愿更新,不影响判定

破解视角最短路径:授权纯本地,无需处理网络。授权标志落在应用上下文 a1+1424/1425;可在 sub_140012540 读标志处下断确认偏移后定点 patch,或伪造 activation.bin(expiry 远期)。密钥/算法与 v1 逐字节一致,旧版注册机逻辑可直接复用(唯一待坐实:KDF label 是否升版,见 §9.1)。

3#
 楼主| LXGZJ237 发表于 2026-6-28 19:34 |楼主
本帖最后由 LXGZJ237 于 2026-6-28 19:37 编辑
Tonyha7 发表于 2026-6-28 11:18
注册的算法没太看明白

大佬厉害,顺便问一下,我这个程序爆破强度怎么样?

以下包含剧透,未激活的兄弟不要看了
=====选中观看=====
算法的设计有AI的功劳,设计上是为了用户方便输入激活码,并且实际环境下有些电脑是一直没网的状态,用RSA之类的不合适,所以激活码是纯数字的形式,8位签名(HMAC-SHA256)+4位激活天数+穿插6位随机数+1位校验码(Luhn),算法和保存读取许可证文件没有使用库(因为能看见导入函数)是AI手写的,还有字符串用了简易的算法保护
================
7#
dreamdiy2024 发表于 2026-6-29 11:42
收藏备用,感谢大佬

免费评分

参与人数 1吾爱币 -15 违规 +1 收起 理由
L_Monkey -15 + 1 警告:CM区等技术板块禁止回复与主题无关非技术内容,违者重罚!

查看全部评分

8#
huaiyesu 发表于 2026-6-29 17:53
下载一个试试

免费评分

参与人数 1违规 +1 收起 理由
RS水果 + 1 CM区等技术板块禁止回复与主题无关非技术内容,违者重罚!

查看全部评分

9#
mjy713 发表于 2026-6-29 20:38
**分析报告**

目标程序:`DeviceDataProcessImgui.exe`  
窗口标题:`采集器数据处理 v42`  
样本 SHA256:`25cb101b23102d9e226ae615a07c24d61efbeda8a811b9230434e9b608287a41`

**1. 程序概况**

该程序表面是“采集器数据处理”工具,主功能包含文件读取、数据表生成、Hash 显示、历史记录、曲线显示等。但启动时会先进入卡密登录/授权流程,只有卡密校验通过后才进入主界面。

程序没有发现网络验证逻辑,导入表中也没有 `WinHttp`、`Internet`、`URLDownload` 等网络相关 API。授权逻辑为纯本地校验。

**2. 关键函数**

已在 IDA 中重命名了几个关键函数:

```text
0x140032B30  license_submit_handler
0x14002C610  validate_license_key
0x14002C3B0  strip_digits_from_key
0x14002C0A0  license_hmac_check8
0x140039470  get_device_id
```

`license_submit_handler` 是登录按钮/提交逻辑。主要流程:

```c
if 卡密为空:
    提示 "请输入卡密"

if 无法获取设备 ID:
    提示 "无法获取设备 ID"

if validate_license_key(...) == true:
    设置登录成功标志
else:
    提示 "卡密无效,请检查后重试"
```

相关提示字符串被简单异或加密,运行时解密:

```text
请输入卡密
无法获取设备 ID
卡密无效,请检查后重试
卡密已过期,请更换新卡
```

**3. 设备 ID 生成**

程序优先读取注册表:

```text
HKLM\SOFTWARE\Microsoft\Cryptography
MachineGuid
```

然后拼接前缀:

```text
MG-{MachineGuid}
```

本机读取到的值为:

```text
MachineGuid = 69b65411-d82a-4952-81a5-63f2527a7af3
DeviceID    = MG-69b65411-d82a-4952-81a5-63f2527a7af3
```

如果注册表读取失败,程序会退回到 C 盘卷序列号:

```text
VOL-{VolumeSerialNumber}
```

**4. 卡密格式**

输入会先调用 `strip_digits_from_key`,去掉所有非数字字符。

所以:

```text
2508-4070-0950-9909-909
```



```text
2508407009509909909
```

等价。

有效卡密必须满足:

```text
19 位数字
```

其中前 18 位参与主体校验,最后 1 位是 Luhn 风格校验位。

卡密前 18 位按每 3 位拆组:

```text
ABC ABC ABC ABC ABC ABC
```

每组三位中的前两位拼成 12 位字符串,第三位拼成 6 位 nonce:

```text
前两位拼接 -> check8 + days
第三位拼接 -> nonce
```

还原结构:

```text
前 8 位: HMAC 校验结果 check8
后 4 位: 有效天数 days
另外 6 位: nonce
最后 1 位: Luhn 校验位
```

**5. 核心校验算法**

固定 HMAC key 解密后为:

```text
HMJFCIXEENJQFMFSNZWXJKYKRYZS_FEXHOPSRJJAQUGD_QXJ
```

校验消息格式:

```text
{DeviceID}|{days:04d}|{nonce:06d}
```

然后计算:

```python
digest = HMAC_SHA256(key, message)
check8 = int.from_bytes(digest[:8], "big") % 100000000
```

程序再比较卡密中编码出的 `check8` 是否一致。

`days` 范围要求:

```text
1 <= days <= 9999
```

登录成功后,程序会用当前时间加上 `days * 86400` 作为过期时间。

**6. 本机可用卡密**

根据本机 `MachineGuid` 生成的 9999 天卡密:

```text
2508-4070-0950-9909-909
```

纯数字形式:

```text
2508407009509909909
```

其他验证样例:

```text
6901-9023-0650-9909-910
7412-6216-3234-3655-063
8907-7044-0330-0003-004
7700-1056-0860-0000-105
```

**7. 结论**

该 CrackMe 的授权机制不是在线卡密系统,而是本地设备绑定卡密算法。核心保护点在 `validate_license_key`,它通过设备 ID、有效天数、随机 nonce 和固定 HMAC key 生成 8 位校验值,再加上一位 Luhn 校验位组成 19 位数字卡密。

本机可直接使用:

```text
2508407009509909909
```
10#
FAFA 发表于 2026-7-3 01:05
囚徒灬 发表于 2026-6-28 21:34
压缩包密码:HMAC 密钥  49位那个

Serial: MG-9049b63f-38fe-487c-a1ee-a2b422e59498

出一个视频教程就好了
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - 52pojie.cn ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2026-7-16 20:02

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表