首页
课程
问答
CTF
社区
招聘
峰会
发现
排行榜
知识库
工具下载
看雪20年
看雪商城
证书查询
登录
注册
首页
社区
课程
招聘
发现
问答
CTF
排行榜
知识库
工具下载
峰会
看雪商城
证书查询
社区
CTF对抗
发新帖
0
0
[分享]第五题:申时·忆海倒带 writeup
发表于: 2026-8-17 21:26
1179
[分享]第五题:申时·忆海倒带 writeup
mb_avitqlsi
2026-8-17 21:26
1179
## 题目信息 附件中的 `readme.txt` 只说明了文件 SHA1 和判胜条件: ```text SHA1: d1c8124c5964af1531c6e311328854a05ca40bca 判胜条件: 输出 verify success. ``` 目标是分析 `D:\cm\cm.exe`,得到 88 位十六进制序列号。 ## 1. 输入格式 程序要求输入 88 个十六进制字符,解码后得到 44 字节。 设解码后的字节为 `buf[44]`。 ## 2. 前置校验 ### XOR 校验 在 `0x4041bc` 附近,程序对 44 字节执行异或,结果必须为: ```text XOR(buf) == 0x8f ``` ### 累加校验 在 `0x404218` 附近,程序执行: ```c s = 0; for (i = 0; i < 176; i++) { s += ((s & 0x7f) + 1) * checksum_region[i]; } ``` 实际有效输入位于校验区域开头,后续区域为零,因此最终要求: ```text s & 0xffff == 0xbeff ``` ## 3. 查表逻辑 主循环位于 `0x40450d`: ```asm movsx eax, byte ptr [input + i] dec eax push eax call 0x404870 mov al, byte ptr [eax] ``` 查表对象大致为: ```text size = 0x408f data = 0x7363b0 perm = 0x7263b0 ``` `0x404870` 的关键逻辑是: ```c int index = signed_byte - 1; if (index < size) { offset = perm[index]; return data + offset; } return data; ``` 注意这里的 `jb` 是无符号比较,但对于有效输入 `0x01..0x80`,`index` 为 `0..0x7f`,会进入排列查表分支。 从 `perm` 和 `data` 中反查目标字符串: ```text Welcome to KCTF2026! Come and give it a try. ``` 得到最终查表输入: ```text 32 3c 47 18 4b 0d 3c 44 25 4b 44 58 42 55 2f 36 5c 36 2c 11 44 42 4b 0d 3c 44 16 43 0f 44 39 37 4e 3c 44 37 25 44 16 44 25 15 1d 1b ``` 也就是: ```text 323C47184B0D3C44254B445842552F365C362C1144424B0D3C4416430F4439374E3C44372544164425151D1B ``` 前 28 字节直接来自输入,最后 16 字节会在后续变换中被覆盖。 ## 4. 分析尾部变换 尾部变换函数位于 `0x403500`。 输入序列号的最后 16 字节会先被转成 32 个 ASCII 十六进制字符,再解析为大整数,执行 RSA 模幂: ```text c = m^e mod n ``` 从静态数据中恢复参数: ```text e = 65537 n = 0x8c91cb79ec693f3ed6519c945dd67371 ``` 因式分解: ```text p = 13636154180376482939 q = 13702465297157554691 ``` 计算私钥指数: ```text d = 0x721a022d849de5cc5ad9bbb701f9fb65 ``` 目标查表输入的最后 16 字节为: ```text 0F4439374E3C44372544164425151D1B ``` 因此反解: ```text m = c^d mod n = 0x3B0DD6B12A0D3D95FA65B5E0ADE5E11B ``` 尾部原始 16 字节为: ```text 3B 0D D6 B1 2A 0D 3D 95 FA 65 B5 E0 AD E5 E1 1B ``` ## 5. 拼接最终序列号 前 28 字节为: ```text 323C47184B0D3C44254B445842552F365C362C1144424B0D3C441643 ``` 尾部 16 字节为: ```text 3B0DD6B12A0D3D95FA65B5E0ADE5E11B ``` 最终序列号: ```text 323C47184B0D3C44254B445842552F365C362C1144424B0D3C4416433B0DD6B12A0D3D95FA65B5E0ADE5E11B ``` ## 6. 验证 ```powershell $key = "323C47184B0D3C44254B445842552F365C362C1144424B0D3D95FA65B5E0ADE5E11B" $key | & "D:\cm\cm.exe" ``` 输出: ```text Enter your key: verify success. ```
登录后可查看完整内容
传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!!
收藏
・
0
点赞
・
0
打赏
分享
分享到微信
分享到QQ
分享到微博
赞赏记录
参与人
雪币
留言
时间
查看更多
赞赏
×
1 雪花
5 雪花
10 雪花
20 雪花
50 雪花
80 雪花
100 雪花
150 雪花
200 雪花
支付方式:
微信支付
赞赏留言:
快捷留言
感谢分享~
精品文章~
原创内容~
精彩转帖~
助人为乐~
感谢分享~
最新回复
(
0
)
游客
登录
|
注册
方可回帖
回帖
表情
雪币赚取及消费
高级回复
返回
mb_avitqlsi
1
发帖
0
回帖
10
RANK
关注
私信
他的文章
[分享]第五题:申时·忆海倒带 writeup
1179
关于我们
联系我们
企业服务
看雪公众号
专注于PC、移动、智能设备安全研究及逆向工程的开发者社区
看原图
赞赏
×
雪币:
+
留言:
快捷留言
为你点赞!
返回
顶部