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

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

2022-6-5 21:23
11262

代码流程:

  1. 输入16位的字符串
  2. 通过ascii范围的加值获得中间输入,再由奇数位、偶数位的乘数关系,获得keywords1
  3. 从keywords1获得keywords2,再有600000次循环,获得Q
  4. Q值依次和keywords1作商,获得finalkeys

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

  1. Finalkey[0]和Finalkey[7]的数值满足:
    Finalkey[0]==3.828458696865581e+47;
    Finalkey[7]== 4.248062979398713e+47
  2. Finalkey[1-6]相关的两个Mod1和Mod2,满足:
    Mode1==30413574359725275612744778689984;
    Mode2== 49715060849837149374468109364128

对于判定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的数值。
图片描述
图片描述
获得

1
2
3
4
5
6
7
8
m1:14109109473780244 m2:11453778324758052
m2:2655331149022192
 
m1:14109109473780244
m3: 6827218673007356
m3: 7281890800772888

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


[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

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