LINUX.ORG.RU

Определить метод шифрования

 ,


0

2

Добрый день, подскажите возможно ли определить метод шифрования, если имеется ассемблерный листинг дешифровки файла?

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

Имеется возможность динамической проверки работы «дешифратора», так сказать в отладчике (не удобно конечно, но всё же)

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



Последнее исправление: Devill (всего исправлений: 2)

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

Deleted
()
Ответ на: комментарий от Deleted

Если пойти от обратного, т.е. с конца кода и делать все наоборот с «выходным» хешем, не получится получить исходный-шифрованный фал?

Devill
() автор топика

Очень сильно зависит от того, каким конкретно образом это реализовано. То есть без непосредственно бинарного файла тебе никто решение не подскажет.

Deleted
()
Ответ на: комментарий от Avial

Я не пытаюсь сам ХЕШ расшифровать. Суть такая, имеется зашифрованный MD5_хеш, и он расшифровывается внутри программы, далее этот расшифрованный MD5_хеш сравнивается с другим ХЕШ'ем.

Тут дело не в ХЕШ, вместо него может быть безсистемный набор байтов, котрые проходят через определённую функцию расшифровки.

Вот и задумался, почему нельзя сделать как бы Реверс этой функции, но дело в том что используется логический сдвиг влево, потмо вправо, соответственно теряются определённые биты

Devill
() автор топика
Ответ на: комментарий от Devill

1) Может покажешь код? Вдруг кто-то в нём узнает известный алгоритм шифрования.

2) А не проще ли пропатчить бинарник, который дешифрует и сравнивает хеш?

Deleted
()
Ответ на: комментарий от Deleted

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

2)Патчить нельзя, стандартные функции не будут работать, надо только рассчитать (кодирование исходного Хеш'а)

Дешифровка:

1.Два массива, первый Входной, второй встроен в Код (размер у них одинаковый)

2.Входной массив увеличивается в 2 раза (множится сам на себя) затем сдвигается влево(LSL+OR)

3.Встроенный массив сдвигается влево (LSL+OR)

4.Расчет Третьего Массива из первых Двух (в результате размер Третьего массива восстанавливается до исходного)

5.Третий массив (из п.4) сдвигается вправо (LSR+OR)

Дальше всё повторяется 16 раз, Только вместо Первого входного массива, подаётся результат работы фукции из п.5

Devill
() автор топика
Ответ на: комментарий от Devill

А можно псевдокодом? А то из описания не понятно.

Deleted
()
Ответ на: комментарий от Devill

он расшифровывается внутри программы, далее этот расшифрованный MD5_хеш сравнивается с другим ХЕШ'ем.

А можно примеры входного и расшифрованного хеша? А то что-то мне подсказывает, что там RSA, и обратно его без закрытого ключа не обернешь.

segfault ★★★★★
()
Ответ на: комментарий от segfault

Добрый день, извините не отвечал - уезжал по делам. Пример позже скину (надо запустить отладку чтоб скопировать)

Почитал немного про DES, AES, RSA, по-моему это что-то подобно модифицированному DES, так как имеется:

1. Входной блок(DATA)

2. Вектор инициализации(IV) (он равен размеру DATA)

3. Блок «дополнения» (увеличивает DATA в 2 раза )

4. Начальные(прямое) преобразования DATA и IV (L_сдвиг+ИЛИ)

5. Основная процедура (на вход DATA*x2 + IV) на выходе (DATA)

5. Конечное(обратное) преобразование DATA (R_сдвиг+ИЛИ)

6. Далее повторяется Раунд 16-18 раз (подзабыл уже)

Подскажите такая схема дает понять что это не RSA?

Иначе RSA - я понимаю не стоит пытаться рашифровать, так-как бесполезно.

Devill
() автор топика
Ответ на: комментарий от Devill

Ставил эксперимент:

Заполнил массив DATA единицами hex значений 0x11

Заполнил массив (начальный вектор) IV двойками hex значений 0x22

На выходе получил массив размером DATA,

Данные в котором повторялись каждые 7 байт (по 56_бит) (не считая первые 4 байта)

Devill
() автор топика

р-к спициалисты на лоре

по машинам поцоны

missxu
()
Ответ на: комментарий от Devill

Иди методом исключения.

Что известно:

  • блочный шифр (какой размер DATA?)
  • есть вектор инициалиции равный размеру блока
  • 16 раундов

Из этого можно уже ограничить круг подозреваемых.

beastie ★★★★★
()
Ответ на: комментарий от Devill

по 56_бит

По совокупности улик очень похоже на DES. Проверь на нулевых данных и нулевом ключе:

https://play.golang.org/p/Po1lzKTW1nV

Если это ванильный DES, выйдет 8c a6 4d e9 c1 b1 23 a7

beastie ★★★★★
()
Последнее исправление: beastie (всего исправлений: 1)
Ответ на: комментарий от beastie

Спасибо за помощь, проверю обязательно.

Размер Блока не увязывается не в один алгоритм, во всех примерах блоков много и они по 32,64,128,256 бит, а тут получается Один блок и он около 200 Байт !!!

Основную функцию еще толком не смотрел и ключ даже не искал, теперь понимаю что он должен быть. В основной процедуре по копаюсь (она не маленька), сходу там видно только что имеются константы FFFFFFFF. А может он копируется откуда-нибудь на определённом этапе

В мыслях найти онлайн сервис и попробовать, но в данном случае могут быть добавлены какие-нибудь доработаки.

В преобразованиях идёт работа с блоками по 32 бита (4_байта)

Они сдвигаются и 7(семь)бит с одного блока операцией ИЛИ подмешиваются в следующий блок.

Devill
() автор топика
Ответ на: комментарий от beastie

Вспомнил что с нулями не получится, уже пытался, поэтому проверял на единицах и двойках.

При «00» происходит выход из функции, на начальном этапе, не происходит ни одного цикла.

Стоит цикл проверки DATA на сравнение с «00_00_00_00», и если такое значение появляется, то достигнут конец - DATA

(как-то так я понял)

Devill
() автор топика

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

Legioner ★★★★★
()
Последнее исправление: Legioner (всего исправлений: 1)
Ответ на: комментарий от Legioner

Спасибо. Буду изучать основную функцию, что там происходит.

Подскажите еще пожалуйста, Если не брать этот случай, а чисто в теории:

Если используется стандартный алгоритм (DES, AES и их модификации), плюс имеется шифротекст, вектор_инициализации, ну и пароль выудить, то в чём сложность Дешифровки сообщений, ведь имеются стандартные функции «Зашифровать/Расшифровать»

Или я чего-то не понял ещё :) ?

