Сейчас на форуме: _MBK_, Magister Yoda (+5 невидимых)

 eXeL@B —› Основной форум —› Неизвестный алгоритм шифрования
Посл.ответ Сообщение

Ранг: 7.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 02 ноября 2009 23:33
· Личное сообщение · #1

Всем доброго времени суток.

Столкнулся с интересным алгоритмом шифрования файлов одной коммерческой проги
(делаю конвертер из нее в open формат).
Собственно, алгоритм такой:
- Файл зашифрован блоками по 0x80 байт.
Каждый блок - полином 32й степени или число из 32х знаков с основанием системы счисления
0xFFFFFFFF (однозначно не определишь).
Суть расшифровки - разбиение блока на равные подблоки, сложение, вычитание, умножение на
коэффициенты и возведение в квадрат (схема достаточно мудрёная, рекурсивная с глубиной 3).
Рекурсивная функция на один и тот же блок заряжается 16 раз,
притом после каждой обработки из результирующего блока - тоже 80 байт
вычитается ключ - такой же набор чисел.
В итоге сначала имеем блок "мусора" в 128 байт, на выходе - расшифрованный блок такого же размера.
какой алгоритм шифрования это может быть?
Особенность - отсутствие XOR и сдвигов, т.е. только математика.
Авторам за издевательство над юзерами я еще отпишу привет (файл родной прогой открывается за 30-40 сек, хотя используй они что-нибудь более умное из алгоритмов симметричного шифрования, все работало бы в разы быстрее). Сейчас просто хотелось бы знать, может кто с таким сталкивался.
Отреверсить я его и так смогу, не проблема.



Ранг: 20.5 (новичок), 3thx
Активность: 0.010
Статус: Участник

Создано: 02 ноября 2009 23:58
· Личное сообщение · #2

Крипто-анализаторами прогоняли программку?



Ранг: 7.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 03 ноября 2009 00:15
· Личное сообщение · #3

Программа под КПК (ARM, WinCe 5.0), криптоанализаторов под это дело не видел.



Ранг: 20.5 (новичок), 3thx
Активность: 0.010
Статус: Участник

Создано: 03 ноября 2009 00:43 · Поправил: coolangel
· Личное сообщение · #4

Большинство анализаторов ищут константы в бинарном коде. Поэтому, думаю,не имеет значения под что бинарник.



Ранг: 7.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 03 ноября 2009 01:01
· Личное сообщение · #5

К сожалению:
1. в статике бинарник не проанализируешь. Использовано многослойное полиморфное шифрование
исполняемого кода и куски дешифровщика сначала расшифровываются, затем выполняются, затем
обратно шифруются.
2. констант нет. ключ получается из ключевых файлов проги в динамике.
точнее все константы - это размеры буферов, они задаются в коде напрямую. Часть ключа берется из
самого кода (!) в виде контрольных сумм функций, т.е. лишний брекпоинт не в том месте приводит к
разрушению ключа.
3. Сам алгоритм на 90% отреверсил уже, скажу точно что XOR, сдвигов и S-Box нет. Алгоритм думаю
вряд ли классический, есть большие подозрения на самодеятельность авторов.

на всякий случай - чем посоветуете прокатить код? работаю под IDA, может плагин какой?
маловероятно конечно.



Ранг: 512.7 (!), 360thx
Активность: 0.270.03
Статус: Модератор

Создано: 03 ноября 2009 09:45 · Поправил: sendersu
· Личное сообщение · #6

Може Олли + Олли скрипт?

хотя вряд ли - Программа под КПК .....




Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 03 ноября 2009 11:11
· Личное сообщение · #7

а для IDА разве нет плагов для ARM?

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh





Ранг: 605.2 (!), 341thx
Активность: 0.470.25
Статус: Модератор
Research & Development

Создано: 03 ноября 2009 12:50
· Личное сообщение · #8

как вариант - сдампить память процесса (раз он динамически себя расшифровывает) и уже в ней искать константы и паттерны, которые можно подглядеть в сорсах KANAL'a
но из-за того, что код - arm, к нему будут неприменимы паттерны кода

-----
EnJoy!




Ранг: 7.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 03 ноября 2009 23:58
· Личное сообщение · #9

Спасибо за информацию, дампы скинутые есть. Можно привести несколько утил/плагинов для
криптоанализа? практически все, что удалось найти, касается криптоанализа траффика, данных и т.п.



Ранг: 123.0 (ветеран), 10thx
Активность: 0.060
Статус: Участник

Создано: 04 ноября 2009 00:15 · Поправил: Ultras
· Личное сообщение · #10

А точно не RSA? И работа блоками по 0x80 байт и тормоза при декодинге большого объема данных...

-----
.[ rE! p0w4 ].




Ранг: 7.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 04 ноября 2009 12:41
· Личное сообщение · #11

Это точно не:
- RSA
- DES
- Blowfish
- IDEA
- ГОСТ 28147
- MARS
- RC6
- Rijndael
- Serpent
- Twofish

Особенности
1. Используются только операции сложения, вычитания, возведения в квадрат и умножения на число
2. Зашифрованный участок, ключ и единицы обработки представляют собой числа из 32,16,8 и 4 знаков
с основанием системы счисления 2 в 32 степени
3. S-box, сдвигов и XOR нет.
4. Это не сеть Фейштеля.
5. Расшифрованный блок - 32 x DWORD представляет собой нужные данные, которые затем побайтно
разворачиваются в обратном порядке.



Ранг: 162.4 (ветеран), 11thx
Активность: 0.060
Статус: Участник

Создано: 06 ноября 2009 17:40
· Личное сообщение · #12

ну всетаки похоже на RSA .
Попробуй проверить на ассеметричность шифрования
>> Используются только операции сложения, вычитания, возведения в квадрат и умножения на число
обычно так реализуется арифметика с большими числами.



Ранг: 7.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 06 ноября 2009 22:31
· Личное сообщение · #13

Да, там арифметика с большими числами, но в отличие от RSA максимальная степень - квадрат. Ключ накладывается так:
- буфер (32xdword) преобразуется в число (64 знака - dword) по определённому закону

- старшие 2xdword делятся на старшие 2xdword ключа - получаем множитель.
- ключ (32xdword) познаково умножается на множитель
- берутся последние 32xdword числа, из них вычитается ключ помноженный на множитель.
- в итоге имеется пересчитанное число. Цикл повторяется 32 раза, каждый раз идёт смещение на
1 знак к началу числа.

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

Насчёт асимметричности ключа - имею только алгоритм дешифровки, как тут проверишь?
Может кто подскажет хотя бы несколько криптоанализаторов, которыми стоит прокатить
скинутые дампы проги? т.к. в гугле самый крутой криптоанализатор - терморектальный

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



Ранг: 7.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 10 ноября 2009 01:11
· Личное сообщение · #14

В общем, прогон криптоанализаторами ничего не дал. Как и ожидалось, ибо код под ARM, да и
специфичных сигнатур/констант нет, тупо математика.
Скорее всего алгоритм самодеятельный или очень редко применяемый.
Если кто столкнётся с подобным и узнает как это чудо называется - прошу отписать.



Ранг: 7.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 10 ноября 2009 01:11
· Личное сообщение · #15

отдельное спасибо sendersu за инфу.


 eXeL@B —› Основной форум —› Неизвестный алгоритм шифрования
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати