Nano Hash - криптовалюты, майнинг, программирование

Как анализировать бинарный файл?

У меня есть бинарный файл. Я не знаю, как он отформатирован, я знаю только, что он исходит из кода Delphi.

Существует ли способ анализа двоичного файла?

Существует ли какой-либо «шаблон» для анализа и десериализации двоичного содержимого файла неизвестного формата?


  • Не могли бы вы рассказать нам больше об этом коде Delphi? 22.06.2009
  • Это программа Delphi, позволяющая создавать экзаменационные тесты. Созданный файл является двоичным. 22.06.2009
  • У вас есть доступ к программе, которая может читать этот тип файлов и отображать экзамен? Если это так, то вам будет НАМНОГО проще работать задним ходом, так как вы сможете подключиться к этому приложению и посмотреть, что оно делает. 30.06.2009
  • Голосование за закрытие как неясное/слишком широкое. Что вы хотите проанализировать? 14.07.2015

Ответы:


1

Попробуйте это:

  1. Десериализация данных: проанализируйте, как он скомпилировал ваш исполняемый файл (попробуйте анализатор файлов). Попробуйте десериализовать двоичные данные с помощью обнаруженного языка. Затем сериализуйте его в формате xml (независимом от языка), который может понять каждый язык программирования.
  2. Проанализируйте двоичные данные: попробуйте сохранить различные версии файла с небольшими изменениями и используйте программу сравнения для анализа значения каждого бита с помощью шестнадцатеричного редактора. Используйте его в сочетании с методами взлома двоичных файлов (например, Как взломать формат двоичных файлов, автор Frans Faase).
  3. Обратный инжиниринг приложения: попробуйте получить код с помощью инструментов обратного инжиниринга для языка программирования, используемого для сборки приложения (находится по адресу Анализатор файлов). В противном случае используйте инструмент анализа дизассемблера, например IDA Pro Disassembler.
