-
-
[原创]第五题:申时·忆海倒带 WP
-
发表于: 3天前 4
-
程序读取一行序列号,要求长度为 88,并限制字符属于数字或大写字母。真正可用的字符是十六进制字符,因此序列号表示 44 字节数据。
程序包含 admin123、r3v3rs3!、password 以及关于异常处理的提示字符串。相关函数只比较这些字符串、计算无关返回值或触发断点,没有参与最终判定,属于诱饵逻辑。
程序实现了一套大整数运算。每个大整数包含有效字数以及一个置换存储容器。容器的核心字段可以整理为:
访问逻辑下标 i 时,程序实际返回 data[perm[i]]。perm 使用固定状态的 xorshift32 洗牌生成。分析常量时必须先读取置换表,再按逻辑下标取数据,直接查看 data 开头会看到大量无效零值。
输入按十六进制逐字符执行 value = value * 16 + digit,随后按大端序还原成 44 字节。程序先检查两个完整性条件:
最终比较的目标明文为:
每个待比较字节经过如下变换:
枚举合法的单字节下标并反查目标明文,可以唯一得到变换前的 44 字节:
前 28 字节就是序列号解码后的前 28 字节。后 16 字节来自一次固定 RSA 模幂,会覆盖序列号解码结果的最后 16 字节。
从置换存储的大整数中按逻辑顺序恢复出以下常量:
程序计算 c = m^e mod n。模数分解为:
计算私钥指数并解密:
赞赏
他的文章
赞赏
雪币:
留言: