[VolgaCTF 2017 Teaser] Zippy 2 writeup
Задание: zippy2.zip
Немного измененное Zippy. В нем немного отличается функция расшифровки
def decrypt(data, key, iv):
flag = []
for i in range(len(data)):
flag.append(sbox[iv ^ key[i]] ^ data[i])
iv = data[i]
return ''.join(map(chr, flag))
А также элементы криптотекста и sbox
теперь 8 битные, что усложняет процесс уменьшения алфавита. Даже если откинуть VolgaCTF{}
получаем немаленький набор
[[32, 37, 39, 58, 72, 83, 107, 110, 119, 122, 126],
[49, 51, 55, 74, 85, 97, 98, 102],
[32, 40, 44, 49, 67, 73, 77, 94],
[40, 41, 42, 45, 57, 64, 85, 86, 91, 94, 96, 100, 118],
[40, 42, 54, 64, 70, 71, 73, 74, 88, 89, 110, 126],
[39, 47, 54, 55, 58, 61, 73, 81, 82, 83, 90, 97, 101, 104, 108],
[39, 60, 61, 65, 71, 91, 95, 115, 124, 126],
[41, 52, 55, 58, 63, 67, 81, 84, 86, 88, 90, 108, 117, 126],
[60, 66, 69, 73, 87, 94, 106, 124, 126],
[44, 57, 58, 64, 88, 89, 105, 110, 118, 124],
[42, 46, 65, 74, 90, 96, 98, 99, 103, 125],
[39, 53, 56, 61, 63, 78, 99, 103, 106, 115, 118, 124],
[39, 60, 77, 79, 85, 97, 101, 110, 118, 122],
[37, 55, 59, 65, 68, 82, 112, 113, 122],
[34, 47, 61, 73, 89, 110, 112, 113, 119, 125, 126],
[39, 42, 54, 59, 71, 77, 78, 79, 86, 118, 119, 122],
[43, 47, 72, 74, 75, 120, 122],
[32, 41, 51, 61, 70, 76, 85, 90, 91, 102, 106, 115],
[35, 39, 60, 69, 73, 85, 87, 100, 106],
[44, 53, 55, 56, 85, 96, 108, 119, 126],
[40, 41, 45, 54, 57, 60, 66, 73, 75, 78, 85, 86, 109, 112, 114, 117],
[47, 52, 70, 89, 91, 92, 96, 105, 114, 118, 121, 125, 126],
[48, 49, 55, 74, 85, 97, 98, 108],
[45, 49, 56, 61, 63, 81, 88, 92, 99, 104, 106, 107, 112],
[34, 38, 46, 52, 53, 60, 72, 78, 82, 86, 119, 122],
[42, 45, 55, 63, 65, 72, 103, 111, 121],
[43, 47, 54, 73, 79, 98, 101, 102, 103, 106, 118, 120],
[43, 67, 69, 71, 117, 118, 119],
[36, 40, 74, 78, 81, 109, 110, 113],
[33, 42, 53, 61, 62, 66, 81, 87, 104, 106, 120],
[60, 92, 101, 105, 119, 126],
[35, 44, 50, 51, 55, 58, 67, 71, 79, 81, 84, 88, 104, 106, 111, 119, 120],
[36, 37, 42, 73, 76, 83, 86, 87, 116],
[32, 40, 45, 54, 57, 65, 79, 83, 91, 92, 94, 95, 102, 118],
[40, 43, 61, 74, 85, 87, 101, 109, 120, 124],
[32, 35, 43, 61, 71],
[48, 60, 61, 74, 89, 92, 98, 104, 123],
[43, 48, 55, 57, 60, 62, 65, 82, 87, 92, 95, 98, 104],
[35, 38, 41, 50, 54, 63, 66, 70, 73, 74, 84, 93, 96, 104, 106, 109, 114],
[39, 72, 74, 77, 85, 90, 97, 101, 109, 115, 118, 122],
[44, 57, 58, 59, 60, 74, 75, 95, 118],
[56, 58, 61, 63, 73, 82, 96, 100, 101, 113, 116, 123],
[59, 60, 61, 62, 76, 88, 90, 99, 100, 120],
[33, 44, 52, 55, 73, 75, 84, 86, 96, 99, 100, 113, 121],
[37, 51, 54, 58, 59, 67, 73, 78, 82, 83, 88, 93, 102, 107, 119, 122],
[35, 46, 60, 72, 88, 111, 112, 113, 118, 124],
[36, 41, 53, 56, 68, 74, 76, 77, 85, 116, 117, 121, 124],
[39, 42, 56, 61, 76, 92, 114, 116, 117, 120, 123],
[33, 41, 48, 49, 59, 60, 79, 84, 87, 99, 110],
[33, 38, 42, 44, 50, 55, 60, 61, 84, 85, 89, 92, 100, 109, 117],
[56, 64, 65, 67, 73, 87, 89, 102, 104, 105],
[36, 50, 62, 114, 118],
[49, 64, 66, 71, 74, 88, 96, 99, 104, 108, 119, 126],
[46, 47, 48, 49, 55, 61, 62, 65, 93, 95, 98, 111, 125],
[33, 34, 35, 38, 46, 50, 60, 75, 79, 80, 93, 94, 107, 111, 114],
[35, 43, 53, 55, 57, 59, 84, 87, 90, 91, 93, 99, 115],
[32, 37, 39, 40, 52, 58, 66, 73, 75, 77, 83, 86, 88, 91, 105, 116]]
Потому решил посмотреть какой ключ выдаст на заведомо известной части флага, а именно на VolgaCTF{
[118, 74, 61, 60, 55, 73, 118, 74, 61]
И был приятно удивлен, после 6 символа ключ начал повторятся. Я даже не стал заморачиватся со скриптом, а просто запустил задание с ключом
$ ./zippy2 'vJ=<7I'
VolgaCTF{yep_this__not_needed_silly_bruteforce_to_solve__this_task}