2022DASCTF X SU 三月春季挑战赛

FlowerCipher

显然已知
$$
\begin{cases}
L_{n} = R_{n-1}+L_{n-1}(k[i]^3+r_n)
\
R_n = L_{n-1}
\end{cases}
$$
转换得
$$
L_{n} = R_{n-1}+R_{n}(k[i]^3+r_n)
$$
已知$L_{n},R_{n}$,对上式进行模运算可得$R_{n-1}$,$L_{n-1}$为$R_{n}$,反复上述运算直到$L=1\quad or\quad R = 0 $,求得全部$k[i]^3+r_n$。

由于上式包含随机数,但随机数的范围很小。通过计算字符’0’~’f’的ASCII码的立方,它们之间的差大于4096,也就是说随机数的影响可以忽略不计,直接开立方根即可得到$k[i]$。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import gmpy2

L = 15720197268945348388429429351303006925387388927292304717594511259390194100850889852747653387197205392431053069043632340374252629529419776874410817927770922310808632581666181899
R = 139721425176294317602347104909475448503147767726747922243703132013053043430193232376860554749633894589164137720010858254771905261753520854314908256431590570426632742469003

flag = ''
while L != 1:
pre_R = L%R
tmp = (L-pre_R)//R
k = gmpy2.iroot(tmp,3)[0]
flag += chr(k)
L = R
R = pre_R

print(flag[::-1])

2022DASCTF X SU 三月春季挑战赛
http://example.com/2022/03/28/CTF/2022DASCTF X SU 三月春季挑战赛/
作者
gla2xy
发布于
2022年3月28日
许可协议