Crypto
Wilson
由于rsa的私钥p和q取的很近所以费马分解得到两因子,威尔逊定理为:
其中p为素数。之前遇到的题目,通常把flag放在modp下求解即可,示例;这题经过pad 明文的比特数已经超过p了,所以我们在modp下求出来的其实是flag模p后的结果,也就是低位部分;因为copper没办法做所以考虑在modq下再求一次,用crt处理,具体一点:已知$m=flag\cdot(p-1)!modn$,如果给m依次乘上$p,p+1,…q-1$,有$m_1=flag\cdot(q-1)!modn$,这时把$m_1modq$得到$flag\cdot(-1)\equiv m_1modq$,所以这里求逆就行了,最后来个crt即可。
1 | from Crypto.Util.number import * |
Lost_N
这题原本作为一道想要考查多个知识点的套题还是可以的,但题目脚本和output没对上,属于是很容易误导选手了…
首先是第二部分要去求last_n,根据欧拉定理把s对n求逆得到$(900\cdot p-218\cdot q) modn$,显而易见可以把模去掉,所以联立$p\cdot q=n$建立一元二次方程解出两因子;第一部分比较显然是共私钥指数攻击,用五组解出来的d并不满足题目要求的435比特,看了下output里有两组非常离谱的冗余的e和c,于是把last_n和这俩组合一下作为第六组数据造格,求解出的d刚好为435比特,解出了flag。这里为什么觉得离谱,是因为题目脚本写的是循环输出五次n e c,结果最后需要用六组去造格,也是逆天了。
1 | from gmpy2 import * |
1 | from Crypto.Util.number import * |
Misc
byteMusic
图片的lsb有东西,分析hex可以在文件尾端看到一个passwd,猜测是cloacked-pixel隐写,恢复之后得一串指令:
1 | a=64E3,80*(128<t*[[6.5,7.3,8.7,7.3,11,0,0,11,0,0,10,0,0,0,0,0,6.5,7.3,8.2,6.5,10,0,0,10,0,0,8.7,0,0,8.2,7.3,0,6.5,7.3,8.7,7.3,8.7,0,0,0,10,0,8.2,0,0,7.3,6.5,0,0,0,6.5,0,10,0,0,0,8.7,0,0,0,0,0,0,0][int(64*t/a%64)]][int(t/a)%1]%255)*(1-64*t%a/a) |
google直接搜指令可以得到bytebeat这个项目,把指令放进去听一下可以确定是《Never Gonna Give You Up》
,做一下md5即可。