как узнать чем скомпилирован файл
Как узнать чем скомпилирован файл
Я думаю, что это должно быть где-то в заголовке PE, поскольку загрузчик ОС должен знать эту информацию, но я не смог ее найти. Конечно, я предпочитаю делать это в управляемом коде, но при необходимости могу использовать собственный C ++.
64-битный
32-битный
‘find’ может немного облегчить жизнь:
Вы смотрите конкретно на PE и 32BIT.
Этот трюк работает и требует только Блокнота.
32 бита:
64 бита:
Вот пример получения архитектуры из файла.
На данный момент единственными двумя архитектурными константами являются:
Очень интересно, но когда у меня есть приложение, скомпилированное на Any CPU, результат 0x10B. Это неправильно, потому что мое приложение работает в системе x64. Есть ли другой флаг, который нужно проверить? AnyCPU означает именно это: AnyCPU, поэтому он указан как 0x10B в заголовке PE для обратной совместимости с 32-разрядной версией. Чтобы проверить разницу между этим и обычным 32-битным, вам нужно выяснить, откуда CorFlags получает свой 32BIT флаг в PE, я не знаю, в голове. @JasonLarke Я попал сюда из поиска в Google, и ваш фрагмент кода мне помог. Большое спасибо!
Для неуправляемого DLL-файла вам необходимо сначала проверить, является ли он 16-битным DLL-файлом (надеюсь, нет). Затем проверьте IMAGE\_FILE_HEADER.Machine поле.
Кто-то уже нашел время, чтобы разобраться с этим, поэтому я просто повторю здесь:
Он означает, что с точки зрения синтаксиса в конфигурационном файле всё в порядке и веб-сервер может быть успешно запущен.
Пример вывода, если в конфигурации обнаружена ошибка:
Как узнать, какие конфигурационные файлы использует Apache
Как узнать все виртуальные хосты на сервере
Как узнать, с какими настройками запущен Apache
Как узнать все загруженные модули Apache
Как узнать настройки, с которыми скомпилирован Apache
Как узнать скомпилированные модули Apache
Этичный хакинг и тестирование на проникновение, информационная безопасность
Если вы из тех, кто хочет узнать как работают инструменты указанного сервиса, а также как ими пользоваться на своём компьютере, то продолжайте читать.
Если вам кажется, что проблема с определением типов файлов без расширений надуманная, то это далеко не так! Во-первых, если подумать, это не такая уж простая задача. А с файлом без расширения вы можете столкнуть, например, при декодировании строки из Base64 кодировки.
Во-вторых, у этой статьи будет продолжение, в которой эти же самые инструменты, которые вы изучите на этой странице, будут использоваться для:
1) разбора прошивок (например, роутеров, IP камер) на составные части (первый этап обратной инженерии либо анализа работы устройств для поиска уязвимостей и бэкдоров)
2) поиска файловых систем на дисках и их образах (первый этап криминалистической IT экспертизы)
3) поиска удалённых файлов
Как определить тип данных, если у файла нет расширения
Если у файла нет расширения, то единственным вариантом определения его типа остаётся содержимое этого файла. Можно попробовать добавлять различные расширения к имени файла и пытаться открыть соответствующими для этого расширения программами — этот вариант медленные и неэффективный.
Определённые типы бинарных файлов могут иметь одинаковый набор байтов — по этим байтам можно сопоставить тип файлов. И именно данный метод и применяется программами, предназначенными для определения типа данных. Специфичные байты как правило располагаются не в самом начале файла, поэтому кроме самих байтов, нужно знать смещение от начала, где эти байты должны находиться. Некоторые программы в дополнении к байтам для идентификации ещё имеют список для проверки на ложное срабатывание.
Такие паттерны на английском часто называют magic — это пошло от «magic number» в исполнимых файлах. Эти файлы имеют «магическое число», хранящееся в определённом месте рядом с началом файла, которое сообщает операционной системе UNIX, что файл является двоичным исполняемым файлом и каким именно из нескольких типов. Концепция «магического числа» была применена к другим бинарным файлам. То есть файлы одинакового типа имеют одинаковую последовательность байтов в определённом месте от начала файлов.
Файл с сигнатурами, описывающими какие именно байты, на каком расстоянии от начала файла характерны для файлов того или иного типа, обычно называют magic file.
Кроме магических чисел могут применяться и другие техники, например, программа file для проведения тестов файловых систем также может использовать системный вызов stat. Тип текстовых файлов определяется по содержащимся в них строкам (например, это может быть PHP код, файл в XML или HTML разметке, JSON и так далее).
Команда file — мгновенное определение типа любого файла
В Linux есть команда file с огромной базой сигнатур, которая очень быстро определяет тип файла:
Чтобы узнать, что за файл без расширения, выполните команду вида:
То есть это текстовый файл офисного пакета Microsoft Office.
Можно указать сразу несколько файлов для проверки или использовать подстановочные символы. Например, следующая команда проверит типы всех файлов в текущей папке:
У программы file имеются опции, подробности о них смотрите в отдельной статье «Инструкция по использованию команды file».
Аналог команды file для Windows
file — это утилита командной строки для Linux, поэтому пользователям Windows нужна какая-то альтернатива. Рассмотрим несколько способов использования file в Windows.
1. Утилита file в Cygwin
Данный способ, на мой взгляд, самый простой. Достаточно скачать Cygwin и вы можете пользоваться большинством утилит Linux. Подробности, в том числе как указывать пути в файловой системе, смотрите в ветке «Как начать знакомство с командами Linux: Cygwin».
2. file в WSL
Подсистема Windows для Linux (WSL) это ещё один способ использовать утилиты Linux в Windows. Подробности о работе с WSL смотрите в справочном материале «WSL (подсистема Windows для Linux): подсказки, инструкции, решения проблем».
3. Скомпилированный file для Windows
Файлы различаются архитектурой (64- и 32-битные), а также компилятором.
Распакуйте скаченный архив. Например, я поместил скаченные файлы в папку C:\Users\MiAl\Downloads\file\.
Откройте командную строку, для этого нажмите Win+x, выберите «Windows PowerShell».
Перейдите в папку с программой:
Для определения расширения файла используйте команду вида:
Вы можете проверить сразу много файлов, для этого перейдите в папку с утилитой file и выполните команду вида:
Например, я хочу проверить все файлы в папке Z:\testfiles\, тогда команда следующая:
4. TrID — кроссплатформенная альтернатива file для Windows и Linux
Пример анализа файла — обратите внимание, что выведено несколько вариантов с указанием процентной вероятности каждого из них:
Если указать несколько файлов для идентификации, то будет выведен только самый вероятный вариант типа файла:
Установка TrID в Windows
Распакуйте оба файла в одну папку.
Распакуйте скаченный архив. Например, я поместил скаченные файлы в папку C:\Users\MiAl\Downloads\trid\.
Откройте командную строку, для этого нажмите Win+x, выберите «Windows PowerShell».
Перейдите в папку с программой:
Для определения расширения файла используйте команду вида:
Подстановочные знаки могут использоваться для сканирования групп файлов, целых папок и так далее.
На этом этапе файлы в папке c:\temp будут выглядеть так:
Таким образом, можно работать со всем деревом папок или определенным подмножеством файлов, просто используя вывод какой-либо другой команды через конвейер. Что-то вроде:
Можно указать TrID показывать дополнительную информацию о каждом совпадении (например, тип mime, кто создал эту сигнатуру, сколько файлов было просканировано и так далее); а также можно ограничить количество отображаемых результатов.
Программа TrID обновляется нечасто, но база данных регулярно получает новые сигнатуры, поэтому время от времени обновляйте базу данных.
5. fil — ещё одна кроссплатформенная альтернатива file
Программа fil написана на Go и является кроссплатформенной. Но в программе настолько мало сигнатур, что, на мой взгляд, утилита fil практически бесполезна.
Альтернативы file
Для большинства нужд по определению типа файла без расширения достаточно утилиты file, но есть утилиты со смежным функционалам, которые могут заменить или уточнить информацию от file. Более подробно каждая из этих программ будет рассмотрена в следующей части, сейчас только краткий обзор.
Detect It Easy
Detect It Easy — это кроссплатформенная программа для определения типов файлов. Имеется вариант с графическим интерфейсом, а также интерфейсом командной строки.
Анализ файла /mnt/disk_d/Share/testfiles/file1 с показом результатов в графическом интерфейсе:
Анализ файла без расширения, расположенного по пути /mnt/disk_d/Share/testfiles/file1 для определения типа файла:
Detect It Easy в первую очередь нацелена на анализ исполнимых файлов, поэтому её функции в большей степени относятся к файлам программ, например, определение архитектуры. Но также имеется поддержка других бинарных файлов.
Binwalk
Binwalk это программа для анализа прошивок, но в ней собрано много сигнатур бинарных файлов, поэтому она подходит для определения типа файла. Особенность Binwalk в том, что она нацелена на работу с составными файлами (которыми обычно и являются прошивки), поэтому она может определять тип файла даже если файл находится не в начале.
Использование такое же, как и file, достаточно указать путь до одного или нескольких файлов:
Detect It Easy и Binwalk не столько конкуренты утилиты file, сколько «последний шанс» определить тип данных, если команда file не помогла.
Декомпиляция подразумевает воссоздание исходного кода программы на том языке, на котором она была написана. Иными словами, это процесс обратный процессу компиляции, когда исходный текст преобразуется в машинные инструкции. Декомпиляцию можно провести, используя специализированный софт.
Способы декомпиляции EXE-файлов
Декомпиляция может быть полезной автору ПО, который потерял исходные коды, или просто пользователям, желающим узнать свойства той или иной программы. Для этого существуют специальные программы-декомпиляторы.
Способ 1: VB Decompiler
Первым рассмотрим VB Decompiler, который позволяет декомпилировть программы, написанные на Visual Basic 5.0 и 6.0.
- Нажмите «Файл» и выберите пункт «Открыть программу» (Ctrl+O).
Способ 2: ReFox
В плане декомпиляции программ, скомпилированных через Visual FoxPro и FoxBASE+, неплохо себя зарекомендовал ReFox.
- Через встроенный обозреватель файлов найдите нужный EXE-файл. Если его выделить, то справа будет отображаться краткая информация о нём.
Можно просмотреть результат в указанной папке.
Способ 3: DeDe
А DeDe будет полезна для декомпиляции программ на Delphi.
В отдельные вкладки будет выведена информация о классах, объектах, формах и процедурах.
Способ 4: EMS Source Rescuer
Декомпилятор EMS Source Rescuer позволяет работать с EXE-файлами, скомпилированными при помощи Delphi и C++ Builder.
Мы рассмотрели популярные декомпиляторы для файлов EXE, написанных на разных языках программирования. Если Вам известны другие рабочие варианты, напишите об этом в комментариях.
Мы рады, что смогли помочь Вам в решении проблемы.
Отблагодарите автора, поделитесь статьей в социальных сетях.
Опишите, что у вас не получилось. Наши специалисты постараются ответить максимально быстро.