2018极客大挑战-not reverse
链接: https://pan.baidu.com/s/1RPx75PQZGAcW6tE9Y8icDg 提取码: j4wv
下载下来的压缩包里有两个文件
fez.log
2741929a48889e2fcf64bcff0fbaf14fa3bfdd451aad6044163eb4035512372bcd87c8a045bc6c2f2b3800c4e4620c46fd0d7eb4e0e6
c3e06d3224f97d88c3d0c10e4e5ad9322362756f71e2c0ff3c7e432cca62a84fe26314d1379de4c784a352e22631105e9c30cdacfed8
a8dc0c5a4647a52e0ce122233e03844482f464064a152333c2080333eed2211ce450c2a20af243d4035001957c89632b8efa0b0fe958
fez.py
import os
def xor(a,b):
assert len(a)==len(b)
c=""
for i in range(len(a)):
c+=chr(ord(a[i])^ord(b[i]))
return c
def f(x,k): #这个函数好像没啥用
return xor(xor(x,k),7)
def round(M,K):
L=M[0:27]
R=M[27:54]
new_l=R
new_r=xor(xor(R,L),K)
return new_l+new_r
def fez(m,K):
for i in K:
m=round(m,i)
return m
K=[]
for i in range(7):
K.append(os.urandom(27))
m=open("flag","rb").read()
assert len(m)<54
m+=os.urandom(54-len(m))
test=os.urandom(54)
print test.encode("hex")
print fez(test,K).encode("hex")
print fez(m,K).encode("hex")
学好数学很重要
学好数学很重要
学好数学很重要
补充一下异或的基础知识
a^b=b^a
a^b^b=a
思路
2741929a48889e2fcf64bcff0fbaf14fa3bfdd451aad6044163eb4035512372bcd87c8a045bc6c2f2b3800c4e4620c46fd0d7eb4e0e6
c3e06d3224f97d88c3d0c10e4e5ad9322362756f71e2c0ff3c7e432cca62a84fe26314d1379de4c784a352e22631105e9c30cdacfed8
a8dc0c5a4647a52e0ce122233e03844482f464064a152333c2080333eed2211ce450c2a20af243d4035001957c89632b8efa0b0fe958
text11:2741929a48889e2fcf64bcff0fbaf14fa3bfdd451aad6044163eb4
text12:035512372bcd87c8a045bc6c2f2b3800c4e4620c46fd0d7eb4e0e6
text21:c3e06d3224f97d88c3d0c10e4e5ad9322362756f71e2c0ff3c7e43
text22:2cca62a84fe26314d1379de4c784a352e22631105e9c30cdacfed8
text31:a8dc0c5a4647a52e0ce122233e03844482f464064a152333c20803
text32:33eed2211ce450c2a20af243d4035001957c89632b8efa0b0fe958
k2k4k5=text21^text12:
k0k1k2k3k5k6=text22^text11^text12
flag2=text31^k2k4k5
flag1=text32^k0k1k2k3k5k6^flag2
SYC{y0u_sh0uld_just_THINK_this_Is_not_A_reverse}
# -*- coding: cp936 -*-
import os
def xor(a,b):
assert len(a)==len(b)
c=""
for i in range(len(a)):
c+=chr(ord(a[i])^ord(b[i]))
return c
text1='2741929a48889e2fcf64bcff0fbaf14fa3bfdd451aad6044163eb4035512372bcd87c8a045bc6c2f2b3800c4e4620c46fd0d7eb4e0e6'
text2='c3e06d3224f97d88c3d0c10e4e5ad9322362756f71e2c0ff3c7e432cca62a84fe26314d1379de4c784a352e22631105e9c30cdacfed8'
text3='a8dc0c5a4647a52e0ce122233e03844482f464064a152333c2080333eed2211ce450c2a20af243d4035001957c89632b8efa0b0fe958'
text11=text1[0:54]
text12=text1[54:108]
text21=text2[0:54]
text22=text2[54:108]
text31=text3[0:54]
text32=text3[54:108]
print "text11:"
print text11
k2k4k5=xor(text21.decode("hex"),text12.decode("hex"))
print "k2k4k5"
print k2k4k5
flag2=xor(k2k4k5,text31.decode("hex"))
print "flag2:"
print flag2
k0k1k2k3k5k6=xor(xor(text22.decode("hex"),text11.decode("hex")),text12.decode("hex"))
flag1=xor(xor(k0k1k2k3k5k6,flag2),text32.decode("hex"))
print "flag1:"
print flag1
print flag1+flag2