首页
社区
课程
招聘
KCTF 2026 第5关 cm.exe Write-up
发表于: 2026-8-17 13:14 19

KCTF 2026 第5关 cm.exe Write-up

2026-8-17 13:14
19

最终 Key:

原始未 patch 程序验证:

样本 SHA1 与 readme 一致:

先做事实表,不直接相信可见字符串。这个样本里确实有不少诱导内容,比如 admin123、password、r3v3rs3!、n0_4i_c4n_r34d_th1s!,以及 FIXME/TODO/NOTE 风格的“作者提示”。这些都只作为 bait 处理,必须通过 xref 和运行结果验证。

静态信息:

关键 xref:

一次性 smoke test 结果:

因此可见字符串路线证伪,不再重复尝试。

主函数在 0x403d90 附近。输入读取后,程序把输入按 hex 字符串解析成大整数/字节数组。长度要求来自下面逻辑:

所以 Key 是 88 个大写 hex 字符,对应 44 bytes。

后续有两个 guard:

即 44 bytes 的 XOR 必须为 0x8f。

等价伪代码:

一开始我把 44 bytes 全部直接按最终表反查,能得到目标映射输入,但 XOR/checksum 对不上。这说明中间还有覆盖或变换。继续看 0x403500,发现它会生成末尾 16 bytes。

主流程:

0x403500 内部可归约为:

其中 modulus 来自静态 BigInt 表:

分解:

最终比较目标位于 0x416380:

程序在 0x4044f8..0x40457c 把 44 bytes 逐字节通过表 0x4163b0/0x4263b0 映射,再和 0x416380 比较。

表反查后,需要被映射的 44 bytes 为:

前 28 bytes 是原始输入前缀;后 16 bytes 是 RSA 输出。因此先 RSA 私钥反解 tail:

组合得到原始 44 bytes:

转大写 hex 即最终 Key。

模型输出:

原始程序运行:

最终 Key:

323C47184B0D3C44254B445842552F365C362C1144424B0D3C4416433B0DD6B12A0D3D95FA65B5E0ADE5E11B

[招生]科锐逆向工程师培训(2026年11月13日实地,远程教学同时开班, 第57期)

收藏
点赞 ・1
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回