Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from itertools import permutations, product
- from Crypto.Util.number import bytes_to_long as b2l
- FLAG = open('flag.txt', 'r').read().strip().encode()
- class LFSR():
- def __init__(self, iv):
- self.state = [int(c) for c in iv]
- # self.state = self.iv
- def shift(self):
- s = self.state
- newbit = s[15] ^ s[13] ^ s[12] ^ s[10] # ^ s[0]
- s.pop()
- self.state = [newbit] + s
- if __name__ == "__main__":
- arr = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c',
- 'd', 'e', 'f', 'l', 'g', '{', '}']
- r = 2
- chars = [f'1000110001010111', '1111001000000010','1110110010100010','0111111111011101','1000010111110110','0011111000100000','0100001000010110','0001111000001010','0111000100101010','0101100111100011',
- '0000000101011010','1010111100001010','0010101111110000','1110100111110111','1001101000100010','0010001111000001','0111101111111100','0011110000010101','0110110010001100'
- ]
- flagdec = ''
- mychars = [p for p in product(arr, repeat=2)]
- for i, char in enumerate(chars):
- for flag in mychars:
- strg = ''.join(flag)
- curr = bytes(strg, 'utf-8')
- chars = f'{b2l(curr):016b}'
- assert len(chars) == 16
- lfsr = LFSR(chars)
- for _ in range(31337):
- lfsr.shift()
- finalstate = ''.join([str(c) for c in lfsr.state])
- if (f'{finalstate}' == f'{char}'):
- flagdec = flagdec + strg
- break
- print(flagdec)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement