kctf2026-Problem4-Traffic Jam

SkillWeb & browsing

Walks your agent through crackme reverse engineering of a KCTF2026 challenge to reconstruct a 9226-character serial.

Available today. Use it from your connected AI after setup.

Add ahel to your AI once: Claude, ChatGPT, Cursor, Claude Code or Codex. Then ask it to use this.

Then ask your AI: use the kctf2026-Problem4-Traffic Jam skill

About this skill

Solution approach for the SeeKan KCTF2026 Problem 4 CrackMe reverse engineering: identify Heaven's Gate, exception-driven VM instructions, environment branches and a modified AES, use polynomial integer roots and custom Base64, and reconstruct a 9226-character Serial.

What this skill tells your AI

The instructions your AI receives, as published by manyuegong33/r0crawl_skills in skills/kctf2026-题4-车流困城/SKILL.md and read by ahel’s review.

文章补充的可验证常量

  • 目标用户名:KCTF;合法 Serial 长度 9226 字节。
  • Serial 格式:lI|0O + 9216 字节主体 + Il1|!。
  • 主体 alphabet:Il1|!ijJL\oO0QDSs5$Zz2B8gq96nNmMWwUuVvRrPpCc({tT+7xXKkYyAa4Ee3FH`。
  • 逆自定义 Base64:v=(alphabet_index[ch]+51+27*i)&63,标准 Base64 解出 6912 字节。
  • 公开解法给出的最终 Serial SHA-256:e34dc3a75754abf44a96d4902bac38b5dd0310fffb2974b27cc84b932ae5847b。
  • 明文十进制记录长度约 6897 字节,NUL 补齐到 6912;100 组十次多项式共 1000 个整数根。

目标是给定用户名 KCTF 构造通过校验的超长 Serial。程序为 32 位 PE,但核心算法藏在 64 位代码,通过异常处理模拟指令集,并根据父进程/PEB 状态选择真、假算法。

标准解法流程

  1. 确认真实执行环境

    • 入口 sub_4010E0 保存寄存器后执行 push 0x33; retf(Heaven's Gate)切换 long mode。
    • in/out/int3 等特权指令并非 I/O,而是 VEH(Warning)捕获后按 opcode 分派的自定义 VM 指令:0xED 反调试、0xEE 长度校验、0xEF 派生密钥、0xEC 计算混淆跳转。
    • 程序枚举父进程并对名称做 djb2 哈希;仅 explorer/cmd/powershell 等白名单进入真算法。PEB BeingDebugged 字节在 AES 与格式校验阶段分别加 0x1A、0x40,两次叠加形成 0x5A 密钥。调试或 patch 任一步会落入假路径。
  2. 恢复自定义编码(Serial 外层)

    • 合法 Serial 固定 9226 字符:5 字符头尾 + 9216 正文;正文字符表 64 个可打印字符。
    • 对正文每位置 i,字符表下标 a_i 与真实 6-bit 值 v_i:v_i=(a_i+51+27*i) mod 64;编码反推 a_i=(v_i-51-27*i) mod 64。6912 字节密文对应 432 个 16 字节块。
  3. 逆向魔改 AES 层

    • 通过输入差分确认 ECB(仅同一块输出变化)。状态按列存储,轮函数按行运算;使用逆列混合和右移行变换,不能直接套标准 AES 库。
    • 异常上下文中轮询线程栈上的 CONTEXT/XMM 寄存器,在不暂停、不写内存的情况下采集相邻轮状态;差分恢复 GF(2^8) 多项式 0x11B 下的 S 盒、轮密钥及首轮异或值。
    • 每轮线性层后额外 XOR 0x40 常量,需在重实现中保留。
  4. 求解多项式根并构造明文

    • 用户名经 31-base hash,再用 Murmur fmix;循环取 state & 0x3fff,去重得到 100 行。
    • 每行 11 个压缩 BCD 系数,解密密钥:base=(group*0x9E3779B9) XOR (coef_index*0x517CC1B7)。解码后首字节为符号+7 位十进制位,后续半字节为十进制系数。
    • 每组 10 次多项式的整数根即 10 个数字。常规组在整数范围因式分解并用 Horner 验证;第 84 组故意篡改一次项,枚举常数项因子后逐一代入筛选 10 个互异整数根。
    • 根按组内升序,以 - 连接生成 1000 个十进制数。注意格式长度约束:在首个整数前补 6 个前导 0,总长度 6897,再以 NUL 补齐到 6912 字节。
  5. 验证与交付

    • 按自定义 AES 正向加密 6912 字节,再执行位置相关 Base64 编码并添加固定头尾,得到 Serial。
    • 先改单字符做差分,确认每个块和真路径;最后在原始未 patch 程序、白名单父进程、无调试器条件下验证 Successful!。

可复用检查清单

  • 识别 32→64 位 Heaven's Gate,分别反汇编两套代码。
  • 建立 opcode→VEH handler 的自定义 ISA 表,禁止简单 NOP 异常指令。
  • 记录父进程、PEB、调试寄存器对算法状态的影响。
  • 用输入差分判断 ECB/状态布局;从异常 CONTEXT 只读采样恢复密钥。
  • 对整数根使用精确因式分解/Horner,处理篡改系数与排序。
  • 严格满足明文长度、NUL 对齐及位置相关编码规则。

Signals

GitHub stars
285
Forks
100
Last commit
Sep 2026
Advanced
Catalog kind
skill
Key
kctf2026-4
Source
github.com/manyuegong33/r0crawl_skills