2021 | PBCTF | Crypto
Alkaloid Stream
题目¶
I found a weird stream cipher scheme. Can you break this?
CTFtime.org / pbctf 2021 / Alkaloid Stream
解题思路¶
- 加密程序
gen.py
和输出文件output.txt
- 先看看加密程序执行的函数
- 现在已知
enc
和public
,需要获得key
或者keystream
才能得到flag
keygen
函数只要提供长度就可以输出密钥!于是愉快地看了看,结果发现用到了随机数 (╥ω╥) 【爆破当然是不现实的!】- 因为没有
key
,recover_keystream
函数也没有什么用了,gen_keystream
函数成为了重点关注对象 - 其中,
fake
数组的产生过程为突破点。当且仅当 \(i = ln - 1\) 时,\(fake[ln - 1]\) 不与key
数组中的值异或,且fake
数组初始值为全 \(0\),因此 \(fake[ln - 1] = 0\)。在output.txt
中搜索,只有一个 \(0\) \(ΦωΦ)/ -
由此结合
public
数组可以依次推出key
数组和keystream
\(fake[ln - 1] => key[ln - 1]\)
\(key[ln - 1] = fake[ln - 2] => key[ln - 2]\)
\(key[ln - 2] \oplus key[ln - 1] = fake[ln - 3] => key[ln - 3]\)
\(... ...\)
-
使用
recover_keystream
函数或直接用keystream
异或enc
就可以得到 Flag 啦!(ΦˋωˊΦ)
最后更新:
2021年11月3日 11:09:55
Contributors: