-
-
[原创]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
或
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
赞赏
- [原创]KCTF2022春季赛逆向第2题 末日邀请WP 8779
- [原创]KCTF2022春季赛逆向第七题 一触即发WP 8137
- [原创]KCTF2022春季赛Crypto虫洞末世WP 12230
- [原创]第四题飞蛾扑火WP 6237