CTF

[SECCON2016]vigenere암호 100p

shnec 2016. 12. 12. 09:32


import hashlib

str="ABCDEFGHIJKLMNOPQRSTUVWXYZ[]"
c="LMIG]RPEDOEEWKJIQIWKJWMNDTSR]TFVUFWYOCBAJBQ"
arr=[[0 for col in range(28)] for row in range(28)]
for i in range(len(str)):
	for j in range(len(str)):
		arr[i][j]=str[(i+j)%28] 

#key="VIGENERE"+"AAAAA"
#p="SECCON["+"ABCD"+"]"
print(c)
hash="f528a6ab914c1ecf856a1d93103948fe"
def brutef(key,c):
        pp=""
        for i in range(len(c)):
                if(i==6):
                        pp+='{'
                        continue
                if(i==42):
                        pp+='}'
                        continue
                for j in range(28):
                        rr=ord(key[i%12])-0x41
                        if(rr==28):
                                rr=27
                        if(arr[rr][j]==c[i]):
                                break
                if(j==27):
                        j=j+1
                pp+=chr(0x41+j)
        h=hashlib.md5(pp.encode()).hexdigest()
        if(h[0]=='f'and h[1]=='5'and h[2]=='2' and h[3]=='8'):
                print(h)
                print(pp)
        if(hash==hashlib.md5(pp.encode()).hexdigest()):
                print(pp)

c="LMIG]RPEDOEEWKJIQIWKJWMNDTSR]TFVUFWYOCBAJBQ"
arr2="ABCDEFGHIJKLMNOPQRSTUVWXYZ[]"
print(arr2)
for i in arr2:
        print(i)
        for j in arr2:
                for k in arr2:
                        for l in arr2:
                                key="VIGENERE"
                                key+=i
                                key+=j
                                key+=k
                                key+=l
                                brutef(key,c)

print("end")