Идентификация алгоритмов в двоичных файлах - PullRequest
2 голосов
/ 18 февраля 2009

Кто-нибудь из вас знает методику идентификации алгоритмов в уже скомпилированных файлах, например путем проверки разборки на некоторые шаблоны?

Редкая информация, которую я имею, состоит в том, что в библиотеке есть некоторый (не экспортируемый) код, который распаковывает содержимое байта [], но я понятия не имею, как это работает. У меня есть некоторые файлы, которые я считаю сжатыми таким неизвестным способом, и похоже, что файлы приходят без какого-либо заголовка сжатия или трейлера. Я предполагаю, что шифрования нет, но пока я не знаю, как распаковать, это ничего не стоит для меня.

У меня есть библиотека ARM9 для целей с низкой емкостью.

EDIT: Это сжатие без потерь, хранение двоичных данных или простого текста.

Ответы [ 5 ]

3 голосов
/ 18 февраля 2009

Вы можете пойти по паре направлений, статический анализ с чем-то вроде IDA Pro, или загрузить в GDB или эмулятор и следовать коду таким образом. Они могут XOR'ить данные, чтобы скрыть алгоритм, так как уже есть много хороших методов сжатия без потерь.

2 голосов
/ 18 февраля 2009

Алгоритмы декомпрессии включают в себя значительную петлю в тесных петлях. Сначала вы можете начать искать циклы (уменьшить регистр, перейти назад, если не 0).

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

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

http://www.google.com/search?q=arm%20decompiler

-Adam

1 голос
/ 20 февраля 2009

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

Однако вы можете посмотреть магическое число для сжатого файла и выяснить, какой тип сжатия использовался. Например, если он сжат с помощью DEFLATE , первые два байта будут шестнадцатеричными 78 9c; если с bzip2 , 42 5a; если с gzip , 1f 8b.

0 голосов
/ 18 февраля 2009

По моему опыту, в большинстве случаев файлы сжимаются с использованием простого старого Deflate. Вы можете попробовать использовать zlib, чтобы открыть их, начиная с другого смещения, чтобы компенсировать пользовательские заголовки. Проблема в том, что zlib сам добавляет свой собственный заголовок. В python (и я полагаю, что другие реализации также имеют эту функцию), вы можете передать zlib.decompress -15 в качестве размера буфера истории (т.е. zlib.decompress (data, -15)), что заставит его распаковывать необработанные дефлированные данные , без заголовков zlib.

0 голосов
/ 18 февраля 2009

Обратный инжиниринг, выполненный путем просмотра сборки, может иметь проблемы с авторским правом. В частности, сделать это, чтобы написать программу для распаковки, с точки зрения авторского права почти так же плохо, как просто использовать сборку самостоятельно. Но последнее намного проще. Итак, если ваша мотивация состоит в том, чтобы просто написать собственную утилиту для декомпрессии, вам может быть лучше просто перенести имеющуюся сборку.

...