История изменений
Исправление
anonymizer,
(текущая версия)
:
Спасибо всем за помощь. Я смог декодировать то, что было нужно. Но есть небольшая проблема. Я взялся за новую версию, и там уже другой алгоритм XOR. Опять без компрессии, байт-в-байт, кодировка cp1251. Например, вот что будет, если добавить в комментарий нули:
"0000000000"
b'''\x18\x9f\xf0!\xec\xa0}\xefxq''' (3 кавычки добавлены, чтобы не экранировать при необходимости)
NO ORIG INT1 INT2 OFFSET DELTA
1 "0" 48 24 -24 -24
2 "0" 48 159 111 135
3 "0" 48 240 192 81
4 "0" 48 33 -15 -207
5 "0" 48 236 188 203
6 "0" 48 160 112 -76
7 "0" 48 125 77 -35
8 "0" 48 239 191 114
9 "0" 48 120 72 -119
10 "0" 48 113 65 -7
INT1 обозначает позицию кодируемого символа («0») в кодировке cp1251, INT2 - финальную позицию, OFFSET - смещение, DELTA - разницу между смещениями.
Заметил следующие особенности.
1) Кодирование зависит от длины фрагмента. Один и тот же символ будет закодирован по-разному в зависимости от длины фрагмента.
2) Если фрагменты одинаковой длины и отличаются, например, только конечные байты, то начальные байты будут одинаковы.
3) Обнаружил алгоритм для кодирования разных байтов, стоящих на одинаковых позициях (например, b"abc" -> b"abd"). За редким исключением, там зациклено смещение -2, -2, -2, +6, -2, -2, +10 для всей кодировки cp1251. Проблема в том, что мне надо знать, как меняются байты на разных позициях, т.е., не b"abc" -> b"abd", а, например, от чего зависит смещение b"d" в b"abcd", если смещение a, b и c известно.
Например:
"bbbbbb"
b'''`\xbe\xe4\x81\x19\x97'''
NO ORIG INT1 INT2 OFFSET DELTA
1 "b" 98 96 -2 -2
2 "b" 98 190 92 94
3 "b" 98 228 130 38
4 "b" 98 129 31 -99
5 "b" 98 25 -73 -104
6 "b" 98 151 53 126
"bbcbbb"
b'''`\xbe\xfb\x81\x19\x97'''
NO ORIG INT1 INT2 OFFSET DELTA
1 "b" 98 96 -2 -2
2 "b" 98 190 92 94
3 "c" 99 251 152 60
4 "b" 98 129 31 -121
5 "b" 98 25 -73 -104
6 "b" 98 151 53 126
"abc"
b'''JD%'''
NO ORIG INT1 INT2 OFFSET DELTA
1 "a" 97 74 -23 -23
2 "b" 98 68 -30 -7
3 "c" 99 37 -62 -32
"abcdef"
b'''a\xbeB\xd1f\xb1'''
NO ORIG INT1 INT2 OFFSET DELTA
1 "a" 97 97 0 0
2 "b" 98 190 92 92
3 "c" 99 66 -33 -125
4 "d" 100 209 109 142
5 "e" 101 102 1 -108
6 "f" 102 177 75 74
Какой алгоритм используется? Извините, если туплю, но у меня небольшой опыт работы с бинарниками, а в шифровании вообще не разбираюсь.
Исправление
anonymizer,
:
Спасибо всем за помощь. Я смог декодировать то, что было нужно. Но есть небольшая проблема. Я взялся за новую версию, и там уже другой алгоритм XOR. Опять без компрессии, байт-в-байт, кодировка cp1251. Например, вот что будет, если добавить в комментарий нули:
"0000000000"
b'''\x18\x9f\xf0!\xec\xa0}\xefxq''' (3 кавычки добавлены, чтобы не экранировать при необходимости)
NO ORIG INT1 INT2 OFFSET DELTA
1 "0" 48 24 -24 -24
2 "0" 48 159 111 135
3 "0" 48 240 192 81
4 "0" 48 33 -15 -207
5 "0" 48 236 188 203
6 "0" 48 160 112 -76
7 "0" 48 125 77 -35
8 "0" 48 239 191 114
9 "0" 48 120 72 -119
10 "0" 48 113 65 -7
INT1 обозначает позицию кодируемого символа («0») в кодировке cp1251, INT2 - финальную позицию, OFFSET - смещение, DELTA - разницу между смещениями.
Заметил следующие особенности.
1) Кодирование зависит от длины фрагмента. Один и тот же символ будет закодирован по-разному в зависимости от длины фрагмента.
2) Если фрагменты одинаковой длины и отличаются, например, только конечные байты, то начальные байты будут одинаковы.
Например:
"bbbbbb"
b'''`\xbe\xe4\x81\x19\x97'''
NO ORIG INT1 INT2 OFFSET DELTA
1 "b" 98 96 -2 -2
2 "b" 98 190 92 94
3 "b" 98 228 130 38
4 "b" 98 129 31 -99
5 "b" 98 25 -73 -104
6 "b" 98 151 53 126
"bbcbbb"
b'''`\xbe\xfb\x81\x19\x97'''
NO ORIG INT1 INT2 OFFSET DELTA
1 "b" 98 96 -2 -2
2 "b" 98 190 92 94
3 "c" 99 251 152 60
4 "b" 98 129 31 -121
5 "b" 98 25 -73 -104
6 "b" 98 151 53 126
"abc"
b'''JD%'''
NO ORIG INT1 INT2 OFFSET DELTA
1 "a" 97 74 -23 -23
2 "b" 98 68 -30 -7
3 "c" 99 37 -62 -32
"abcdef"
b'''a\xbeB\xd1f\xb1'''
NO ORIG INT1 INT2 OFFSET DELTA
1 "a" 97 97 0 0
2 "b" 98 190 92 92
3 "c" 99 66 -33 -125
4 "d" 100 209 109 142
5 "e" 101 102 1 -108
6 "f" 102 177 75 74
Какой алгоритм используется? Извините, если туплю, но у меня небольшой опыт работы с бинарниками, а в шифровании вообще не разбираюсь.
Исходная версия
anonymizer,
:
Спасибо всем за помощь. Я смог декодировать то, что было нужно. Но есть небольшая проблема. Я взялся за новую версию, и там уже другой алгоритм XOR. Опять без компрессии, байт-в-байт, кодировка cp1251. Например, вот что будет, если добавить в комментарий нули:
"0000000000"
b'''\x18\x9f\xf0!\xec\xa0}\xefxq'''
NO ORIG INT1 INT2 OFFSET DELTA
1 "0" 48 24 -24 -24
2 "0" 48 159 111 135
3 "0" 48 240 192 81
4 "0" 48 33 -15 -207
5 "0" 48 236 188 203
6 "0" 48 160 112 -76
7 "0" 48 125 77 -35
8 "0" 48 239 191 114
9 "0" 48 120 72 -119
10 "0" 48 113 65 -7
INT1 обозначает позицию кодируемого символа («0») в кодировке cp1251, INT2 - финальную позицию, OFFSET - смещение, DELTA - разницу между смещениями. Заметил следующие особенности. 1) Кодирование зависит от длины фрагмента. Один и тот же символ будет закодирован по-разному в зависимости от длины фрагмента. 2) Если фрагменты одинаковой длины и отличаются, например, только конечные байты, то начальные байты будут одинаковы. Например:
"bbbbbb"
b'''`\xbe\xe4\x81\x19\x97'''
NO ORIG INT1 INT2 OFFSET DELTA
1 "b" 98 96 -2 -2
2 "b" 98 190 92 94
3 "b" 98 228 130 38
4 "b" 98 129 31 -99
5 "b" 98 25 -73 -104
6 "b" 98 151 53 126
"bbcbbb"
b'''`\xbe\xfb\x81\x19\x97'''
NO ORIG INT1 INT2 OFFSET DELTA
1 "b" 98 96 -2 -2
2 "b" 98 190 92 94
3 "c" 99 251 152 60
4 "b" 98 129 31 -121
5 "b" 98 25 -73 -104
6 "b" 98 151 53 126
"abc"
b'''JD%'''
NO ORIG INT1 INT2 OFFSET DELTA
1 "a" 97 74 -23 -23
2 "b" 98 68 -30 -7
3 "c" 99 37 -62 -32
"abcdef"
b'''a\xbeB\xd1f\xb1'''
NO ORIG INT1 INT2 OFFSET DELTA
1 "a" 97 97 0 0
2 "b" 98 190 92 92
3 "c" 99 66 -33 -125
4 "d" 100 209 109 142
5 "e" 101 102 1 -108
6 "f" 102 177 75 74
Какой алгоритм используется? Извините, если туплю, но у меня небольшой опыт работы с бинарниками, а в шифровании вообще не разбираюсь.