2022 | corCTF | crypto
leapfrog
题目¶
leapfrog.py
output.txt
解题思路¶
- 与 exchanged 类似,同样使用到了函数 \(f(x)\),不过 \(p,a,b\) 没有直接给出
- 已知初始值 \(s\)、每次迭代的次数及结果
-
设 \(B\) 是 \(A\) 经过 \(n\) 次 \(f\) 迭代后的结果,那么有 \(B + t = a^n(A + t)\)。注意到数组
jumps
存在多个子数组集合,满足同一集合内子数组的和相同-
设存在中间迭代结果 \(A,B,C,D\) 满足以下条件
\[\begin{equation} \begin{split} B+t \equiv a^n(A+t)\ (mod\ p) \\ C+t \equiv a^n(B+t)\ (mod\ p) \\ D+t \equiv a^n(C+t)\ (mod\ p) \\ \end{split} \end{equation}\] -
那么有 \((B-C)\equiv a^n(A-B)\ (mod\ p)\) 以及 \((C-D)\equiv a^n(B-C)\ (mod\ p)\),两式相除消去 \(a\) 可得 \((B-C)(C-D)^{-1}\equiv (A-B)(B-C)^{-1}\ (mod\ p)\),即 \((B-C)(B-C)-(A-B)(C-D)\equiv 0\ (mod\ p)\)(与 \((B-D)(B-C)-(A-C)(C-D)\equiv 0\ (mod\ p)\) 是等价)
- 结合多个子数组集合,通过 GCD 求出 \(p\),随后再求出 \(a,b\) 即可
-
Exploit¶
Flag¶
corctf{:msfrog:_is_pr0ud_0f_y0ur_l34pfr0gg1ng_4b1lit135}
最后更新:
2022年9月18日 16:52:21
Contributors: