Взломать шифрование типа XOR с помощью всего известного текста от вируса

Меня поразила программа-вымогатель, которая шифрует первые 512 байт в верхней части файла и помещает их в конец. Глядя на зашифрованный текст, кажется, что это какой-то тип шифра XOR. Я знаю весь простой текст одного из зашифрованных файлов, поэтому теоретически я решил, что смогу обработать его, чтобы получить ключ для расшифровки остальных моих файлов. Что ж, мне очень тяжело с этим, потому что я не понимаю, как создатель это сделал на самом деле. Я думаю, он воспользуется двоичным читателем, чтобы прочитать первые 512 байтов в массив, выполнить XOR и заменить его. Но означает ли это, что он произвел XOR в HEX? или десятичный? Я очень запутался на этом этапе, но я считаю, что просто что-то упускаю.

Я пробовал Xor Tool с python, и все, что он пытается взломать, выглядит бессмысленным. Я также пробовал сценарий Python под названием Unxor, которому вы передаете известный простой текст, но файл дампа, который он выводит, всегда пустой.

Хороший дамп файла заголовка: Good-Header.bin

Дамп зашифрованного файла заголовка: Enc-Header.bin

Возможно, это не лучший пример файла, чтобы увидеть шаблон XOR, но это единственный файл, который у меня есть, который также имеет исходный заголовок 100% до шифрования. В других заголовках, где есть больше изменений, зашифрованный заголовок изменяется вместе с ним.

Есть какие-нибудь советы по поводу метода, который я должен попробовать, или приложения, которое я должен использовать, чтобы попробовать и дальше? Большое спасибо за Вашу помощь!

P.S Stackoverflow кричал на меня, когда я пытался опубликовать 4 ссылки, потому что я такой новый, поэтому, если вы предпочитаете видеть шестнадцатеричные дампы на pastebin, чем загружать файлы заголовков, пожалуйста, дайте мне нет. Файлы никоим образом не являются вредоносными и представляют собой только извлеченные 512 байт, а не целый файл.


person user3546043    schedule 17.04.2014    source источник
comment
Я создал для вас общий ответ, чтобы вы лучше поняли предмет. Из-за низкого шанса на успех и того факта, что результат будет применим только к вам, маловероятно, что кто-то будет делать расшифровку за вас.   -  person Maarten Bodewes    schedule 18.04.2014
comment
Нет шаблона xor, который можно было бы увидеть. Если всегда есть другой поток, который использовался для шифрования заголовков файлов, он считается нерушимым, если, например, потоки не связаны таким же образом. en.wikipedia.org/wiki/One-time_pad   -  person Luka Rahne    schedule 18.04.2014
comment
Owlstead, спасибо за ответ :) и никто никого не просил делать за меня расшифровку, как вы можете видеть выше, я попросил совета :)   -  person user3546043    schedule 18.04.2014


Ответы (2)


Чтобы восстановить ключевой поток XOR байтов открытого текста с байтами шифротекста. Сделайте это с двумя разными файлами, чтобы вы могли видеть, использует ли программа-вымогатель один и тот же поток ключей или другой поток ключей для каждого файла.

Если он использует тот же ключевой поток (что маловероятно), ваша проблема решена. Если потоки ключей разные, то самое простое решение - восстановить затронутые файлы из резервных копий. Вы ведь хранили резервные копии, не так ли? В качестве альтернативы исследуйте конкретную инфекцию, которую вы получили, и посмотрите, сломал ли кто-нибудь этот конкретный вариант, чтобы вы могли получить ключ (и), который они использовали, и, следовательно, восстановить необходимые потоки ключей.

Если у вас много денег, вам может помочь фирма по восстановлению данных, но она, безусловно, будет взимать плату.

person rossum    schedule 17.04.2014
comment
Что ж, я могу сказать, что для каждого файла используется один и тот же ключ, потому что в двух разных файлах pdf зашифрованный маркер% PDF выглядит точно так же. Знаете ли вы какой-либо код .net, который помог бы мне xor двоичный файл с известным текстом? Я нашел несколько, но все они добавляют в функцию дополнительные вещи. Спасибо - person user3546043; 18.04.2014
comment
Вы не выполняете XOR с текстом, вы выполняете XOR с двоичным представлением текста. Фактически вы читаете файл как байты данных, а не как текст. Считайте его байтом [], а не строкой. Вы выполняете XOR двух байтов [] друг с другом, чтобы получить третий байт [], ключевой поток. - person rossum; 18.04.2014
comment
@ user3546043, один и тот же [блок] открытого текста всегда будет приводить к одному и тому же [блоку] зашифрованного текста даже с сильным симметричным блочным шифром, - при условии, что шифр работает в режиме электронной кодовой книги (ECB), т.е. е. без вектора инициализации. Так что ваше наблюдение практически ничего не доказывает. - person Anton Samsonov; 18.04.2014
comment
Так что, думаю, сегодня я совершил прорыв (может быть?). Поэтому я последовал совету Россум и скомпилировал первый байт зашифрованного файла с первым байтом исходного файла. Затем я смог взять байт результата и Xor'ed его на первом байте нескольких зашифрованных файлов, и он всегда выдавал первую букву маркера для этого файла. Но я помню, как человек, с которым я ранее тестировал, сказал, что следующий байт имеет отношение к последнему (я думаю, CFB?), Поэтому я не могу просто выполнить XOR, как первый? - person user3546043; 18.04.2014
comment
@ user3546043, блочные шифры работают с блоками, а не с байтами или битами. «Блок» - это, например, последовательность из 64 бит, которая может быть разделена на пару 32-битных «конечностей». Шифр Фейстеля возмущает конечности, смешивая их с несколькими «блоками подстановки» и «круглым подключом» - до нескольких десятков раундов на один блок. Так что это не так просто, как c = p ^ k вы ожидали. Даже с 8-битным ключом, таким как «A», вывод будет выглядеть совершенно случайным. - person Anton Samsonov; 18.04.2014
comment
Хорошо, поэтому, несмотря на то, что мы можем вернуть первый байт каждого зашифрованного файла, впереди нас ждет нечто гораздо более сложное, как вы говорите - person user3546043; 18.04.2014

Практическое правило отличить приличный шифр от игрушечного шифра - это зашифровать сильно сжимаемый файл и попытаться сжать его в зашифрованной форме: глупый шифр создаст файл с уровнем энтропии, аналогичным исходному, поэтому зашифрованный файл будет сжиматься так же, как и исходный; с другой стороны, хороший шифр (даже без вектора инициализации) создаст файл, который будет выглядеть как случайный мусор и, следовательно, не будет сжиматься вообще.

Когда я сжал ваш Enc-Header.bin размером 512 байт с помощью PKZIP, на выходе также было 512 байт, поэтому шифр не такой тупой, как вы ожидали - неудача. (Но это не значит, что у зловреда вообще нет слабых мест.)

person Anton Samsonov    schedule 18.04.2014
comment
Я этого не знала, спасибо за эту полезную информацию! - person user3546043; 18.04.2014