首页
社区
课程
招聘
[原创]KCTF2022春季赛Crypto虫洞末世WP
发表于: 2022-6-5 21:23 12229

[原创]KCTF2022春季赛Crypto虫洞末世WP

2022-6-5 21:23
12229

代码流程:

然后是关键点,finalkeys要满足关系判定:

对于判定1:
Finalkey[0] = Q/keywords1[0] Finalkey[7]=Q/keywords1[7]
Keywords1[7] = (Finalkey[0]/ Finalkey[7])*keyswords1[0],应该是个整数。
穷举keywords1[0]的数值,保存结果。搜索结果,只有一个满足。
图片描述
key0 = 9,258,496108,对应208,214,即输入的字符开始的两位为“lr”。

对应的key7为8343984,穷举获得的两个中间输入197,215,即序列号的最后两位为“as”。
Key7 = 8343984

对于判定2:
记录一个失败尝试,知道keywords1[0]和rememberkey[0]可求Q,600000次循环结束的条件,是一个keywords1中的元素可以整除Q。搜索失败了,意识到python处理的精度有限。

分析知
mode1==mode3=keywords1[6]/keywords1[1]
mode2= keywords1[5]/ keywords1[3]
mode3= keywords1[4]/ keywords1[2]
remembermode[0]和remembermode[1]最大公约数32,则mode1不是三者中最小的。
可能的情况:
1.
(m1-m2)m2=rm0
(m1-m3)
m3=rm1
2.
(m1-m2)m2=rm0
(m3-m1)
m1=rm1
3.
(m2-m1)m1=rm0
(m1-m3)
m3=rm1

依次尝试三种情况,因为python的除法精度不够,尽量多用乘法,穷举rm0的因数的组合遍历rm0的所有除数q,有(rm0+q**2)%q==0,获得m1的范围,再同理穷举rm1,获得m1的另一个范围,两个范围内取交集,为m1的数值。
图片描述
图片描述
获得

继续穷举,穷举m1获得k6,k1,
K6 = 11289411 k1 = 8001505,
同理穷举m2,获得k5和k3
K5= 11745025 k3=10254280
穷举m3,获得k4,k2
K4=7811040 k2=11441028
继续穷举中间输入,获得原始输入,
获得最终的flag。
lrY1314cXy2920as

 
 
 
 
m1:14109109473780244 m2:11453778324758052
m2:2655331149022192
 
m1:14109109473780244
m3: 6827218673007356
m3: 7281890800772888
m1:14109109473780244 m2:11453778324758052

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

最后于 2022-6-6 02:38 被苹果好吃的编辑 ,原因: 补充内容
收藏
免费 5
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//