Created
July 29, 2018 10:03
-
-
Save minhtt159/fb76e7a6977450ab759f7a7b81243176 to your computer and use it in GitHub Desktop.
ISITDTU CTF - XOR
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
enc_flag = '1d14273b1c27274b1f10273b05380c295f5f0b03015e301b1b5a293d063c62333e383a20213439162e0037243a72731c22311c2d261727172d5c050b131c433113706b6047556b6b6b6b5f72045c371727173c2b1602503c3c0d3702241f6a78247b253d7a393f143e3224321b1d14090c03185e437a7a607b52566c6c5b6c034047'.decode('hex') | |
# print len(enc_flag) | |
key = [i for i in range(10)] | |
flag = [chr(i) for i in range(len(enc_flag))] | |
m = [] | |
for a in range(len(key)): | |
i = a | |
for b in range(len(flag)/len(key)): | |
if b % 2 != 0: | |
m.append(ord(flag[i])) | |
else: | |
m.append(ord(flag[i+len(key)-(a+1+a)])) | |
i += len(key) | |
# print m | |
block_length = len(flag) / len(key) | |
enc_flag = [enc_flag[i*block_length:(i+1)*block_length] for i in range(len(key))] | |
def repeatXOR(string, char): | |
return ''.join(chr(ord(x)^ord(y)) for (x,y) in zip(string,char*len(string))) | |
def descramble(cipher, positionMap): | |
plain = [0 for i in range(130)] | |
for i in range(len(cipher)): | |
plain[positionMap[i]] = cipher[i] | |
return ''.join(plain) | |
alpha = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!#$%*+,._{}" | |
key = [] | |
for block in enc_flag: | |
key_i = [] | |
for char in alpha: | |
allASCII = True | |
for index in block: | |
if chr(ord(index)^ord(char)) not in alpha: | |
allASCII = False | |
break | |
if allASCII: | |
key_i.append(repeatXOR(block, char)) | |
key.append(key_i) | |
for key_i in key: | |
print key_i | |
import itertools | |
for combo in itertools.product(*key): | |
plain_text = ''.join(combo) | |
plain_text = descramble(plain_text,m) | |
if 'ISITDTU{' in plain_text: | |
print plain_text | |
# ISITDTU{Welcome_to_ISITDTUCTF_C0ntest!_Hav3_a_g00d_day._Hope_y0u_w1ll_3nj0y_and_hav3_a_h1gh_rank_1n_0ur_F1rst_Ctf_C0nt3st._Thank5} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python | |
# -*- coding: utf-8 -*- | |
from flag import flag,key | |
assert len(key) == 10 | |
if len(flag) % len(key) != 0: | |
n = len(key) - len(flag) % len(key) | |
for i in range(n): | |
flag += " " | |
m = [] | |
for a in range(len(key)): | |
i = a | |
for b in range(len(flag)/len(key)): | |
if b % 2 != 0: | |
m.append(ord(flag[i]) ^ ord(key[a])) | |
else: | |
m.append(ord(flag[i+len(key)-(a+1+a)])^ ord(key[a])) | |
i += len(key) | |
enc_flag = "" | |
for j in range(len(m)): | |
enc_flag += "%02x" % m[j] | |
print enc_flag | |
#enc_flag = 1d14273b1c27274b1f10273b05380c295f5f0b03015e301b1b5a293d063c62333e383a20213439162e0037243a72731c22311c2d261727172d5c050b131c433113706b6047556b6b6b6b5f72045c371727173c2b1602503c3c0d3702241f6a78247b253d7a393f143e3224321b1d14090c03185e437a7a607b52566c6c5b6c034047 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment