Сейчас на форуме: Magister Yoda (+5 невидимых) |
![]() |
eXeL@B —› Основной форум —› xor encryption, криптоанализ. |
Посл.ответ | Сообщение |
|
Создано: 01 мая 2009 00:44 · Поправил: arnix · Личное сообщение · #1 Попросили помочь с задачкой. Пошел-пошел, приостановился ![]() ![]() Итак, что есть: TEST.ENCRYTED - зашифрованный файл (размер 48443 bytes) TEST.ORIG_PART - меленькая часть (начало) из оригинального файла (размер 1272 bytes) Чтобы выяснить что это за шифровка, сначала была написана следующая программа (analyze.c): Code:
Запускаем программу: analyze >analyze.txt и получаем текстовый файли, одного взгляда достаточно, чтобы понять что предположения что это xor-based шифровка верны, вот кусок: Code:
Длина ключа - 4 байта, начальный ключ - 39 30 00 00 Каждым ключем шифруются два блока по 4 байта, потом ключ каким-то образом меняется, и так до тех пор пока есть данные. Нужно понять каким образом меняется ключ. Есть определенные успехи. Самая легкая добыча - 4-й байт, он ++ится через каждые F0 байт. С 4-м байтом разобрались, чтобы помочь себе с остальными 3-я, я написал вторую программу, которая считывает разницу между байтам ключей (назовем Delta). Файл в архиве, analyze2.c. Запускаем - analyze2 >analyze2.txt, вот кусок результата: Code:
Начнем с 3-й колонки (3-й байт ключа), смотрим на дельты и улыбаемя, 3-й байт тоже поддался. А вот первые 2 - полузагадки, почему полу? Потому что закономерность "дельт" между младшими 4-я битам найти можно. В случае первого байта, это один раз B другой раз F, а вторй, почти всегда A, а иногда (то через 13 раз, то через 14 раз) - 9. А старшие 4 бита в случае первого байта - один из этих - 0, 1, 8, 9, в случае второго байта - один из 4, 6, C, E. Но как они получаются? Неужели random? Никакой закономерности не вижу ![]() Я даже не поленился вот что сделал: так как оригинальный файл - исходник C++, была найдена частота использования того или иного символа в исходниках Linux Kernel (хотя там не C++ а C). После чего написана 3-я программа (decryper.c), которая умеет правильно считывать 3-й и 4-й байты ключа, а 1-й и 2-й байты выбирает самый часто используемый из четырех кандидатов. Но полученный "расшифрованный" файл все равно не полностью расшифрован ![]() P.S. Я в crypto не особо бум-бум, так что если не вижу что-то очевидное, сорри ![]() P.S.2 Компилятор C - ![]() ![]() |
|
Создано: 01 мая 2009 00:50 · Поправил: arnix · Личное сообщение · #2 |
|
Создано: 01 мая 2009 03:01 · Личное сообщение · #3 |
|
Создано: 01 мая 2009 03:34 · Личное сообщение · #4 |
|
Создано: 01 мая 2009 07:03 · Личное сообщение · #5 |
|
Создано: 01 мая 2009 07:50 · Поправил: Veliant · Личное сообщение · #6 В первом столбце первый байт: 1 идет 1*1**1**1 8 идет 8**8**8***8 при наложении складываются ну а концовки как ты и сказал чередуются b и f Во втором столбце последовательность первого байта такая(сумма этих последовательностей) 2*2**2*2**2**2*2**2**2*2**2*2**2**2*2**2**2* 44444444444444444444444444444444444444444444 *8*88*88*88*88*88*88*88*88*8*88*88*88*88*88* итого маски такие 2*2**2*2**2**2*2**2** *8*88*88*88*88*88*88*88*88 а 4 везде как видишь у 2 и 8 наблюдается закономерности, а на их стыках появляются 9 во втором байте(а может и по их сумме, когда превышает какое то число) ![]() |
|
Создано: 01 мая 2009 08:15 · Поправил: Модератор · Личное сообщение · #7 |
|
Создано: 01 мая 2009 12:21 · Поправил: arnix · Личное сообщение · #8 Veliant Спасибо большое ![]() ![]() arnix пишет: А старшие 4 бита в случае первого байта - один из этих - 0, 1, 8, 9, в случае второго байта - один из 4, 6, C, E. А ведь из этих чисел что я перечислил я мог бы и догадаться что используются наложения с складыванием, а не догадался ![]() Ara пишет: ЗЫ: это учебная задачка или реальная? учебная ![]() |
|
Создано: 01 мая 2009 12:57 · Поправил: Veliant · Личное сообщение · #9 Да не за что... кстати маски гораздо длинее... и почему то в районе 113-114 символа начинает косячить расшифровка.... Ни опыта ни утилит... скажем так методом в лоб решал) Добавлено: немного помучавшись удалось расшифровать начало исходника более менее... Но чем дальше в лес тем больше дров как говорится ![]() ![]() |
|
Создано: 02 мая 2009 10:44 · Личное сообщение · #10 |
|
Создано: 04 мая 2009 09:59 · Личное сообщение · #11 Some tool for XOR analyzes: Description: This application can do some basic XOR, ADD, SUB and ROR/L calculation, crypt files with these algorithms, search for crypted string inside file (for code with 1 char length) or analyze file for byte occurrence. Read more in Readme.txt ! ![]() |
![]() |
eXeL@B —› Основной форум —› xor encryption, криптоанализ. |