Misay's blog

Back

偷偷摸一下


basic#

签到

这里直接用的素数nn,直接计算它的欧拉函数解密就可以了 exp

from Crypto.Util.number import inverse, long_to_bytes  

n = 150624321883406825203208223877379141248303098639178939246561016555984711088281599451642401036059677788491845392145185508483430243280649179231349888108649766320961095732400297052274003269230704890949682836396267905946735114062399402918261536249386889450952744142006299684134049634061774475077472062182860181893

e = 65537

c = 22100249806368901850308057097325161014161983862106732664802709096245890583327581696071722502983688651296445646479399181285406901089342035005663657920475988887735917901540796773387868189853248394801754486142362158369380296905537947192318600838652772655597241004568815762683630267295160272813021037399506007505

phi = n-1

print(gcd(phi,e))

print(long_to_bytes(pow(c, inverse(e, phi), n)))
# LitCTF{ee2c30dfe684f13a6e6c07b9ec90cc2c}
python

LitCTF{ee2c30dfe684f13a6e6c07b9ec90cc2c}

ez_math#

基于矩阵的RSA,同样的方式求解即可

exp

LitCTF{13dd217e-9a67-4093-8a1b-d2592c45ba82}

math#

题目给了一个noisenoise,记为hh满足

hint−n=h(p+q)+hhint-n=h(p+q)+h

,我们直接计算hint−nhint-n之后,显然这个hh是小因子,直接丢factordb 可以算出来,然后就是常规的p,qp,q解方程了,exp

LitCTF{db6f52b9265971910b306754b9df8b76}

baby#

格子题

已知

t≡  md  mod  gt\equiv\;md\;mod\;g

这里mm位数是比较大的,我们考虑打格子

(m,k)(1d∗s0g∗s)=(m,t∗s)(m,k)\begin{pmatrix}1&d*s\\0&g*s\end{pmatrix}=(m,t*s)

再用Hermite定理算一下两边的大小,ss取22002^{200}即可规约出来

LitCTF{56008a819331c9f3608a718327b7e6ce}

* leak#

不太常规的RSAdpd_{p}泄露

参考这篇博客RSA dp泄漏攻击 - vconlln - 博客园 (cnblogs.com) ↗ 因为

dp≡  1  mod  p−1d_{p}\equiv\;1\;mod\;p-1

所以

dp−1=k(p−1)d_{p}-1=k(p-1)

也就是

dp+k−1=kpd_{p}+k-1=kp

即

dp+k−1≡  0  mod  pd_{p}+k-1\equiv\;0\;mod\;p

从而

dp+k−1≡  0  mod  nd_{p}+k-1\equiv\;0\;mod\;n

又知道dpd_{p}高位,所以

(hint<<180+x)+k−1≡  0  mod  n(hint<<180+x)+k-1\equiv\;0\;mod\;n

这里和上述过程相比,因为ee太大,无法按照遍历kk的思路来求解这个方程,在此感谢Ramoor师傅 ↗的思路,把kk当为一个未知变量来解,使用二元coppersmith的思路,恰好这里x,kx,k的大小都小于n14n^{\frac{1}{4}}, 解出了dpd_{p}之后,我们不难得到

aedp≡  a1+k(p−1)  ≡  a∗(ap−1)k  ≡  a  mod  pa^{ed_{p}}\equiv\;a^{1+k(p-1)}\;\equiv\;a*(a^{p-1})^k\;\equiv\;a\;mod\;p

也就是

aedp−a  ≡0  mod  pa^{ed_{p}}-a\;\equiv0\;mod\;p

又考虑到 p  ∣  np\;|\;n 那么很容易得到

p=gcd(n,aedp−a)p=gcd(n,a^{ed_{p}}-a)

exp如下

* new_bag#

题面

随机生成八个字符,套上LitCTF{...}的壳子,转二进制,做一个子集和问题 这里你直接造127位的格子打不了的,我们可以计算背包的密度,如下公式

ρ  =  len(bag)log2(max(bag))\rho\;=\;\frac{len(bag)}{log_{2}(max(bag))}

稍微计算就能知道127位的背包,它的密度是 0.992194太大了,算不了一点 但我们实际只用求中间的八个字符,也就是说前面的56个,和最后的8个我们都不用管,我们计算一下目标背包的密度

secret = pubkey[56:len(pubkey) - 8]

print(len(secret))

result = len(secret) / max(secret).log(2)

print(round(result, 6))

# 0.492259
python

这个密度就比较小,我们能成功构造格子来打了,参考博客其他加密算法 | Lazzaro (lazzzaro.github.io) ↗ exp如下

LitCTF{Am3xItsT} 很不错的一次参赛体验

感谢各位师傅,一次宝贵的练手机会!

LitCTF2025
https://www.zt2misay2.cn/blog/litctf2025
Author Misay
Published at 2025年5月25日