2012-02-25 5 views
2

Гол (General) Моей конечной (долгосрочная) цели состоит в том, чтобы написать импортер для двоичного файла в другое приложениеРазберите для идентификации алгоритма шифрования

Вопрос Фон

  • Я интересуется двумя полями в формате двоичного файла. Один из них зашифрован, а другой сжат и, возможно, также зашифрован (см., Как я пришел к такому выводу here).
  • У меня есть программа просмотра (я буду называть его viewer.exe), которая может открывать эти файлы для просмотра. Я надеюсь, что это может подтолкнуть некоторые подсказки.
  • Я буду (скоро) иметь коррелированный расшифрованный вывод для сравнения и иметь значения для поиска.
  • Это наиболее актуальной stackoverflow Q/A я нашел

Вопрос Specific
Что является лучшей стратегией, учитывая ресурсы, которые я должен определить алгоритм используется?

Текущие Идеи

  • Я понимаю, что без ключа, идентифицирующий Algo от всего данных практически невозможно

  • Имея файл и viewer.exe, я должен иметь ключ где-то. Является ли это публичным, частным, симметричным и т. Д. ... это было бы неплохо выяснить.

  • Я хотел бы разобрать viewer.exe с помощью OllyDbg с плагином findcrypt в качестве первого шага. Я просто недостаточно разбираюсь в этом, чтобы выполнить это.

Ресурсы
полный example file
extracted binary из поля Я заинтересован в
decrypted data В этом .zip архиве есть двоичный список поплавков, представляющих х, у, г (model2.vertices) и двоичный список целых чисел (model2.faces). Я также включил файл stl, который вы можете просматривать со многими бесплатными программами, но из-за странного способа хранения данных в STL это не то, что мы ожидаем получить из исходного файла.

Прогресс
1. Я разобрал программу с Olly, то сделал единственное, что я знаю, как это сделать в этой Поинге и «искали все ссылки текста» после приостановки порграммы перед импортирует из из файлы. Затем я искал слова, похожие на «crypt, hash, AES, encrypt, SHA и т. Д.» И т. Д. Я придумал кучу вещей, в первую очередь «Blowfish64», который, похоже, хорошо сочетается с тем, что mydata изредка составляет 4 байта слишком долго (и поскольку он гарантирован быть mod 12 = 0), это для меня выглядит как дополнение для Размер 64-битного блока (нечетные количества вершин приводят к нечетным 8 байтам). Я также нашел сообщения об ошибках, такие как ...

«недопустимый размер данных (размер-4) по модулю 8 должен быть 0"

После прочтения ответа Игоря ниже, вот выход из signsrch. Я обновил этот образ с зеленой точкой, которая не вызывают никаких проблем при замене на INT3, красной, если программа не может начаться, и оранжевый цвет, если это не удается при загрузке файла интереса. нет точка не означает, что я не проверял еще.

Signsrch results annotated

Аксессуар Информация

  • Im с использованием Windows 7 64 бит
  • viewer.exe является Win32 x86 приложению
  • Данные в кодировке base64, а также зашифрованы
  • Расшифрованная данные группы по 12 байт, представляющих 3 плавает (х, у , г-координата)
  • у меня есть OllyDb v1.1 с findcrypt плагиным, но мой Useage ограничивается следующим вместе с этими парнями youtube videos
+0

Почему вы не задаете этот вопрос на суперпользователе? –

+0

IDA имеет метод FLIRT, который идентифицирует известные функции. Если они используют стандартную криптографическую библиотеку, она может идентифицировать алгоритм. – CodesInChaos

+0

@GregS Потому что я не знал, что лучше спросить. Я проверю это как можно скорее – patmo141

ответ

1

Вы не можете отличить хорошее шифрование (AES остроумие h режим XTS, например) из случайных данных. Это невозможно. Попробуйте использовать ent для сравнения данных/dev/urandom и томов TrueCrypt. Нельзя отличить их друг от друга.

Редактировать: Перечитайте свой вопрос. Лучший способ определить, какой симметричный алгоритм, хеш и режим используются (когда у вас есть ключ дешифрования) - попробовать все. Скорректируйте возможные комбинации и проверите несколько тестов, чтобы определить, успешно ли вы дешифруете. Именно так TrueCrypt монтирует том. Он заранее не знает алго, поэтому он пробует все возможности и тесты, которые первые несколько байтов дешифруют до ИСТИНА.

+1

Вы правы, но вы не читали OP.«Я понимаю, что без ключа, идентифицировать алго из просто данных практически невозможно». Вот почему он хочет выяснить алгоритм с дизассемблером. – CodesInChaos

+0

Спасибо. Вариант 1: грубая сила со всеми разумными методами, когда я нахожу ключ. – patmo141

7

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

+0

Ничего себе, это довольно хорошо. См. Фотографию выхода signrch. Следующая перекрестная ссылка будет сложной для меня, поскольку я все еще новичок в Olly, IDA и т. Д. – patmo141

+0

Хорошо, я понимаю, что signrch определил константы, но как их искать? Например, таблица bfp Blowfish. 00856893 заключается в том, что фактическая константа или это расположение константы внутри программы? Мои извинения за наивный ответ – patmo141

+0

Кажется, что вы получаете фактические константы, вы можете использовать опцию -L. Однако, если эти числа являются смещениями файлов, вы можете использовать «Jump-Jump to file offset» для перемещения туда. –