Русский / Russian English / Английский

Сейчас на форуме: Adler, sss123 (+5 невидимых)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS ·

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

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

Создано: 2 ноября 2009 23:33 New!
Цитата · Личное сообщение · #1

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

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

Ранг: 20.5 (новичок)
Статус: Участник

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

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

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

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

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

Ранг: 20.5 (новичок)
Статус: Участник

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

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

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

Создано: 3 ноября 2009 01:01 New!
Цитата · Личное сообщение · #5

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

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

Ранг: 510.9 (!)
Статус: Модератор

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

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

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


Ранг: 755.7 (! !)
Статус: Участник
Student

Создано: 3 ноября 2009 11:11 New!
Цитата · Личное сообщение · #7

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


Ранг: 603.8 (!)
Статус: Модератор
Research & Development

Создано: 3 ноября 2009 12:50 New!
Цитата · Личное сообщение · #8

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

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

Создано: 3 ноября 2009 23:58 New!
Цитата · Личное сообщение · #9

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

Ранг: 123.0 (ветеран)
Статус: Участник

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

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

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

Создано: 4 ноября 2009 12:41 New!
Цитата · Личное сообщение · #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 (ветеран)
Статус: Участник

Создано: 6 ноября 2009 17:40 New!
Цитата · Личное сообщение · #12

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

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

Создано: 6 ноября 2009 22:31 New!
Цитата · Личное сообщение · #13

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

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

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

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

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

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

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

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

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

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

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

Видеокурс ВЗЛОМ