Devill
() автор топика
Ответ на: комментарий от Devill

Я не до конца понимаю, что именно там происходит, то ли хеш, то ли шифрование. Если речь о симметричном шифровании, то проблем нет. Если речь об асимметричном шифровании, то это невозможно. Если речь о хешировании, то надо смотреть на то, что за хеш, с хорошими криптографическими хешами это невозможно, с плохими можно пытаться, с некриптографическими скорее всего достаточно легко.

Legioner ★★★★★
()
Ответ на: комментарий от Legioner

Спасибо я вас понял.

В моем случае на вход подаётся hex файл 200 байт, на выходе тоже hex 200 байт - Расшифрованный.

(Забудьте про MD5 это только наводит путаницу)

Devill
() автор топика
Ответ на: комментарий от Devill

{

1. DATA 200 -> DATA 400

2. DATA 400 -> (LSL+OR) = 400

3. IV 200 -> (LSL+OR) = 200

4. Result = Func_Decode (DATA_400, IV_200)

5. Result 200 -> (LSR+OR) = 200

}

Devill
() автор топика
Ответ на: комментарий от Devill

Да... Пахнет каким-то велосипедным шифром. Если это все же симметричный шифр, попробуй выписать все операции с данными и реализовать «обратный» проход алгоритма. Т.е. из конечных данных получить входные.

segfault ★★★★★
()
Ответ на: комментарий от segfault

Похоже метод не стандартный, если считать что это блочный шрифр, он по 32 бита шифрует одним раундом, затем следующие 32 и так до конца.

Почти во всех блочных первым идёт перестановка бит и последним обратная перестановка, а тут первым делом входной файл увеличивается в два раза и только потом перестановка.

А вектор оказался не вектором, а что то типа ключа, он с помощью арифметических действий смешивается с увеличененным входным массивом.

Долго видимо разбираться придётся, самое интересное каждые 7 байт повторяется в выходном файле, если на вход подать одинаковые данные (массив с повторяющимся значением)

Devill
() автор топика
Ответ на: комментарий от beastie

Подскажите существуют блочные методы шифрования не использующие операции XOR или OR?

В моем случае используется только + и -, в функции получения Раундового ключа : и *

Скорее всего тут не Вектор, а Гамма - которая после обработки ключом и складывается либо вычитается из входных данных. Так-как равна длине входного сообщения, хотя и для Виктора подходит, уфф

Интересно все это, сколько оказывается методов придуманно

Devill
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.