标签:有关 int 不可 md5 text 字符替换 team esc 输入
全场0血的crypto,然而我相信大家都是卡在其中一步,就是爆破K2上。
没有拿到flag,这个解法假设K2已知。
题目要求输入三个字符串,m1 m2 m3。看源码可知,m3就是K2,5字节,唯一有关的信息是最后输出的h1_2,是m1根据一个固定算法得到的。最后的输出是一个md5,因此可以爆破K2
然而事实是,在整个比赛周期都没有爆破出来,从alphanumeric到printable,都没有。。。意思就是K2里面还有不可见字符。。。那全场没人做出来也就可以理解了
假设K2已知,那么temp3就是0。
为了让temp2为0,需要type2_1(m1)和type2_2(m2)的结果相同:
process就是第一个字符替换为它与最后一个字符异或后的结果,那么很简单,只要m1和m2最后10字节相同且最后一个字节都是\x00
就可以绕过这一层。
temp1要求type1(m1)和type1(m2)相同,但m1和m2是不同的。这里需要md5碰撞的字符串,网上搜一下就有了。由于K1长度未知,需要填充一个固定长度的K1的后缀(或者说msg的前缀),使得K1加上后缀的长度刚好等于md5的分组长度即64字节,需要64次爆破。
标签:有关 int 不可 md5 text 字符替换 team esc 输入
原文地址:https://www.cnblogs.com/p201721410013/p/12598827.html