Misay's blog

Back

今年和DAMN的队友看了看题 题量和深度都较去年下降了不少,传统misc也被代替为取证了,给cryptoak掉后就一直在帮pwn手看rw的proxy 可惜最后还是没能拿下 明年继续加油吧

ECDSA#

task.py

要求计算出私钥dd后转md5得到flag

我们来复习下ECDSA的签名思路

r≡xmod  nr\equiv x \mod n s≡k−1(h+r×d)mod  ns\equiv k^{-1}(h+r\times d)\mod n

这里关键在于nonce函数中kk的生成完全是白盒,我们得到kk后,计算k⋅Gk\cdot G就能得到xx 随后结合已有的ss解密 可以得到

d≡r−1(sk−h)mod  nd\equiv r^{-1}(sk-h)\mod n

exp

后面注意验证下即可

ezflag#

逆向题,,

elf ida打开一目了然

输入正确的pwd 程序输出flag 但是实测发现下来输出flag{10632674-1d21后就巨慢 这很反常 我们看看f函数

它涉及一个对i1的循环 i1就是v11 但是我们外面循环也对v11有一个v1 * 8 + i + 64 明显是这里拖慢了

注意到我们计算的其实是fibonacci mod 16的值,经过查询可以得到这段数列的周期是24,那么返回值其实是就很好预测的 我们完全没有必要每次都去穷举这么大一个i

f函数源逻辑

def f(v11) {
	v5 = 0
	v4 = 1
	for i in range(v11) :
		v2 = v4
		v4 = (v5+v4) % 16
		v5 = v2
	return v5
}
py

可以转化为等价的逻辑

def f(v11) {
	v5 = 0
	v4 = 1
	for i in range(v11%24):
		v2 = v4
		v4 = (v5+v4) % 16
		v5 = v2
	return v5
}
py

理论上是可以在这段f函数中修改汇编 直接把循环上界改成i%24 实现瞬间输出flag的 不过作为二进制苦手还是选用古法re了)

我们来看flag是怎么被计算输出的

v11完全已知 这里的函数我们也完全已知 那么v9就是已知的 我们直接打印v9 故而往f里面看返回值

v5是计算的int 没有问题 那么K是什么呢 查看交叉引用 找到了在程序初始化的定义

所以逻辑非常清楚 对于变量v11循环自增 随后调用f计算fibonacci计算v5 查表得到flag 我们静态写一个exp

和输出结果符合

RAS-Nesting-Doll#

src.py

第一个正经的密码题,,

一个基于平滑数的RSA系统 我们主要看get_smooth_prime函数

有

p=2×p1×sp1×⋯×spn×bp1×bp2+1p=2\times p_1\times sp_1\times\cdots\times sp_n \times bp_1\times bp_2 + 1
assert p.is_prime() and p.bit_length() == 1024
py

这里spsp的个数nn可以大致估算为几十个 让p1p_1的比特从513到985+

我们有

p−1=s1×p1p-1=s_1\times p_1

利用平滑数的思路 我们可以轻松的找到2×p1×sp1×⋯×spn×bp1×bp22\times p_1\times sp_1\times\cdots\times sp_n \times bp_1\times bp_2的倍数

设集合PP包含(1∼220)(1\sim2^{20})的所有素数令

k=∏pi    pi∈Pk = \prod p_i\;\;p_i\in P

有

s1∣ks_1|k

所以说 p−1∣k×p1p-1 | k\times p_1

从而我们可以得到k×ϕ(p)k\times \phi(p)

进而得到

ϕ(n)∣k4n1\phi(n) | k^4n_1

也就是说我们拿到了一个ϕ(n)\phi(n)的倍数kϕk\phi 接下来我们来分解nn

参考Miller-Rabin方法

我们的期望是找到一个数xx满足

x2≡1mod  nx^2\equiv 1\mod n

而且

x2≢1    ,    −1mod  nx^2\not\equiv1\;\;,\;\;-1\mod n

那么就可以有x2−1≡0mod  nx^2-1\equiv0\mod n

通过gcd(n,x−1)gcd(n,x-1)与gcd(x,n+1)gcd(x,n+1)可以找到一个解

而为什么需要ϕ\phi的倍数呢 我们由欧拉定理不难得到

xϕ≡1mod  nx^{\phi}\equiv1\mod n

有了倍数 那么

xkϕ≡1mod  nx^{k\phi}\equiv1 \mod n

令

K=kϕ=2t×mK=k\phi=2^t\times m

在模nn下 我们分析如下平方链

am→a2m→a4m→⋯→a2t×ma^m\rightarrow a^{2m}\rightarrow a^{4m}\rightarrow\cdots\rightarrow a^{2^t\times m}

为什么要用这根平方链?因为我们知道终点一定是aK≡1mod  na^{K}\equiv 1\mod n

在中途一定有平方到1的情况 那么我们只要关注 是否前一个项不为±1\pm1?如果是 我们就找到了一个自己需要的解 否则我们换一根链子就行 因为平方到1后面肯定就不变化了

我们分解nn后再看

p=s×p1+1p=s\times p_1 + 1

就可以用光滑数的方法直接给p1p_1搓下来 然后转到n1n_1 解密rsa exp

CISCN2026
https://www.zt2misay2.cn/blog/ciscn2026
Author Misay
Published at 2025年12月29日