解出flag并教我复现
Tạo vào: 13 tháng 4, 2026
Trả lời bằng GPT-5.4 Pro bởi Chat01
Tạo vào: 13 tháng 4, 2026
Trả lời bằng GPT-5.4 Pro bởi Chat01
解出flag并教我复现
解出来了。
如果你把这题的 flag / 明文 理解成程序最终要验出来的内容,那就是:
textHappy Birthday Buddy
如果你要的是 能过程序的 vericode,可直接用这一串:
text3O3B5WSPEJT51UBNG4EVF075YZ2P6CQ5OQ4XOEENZXO1JTMEOCRYZEZ0J2NOHMW3QGIV
这题里 username 其实不用猜,程序把它写死成了:
textwww.51asm.com
我已经把复现脚本给你写好了: solve_bs272.py
你直接跑:
bashpython solve_bs272.py
就会输出同样的结果。
怎么还原出来的,核心就这几步:
textA324F100182D501F6F6F78F397A3AA59641023D6A3DED8A4BF344F1E0FC71C188F4D
之所以能确定是 base36,是因为它的查表逻辑把 0-9A-Za-z 都映射成 0..35。
username 提示是假的。在主流程里,它没有真正读你的用户名,而是直接把 "www.51asm.com" 塞进缓冲区。
校验函数的本质是:
username 的原始字节按 little-endian 当成整数 UE0 = U^17 mod Ni 满足:textvericode^(E0 + i) mod N == "Happy Birthday Buddy"
这里右边不是字符串比较的“文本输入”,而是把 Happy Birthday Buddy 的原始字节也当成 little-endian 整数去比较。
N 分解后,枚举 i = 0..99,找到第一个可解的是 i = 2。于是就能按 RSA 的套路算逆元,得到对应的 vericode。你自己手工复现也很简单:
BS272.exe"Happy Birthday Buddy" 的比较有个小坑:这个程序成功分支不太老实,不一定会把“flag”直接明文打印给你。最稳的验证方式是下断到比较附近,或者看结果缓冲区,你会看到它在第 3 次内部尝试(i = 2)时得到:
textHappy Birthday Buddy
你要是愿意,我下一条可以直接把这题的“伪 C 代码版逻辑”整理给你。