22.06.2009
  • возможно, вам следовало отметить ответ, а не кратко излагать сказанное. 23.06.2009
  • Я думаю, что все частичный ответ. Поэтому я реконструирую резюме, и если ответа нет, я отмечу это резюме как ответ. 23.06.2009
  • Да, за исключением того, что ни один из них не был твоим. 23.06.2009
  • Итак, на этот вопрос никогда не будет ответа! Если хотите, скопируйте и вставьте этот ответ. Буду очень рад отметить ваш ответ! И вы тоже будете очень счастливы! Меня не интересует репутация, я хочу только отметить ответ на этот вопрос. А ты? Каков ваш реальный интерес? 23.06.2009
  • если вы посмотрите на другие вопросы, когда автор хотел дать резюме, он отредактировал вопрос и добавил, что там. Меня не волнует репутация, но эти ответы были предоставлены пользователями. 23.06.2009
  • хорошо, я думаю, что было правильно поместить ответ здесь. Но если нет, я перенесу это в свой вопрос 23.06.2009
  • @Geo Иногда он задавал вопрос тому, кто приложил больше усилий к этой теме. Сказав это, он может быть хорошим кандидатом для предоставления ответа, поскольку он, вероятно, проверил рекомендуемое пользователями решение. Я не могу найти ничего плохого в этом для сообщества, еще раз, поскольку существуют правила. 19.01.2017
  • Ссылка на File Analyzer не работает. Где его можно найти сегодня? 09.04.2018
  • ссылка vnet.times.lv/exe/fa.rar не работает @Ricibald 21.05.2020

  • 2

    Для моего хобби-проекта мне пришлось реконструировать некоторые старые игровые файлы. Мои подходы были:

    • Имейте хороший шестнадцатеричный редактор.
    • Ищите читаемые слова в двоичном файле. Обратите внимание на их распределение. Если расстояние между ними постоянно, вы знаете, что это листинг.
    • Ищите 2-3 последовательных нуля. Может указывать значение int32.
    • Некоторые двойные слова могут быть указателями на файл.
    • Попробуйте определить повторяющиеся шаблоны в файле.
    • Наличие большого количества C0-CF может указывать на сжатые данные RLE.
    22.06.2009

    3

    Я разработал Hexinator (для Windows и Linux) и Synalyze It! (macOS) именно для этой цели. Эти приложения позволяют вам просматривать двоичные файлы, как и в других шестнадцатеричных редакторах, но дополнительно вы можете создавать «грамматику» с особенностями формата двоичных файлов. Грамматика содержит все строительные блоки и используется для автоматического анализа файла.

    Таким образом, вы можете сохранить знания, полученные при анализе, и применить их к нескольким файлам одновременно. Вы также можете раскрасить фрагменты форматов файлов для быстрого обзора в шестнадцатеричном редакторе. Снимок экрана Synalyze It! Pro Результаты синтаксического анализа отображаются в виде дерева, где вы также можете легко изменять файлы (применяя порядок следования байтов и так далее).

    27.11.2016
  • Можно ли экспортировать грамматику синтаксического анализа в скрипт Python? 24.08.2017
  • Еще нет. Грамматики могут содержать сценарии Python (и Lua). Скорее всего, появится модуль расширения Python, позволяющий использовать движок грамматики в собственных скриптах. Свяжитесь со мной, если вы хотите проверить это :) 26.08.2017
  • Я попробовал это и потратил больше времени на борьбу с этим, чем на продуктивную работу. В частности, если бы я хотел изменить строку в грамматике, я бы не смог. Это не позволило бы мне удалить или отредактировать строку. Другие могут найти его ценным, но я удалил его через 10 минут, ничего, кроме разочарования, я добиваюсь большего прогресса с помощью старого простого текстового редактора. 31.12.2019
  • Есть много мест, где можно использовать контекстные меню, включая удаление строки в грамматике. 01.01.2020

  • 4

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

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

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

    22.06.2009

    5

    Программа "strings" из GNU binutils очень полезна. Он будет печатать строки печатных символов в файле, довольно часто давая ключ к тому, что файл содержит или делает программа.

    22.06.2009
  • Я пробовал, но он возвращает только список слов типа sdf@1#£ 22.06.2009

  • 6

    Если данные представляют собой сериализованные объекты Delphi, вам следует начать читать о процессе сериализации Delphi. Если это так, я думаю, вам лучше всего загрузить его с помощью Delphi и продолжить анализ из IDE. Некоторую информацию о сериализации Delphi можно найти здесь.

    РЕДАКТИРОВАТЬ: если файл содержит сериализованные объекты delphi, вам следует написать небольшую программу delphi, которая загружает его, и самостоятельно «конвертировать» данные во что-то нейтральное, например xml. Если вам удастся это сделать, вы должны проверить и посмотреть, поддерживает ли delphi сериализацию в xml. Затем вы можете получить доступ к этим объектам с любого языка.

    22.06.2009
  • Если это сериализованные данные Delphi, как я могу использовать их в программе С# или Objective-C? 22.06.2009
  • но для этого нужен интерпретатор Delphi. Если у меня есть единственное приложение, которое открывает этот файл, я не могу. Мне нужно выполнить два разных приложения. 22.06.2009
  • да. Вам нужно преобразовать объект во что-то, что можно использовать из любого места. Вы можете запустить конвертер из кода вашего основного приложения и работать с полученными файлами. Вот как бы я это сделал. 22.06.2009

  • 7

    Команда unix «file» действительно полезна — я не знаю, есть ли что-то подобное в Windows. Вы запускаете это так:

    file myfile.ext
    

    И он выдает текстовое описание, основанное на магических числах и содержащихся в нем данных.

    Вероятно, он содержится в cygwin.

    22.06.2009
  • Вероятно, он получит поток октетов, что еще больше его запутает. Файлы .bin (я думаю, что это так) не стандартизированы, и, как сказал colithium, ему, вероятно, нужно RE. 22.06.2009
  • Вот что делает файл - он вообще не смотрит на расширение 22.06.2009
  • файл ищет магические числа, как вы сказали, но только магические числа знает типы файлов. Таким образом, он, скорее всего, найдет .jpg, .tar.gz, .avi и т. д. и т. д., но пользовательская двоичная файловая структура не является известным типом файла (если бы это было так, у него не было бы этой проблемы в первую очередь: )) 22.06.2009

  • 8

    Если у вас есть доступ к приложению, которое создает файл, вы можете применить изменения к приложению, затем сохранить файл и просмотреть результаты (имейте в виду, что числа, вероятно, хранятся в little endian):

    • Сначала создайте файл повторно. Если файлы не равны в двоичном виде, текущая дата/время, вероятно, хранятся в области, где возникают различия.
    • Возможно, вы захотите повторить это с программным обеспечением, работающим в разных средах, чтобы увидеть, сохранена ли версия ОС и т. д., но это довольно необычно.
    • Далее можно попробовать изменить отдельные переменные и создать несколько файлов, отличающихся только значением этой переменной. Это поможет вам определить, где хранится эта переменная.
    • Таким образом, вы также можете исключить переменные, которые не хранятся в файле: если вы меняете их, но созданные файлы идентичны, они не сохраняются.

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

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

    22.06.2009

    9

    Если file не дает осмысленного ответа, вы можете попробовать TRiD Марко Понтелло. чтобы определить, хранятся ли ваши данные в известном формате.

    22.06.2009
  • Я пробовал, но там написано о файле: Program X Format. Ну... я уже знаю, что это файл из программы X 22.06.2009

  • 10

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

    Дополнительная информация: http://www.codeproject.com/KB/DLL/Win32APIHooking_Trouble.aspx

    22.06.2009

    11

    Получите приложение Delphi, откройте его в бесплатной версии IDA Pro и найдите, где он записывает файл и расшифровывает, как он записывает файл таким образом.

    Если только это не текст плана.

    23.06.2009

    12

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

    http://www.sweetscape.com/010editor/

    06.10.2014

    13

    Попробуйте открыть его в шестнадцатеричном редакторе и проанализировать.

    22.06.2009
  • Это не дает ответа на вопрос. Чтобы подвергнуть критике или запросить разъяснения у автора, оставьте комментарий под его публикацией. 29.08.2012
  • Он действительно дает краткий ответ на вопрос. 30.08.2012
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

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

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

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..