LINUX.ORG.RU

История изменений

Исправление 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   

Какой алгоритм используется? Извините, если туплю, но у меня небольшой опыт работы с бинарниками, а в шифровании вообще не разбираюсь.