Misay's blog

Back

TL; DR#

在期末周的间隙打了 SekaiCTF, 作为Leo/need吃 看到 STAGE OF SEKAI 的时候还是很惊喜的)

oneline6ryp7o#

how hard can six seven be

assert __import__('re').match('SEKAI{[67]{67}}$',flag:=input()) and not int.from_bytes(flag.encode())%~(6+~7)**67
python

模数

~{(6+~7)**67} = 2^67 - 1
python

令最小为 "SEKAI{" + "6" * 67 + "}"

从 base 往上搜索,从低位往上每轮从 6 加到 7 ,然后算增量能否得出即可

orbital-strike#

An orbital strike is an attack directed at a planetary surface from a weapon system stationed in space (orbit).

双重 LCG 第一眼想到了今年 karmalCTF 的 RBG 系列

先用参数 a, b, p, B 生成 moons ,再在模 P 下用一次 LCG 混淆 moons,得到外层 orbit 要求恢复 内层的planets 种子 X,解密 FLAG


代数结构梳理#

  • moons
mi≡ami−1+bmod  pm_i\equiv am_{i−1}+b\mod p

LCG 增量层是常数 b

  • planets
xi≡Axi−1+mimod  Px_i\equiv Ax_{i-1}+m_i\mod P

我们知道 [x1,⋯ ,x14][x_1,\cdots,x_{14}] 要去恢复 x0x_0

变量太多,先消元

Mi=mi−mi−1→Mi≡aMi−1mod  pM_i=m_i-m_{i-1}\to M_i\equiv aM_{i-1}\mod p

Di≡xi−xi−1→Di≡ADi−1+Mimod  PD_i\equiv x_i-x_{i-1}\to D_i\equiv AD_{i-1}+M_i \mod P

syzygy#

结合这里的变量命名和线性系统关系,找到了如下的一个处理思路

syzygy定理是什么 ↗

化用本题中,这里模 p P 下的线性关系可以如此整理:先进行差分,再

H=[D0D1⋯D10D1D2⋯D11D2D3⋯D12]H=\begin{bmatrix}D_0 & D_1 & \cdots & D_{10}\\ D_1 & D_2 & \cdots & D_{11}\\ D_2 & D_3 & \cdots & D_{12}\end{bmatrix}

找r=(r0,r1,…,r10)→Hr=0 r=(r_0,r_1,\dots,r_{10}) \to Hr=0

那么满足r0D0+r1D1+⋯+r10D10=0r0D1+r1D2+⋯+r10D11=0r0D2+r1D3+⋯+r10D12=0r_0D_0+r_1D_1+\cdots+r_{10}D_{10}=0\quad r_0D_1+r_1D_2+\cdots+r_{10}D_{11}=0 \quad r_0D_2+r_1D_3+\cdots+r_{10}D_{12}=0

带入

∑riMi+1=∑ri(Di+1−ADi)=0mod  P\sum r_iM_{i+1}=\sum r_i(D_{i+1}-AD_{i})=0\mod P

而 Mi+1≡aMi→Mi≡aiM0mod  pM_{i+1}\equiv aM_{i}\to M_i\equiv a^iM_0 \mod p 而一般 M0M_0 不会整除 p ,那么我们针对规约的 rir_i,得到了一组

∑rjaj≡0mod  p\sum r_{j}a^{j}\equiv 0 \mod p 从而建立一个 fr(T)=∑rjTjf_{r}(T)=\sum r_{j}T^{j} 多取一组结果做 Resultant ,GCD 即可恢复 p, 恢复 p 后再对多项式做一个 GCD 即可恢复公共根 a ;

此时我们可以精确地针对 MiM_i 进行建模了


后续先考虑一个一个类似的思路,我们用 syzygy 恢复内层后,再考虑外层的差分 Si=Di−Di−1S_i=D_i-D_{i-1} 再 Si=ASi−1+Limod  P→Li=Mi−Mi−1mod  pS_i=AS_{i-1}+L_i\mod P\to L_i=M_i-M_{i-1} \mod p

这里就发现,LiL_i相关的差分,还涉及到模 p 下的关系,Lift 处理比较麻烦。

回看我们已有的数据,rir_i 获取了相关 MiM_i的信息,又因为 Mi≡aMi+1mod  pM_{i}\equiv aM_{i+1}\mod p

展开 Mi+1−aMi−pni=0M_{i+1}-aM_i-pn_i=0,针对 v=(M0,M1,…,M12,n0,n1,…,n11)v=(M_0,M_1,\dots,M_{12},n_0,n_1,\dots,n_{11}) 利用方程组∑jrjMj+1=0\sum_j r_jM_{j+1}=0

∑jrjMj+2=0\sum_j r_jM_{j+2}=0

Mi+1−aMi−pni=0M_{i+1}-aM_i-pn_i=0 进行规约,即可简单地恢复 MiM_i,再一个 Ri=Di−MiR_i=D_i-M_i 那么就 RiDj−1−RjDi−1≡0(modP)R_iD_{j-1}-R_jD_{i-1}\equiv0\pmod P 恢复 P, 求逆元恢复 A, 然后逆推 X 即可

iihash#

Fast hash is good hash. A secret seed makes it even better, right?

##needle-in-a-multivariate-sekai

*apbq-rsa-iv#

SekaiCTF2026
https://www.zt2misay2.cn/blog/sekaictf2026
Author Misay
Published at 2026年7月1日