X-CTF(REVERSE高级) parallel-comparator-200

first_letter是随机生成大于64的数取余26再加97,任何一个大于64的数取余26范围都在0-25,所以first_letter的值在97-122之间


first_letter和arguments数组

其它的加密过程


result

 


generated_string

 


最后的比较

因为first_letter和user_string都是未知的,所以我们爆破求解,输出的flag不仅乱码,还越界了。检查代码,发现first_letter是个固定的值不是数组。

这个first_letter的值要使每一个(first_letter+differences[i])^user_string的值都为0,好绕啊。

手工修改每一次first_letter参与运算的值,试到108时得到了一个像样子的user_string。从97试到108还行吧~~~菜鸟不懂那些大佬怎么知道random()生成的就是108,有了解的希望评论教教我



 
附代码:
 1 differences=[0, 9, -9, -1, 13, -13, -4, -11, -9, -1, -7, 6, -13, 13, 3, 9, -13, -11, 6, -7]
 2 
 3 j=0
 4 
 5 for t in range(10):
 6 
 7           for i in range(65,126):    #user_string
 8 
 9                     out1=108+differences[j]
10 
11                     out2=out1^i          #得到result
12 
13                     #print("out2",out2)
14 
15                     if( out2==0):          #加了一个just_a_string又减去了所以result的值是0才对
16 
17                               j=j+1
18 
19                               print(chr(i),end='')

 

posted @ 2020-02-05 14:25  黑冰Lisa  阅读(414)  评论(0编辑  收藏  举报