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

Выражение ${foo} использует за кулисами JspContext#findAttribute() , который ищет атрибуты в PageContext , HttpServletRequest , HttpSession и ServletContext в этом порядке по методу getAttribute("foo"), в соответствии с которым foo из ${foo}, таким образом, представляет имя атрибута "foo" и возвращает первый не- -null object.

Итак, если вы делаете в сервлете

ArrayList persons = getItSomehow();
request.setAttribute("persons", persons); // It's now available by ${persons}
request.getRequestDispatcher("/WEB-INF/persons.jsp").forward(request, response);

И назовите этот сервлет по URL-адресу, вы сможете перебирать его в page.jsp следующим образом:


    ${person.title}

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

request.getSession().setAttribute("persons", persons);

или даже в область приложения

getServletContext().setAttribute("persons", persons);

EL будет для title в ${person.title} неявным образом искать общедоступный экземпляр (не статический!) метод с префиксом get в классе Person, как показано ниже:

public String getTitle() {
    return title;
}

поле title необязательно должно существовать в классе (поэтому вы можете даже вернуть строку с жесткой связью и продолжать использовать ${person.title}), и это необязательно должно быть полем экземпляра (так что это также может быть статическое поле , пока геттерный метр сам сам не статичен).

Только у boolean (не Boolean!) геттеры имеют специальное лечение; EL неявно ищет общедоступный метод с префиксом is. Например. для ${person.awesome}:

public boolean isAwesome() {
    return awesome;
}

См. также:

26
задан MSalters 22 June 2009 в 09:00
поделиться

12 ответов

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

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

Теперь язык разметки XAML (часть WPF / Silverligtht) некоторыми рассматривается как конкурент SVG, но на самом деле они лишь частично совпадают по функциональности. (XAML поддерживает множество других вещей, таких как привязка данных, события, триггеры и т. Д.) Действительно, общее использование XML сильно ограничено тем, что браузеры не поддерживают его изначально (и не могут должным образом из-за того, что он тесно связан с технологиями MS). Я бы даже не поверил, что это прямой конкурент SVG, или что Microsoft намеревалась сделать это.

В заключение, я не думаю, что можно ожидать исчезновения SVG до тех пор, пока не появится что-то явно улучшенное (и открытое по стандарту). заменить его. Насколько мне известно, на данный момент ничего подобного нет.

t изначально поддерживает его (и не может должным образом из-за того, что он тесно связан с технологиями MS). Я бы даже не поверил, что это прямой конкурент SVG или что Microsoft намеревалась сделать это.

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

t изначально поддерживает его (и не может должным образом из-за того, что он тесно связан с технологиями MS). Я бы даже не поверил, что это прямой конкурент SVG или что Microsoft намеревалась сделать это.

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

s скомпилировал ваш exe (попробуйте File Analyzer ). Попробуйте десериализовать двоичные данные с помощью обнаруженного языка. Затем сериализуйте его в формате xml (независимо от языка), который может понять каждый язык программирования
  • . Анализ двоичных данных : попробуйте сохранить различные версии файла с небольшими вариациями и используйте программу сравнения для анализа значения каждый бит с шестнадцатеричным редактором. Используйте его вместе с методами взлома двоичного кода (например, Как взломать формат двоичного файла от Frans Faase )
  • Обратный инжиниринг приложения : попробуйте получить код с помощью инструментов обратного проектирования для используемого языка программирования для сборки приложения (находится в File Analyzer ). В противном случае используйте инструмент анализа дизассемблера, например IDA Pro Disassembler
  • 22
    ответ дан 28 November 2019 в 06:28
    поделиться

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

    0
    ответ дан Alan Haggai Alavi 15 October 2019 в 07:22
    поделиться

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

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

    2
    ответ дан Simeon Pilgrim 15 October 2019 в 07:22
    поделиться

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

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

    5
    ответ дан pi3 15 October 2019 в 07:22
    поделиться

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

    5
    ответ дан Andreas Fugl 15 October 2019 в 07:22
    поделиться

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

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

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

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

    3
    ответ дан 28 November 2019 в 06:28
    поделиться

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

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

    2
    ответ дан 28 November 2019 в 06:28
    поделиться

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

    3
    ответ дан 28 November 2019 в 06:28
    поделиться

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

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

    5
    ответ дан 28 November 2019 в 06:28
    поделиться

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

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

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

    8
    ответ дан 28 November 2019 в 06:28
    поделиться

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

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

    Команда unix "файл" действительно полезна - я не знаю, есть ли что-нибудь подобное в Windows. Вы запускаете его так:

    file myfile.ext
    

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

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

    3
    ответ дан 28 November 2019 в 06:28
    поделиться
    Другие вопросы по тегам:

    Похожие вопросы: