Binwalk


Описание Binwalk

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

Кроме прошивок, Binwalk может сканировать файлы и образы файловых систем для поиска множества различных встроенных типов файлов и файловых систем.

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

По умолчанию Binwalk показывает смещение, на котором найдена файловая система или файлы, также имеются опции для извлечения включённого файла из образа прошивки или файловой системы.

Binwalk умеет вычислять энтропию участков файла и строит график энтропии — это может помочь не упустить интересный участок если поиск по сигнатурам пропустил его.

GitHub: https://github.com/ReFirmLabs/binwalk

Автор: Craig Heffner, ReFirmLabs

Лицензия: MIT

Справка по Binwalk

Использование:

binwalk [ОПЦИИ] [ФАЙЛ1] [ФАЙЛ2] [ФАЙЛ3] ...

Опции:

Опции сканирования с дизассемблированием:
    -Y, --disasm                 Определить архитектуру ЦП файла с помощью дизассемблера Capstone
    -T, --minsn=ЧИСЛО            Минимальное количество последовательных инструкций, чтобы результат считался действительным (по умолчанию: 500)
    -k, --continue               Не останавливаться после первого совпадения

Опции сканирования по сигнатурам:
    -B, --signature              Сканировать целевой файл(ы) в поисках сигнатур популярных типов файлов
    -R, --raw=СТРОКА             Сканировать целевой файл(ы) в поисках указанной последовательности байтов
    -A, --opcodes                Сканировать целевой файл(ы) в поисках сигнатур популярных исполнимых опкодов
    -m, --magic=ФАЙЛ             Указать файл для использования в качестве источника сигнатур
    -b, --dumb                   Отключить умные ключевые слова сигнатур
    -I, --invalid                Показать результаты, которые отмечены как невалидные
    -x, --exclude=СТРОКА         Исключить результаты, которые совпадают со СТРОКОЙ
    -y, --include=СТРОКА         Показать только результаты, которые совпадают со СТРОКОЙ

Опции извлечения:
    -e, --extract                Автоматически извлекать известные типы файлов
    -D, --dd=ТИП[:РАСШИРЕНИЕ[:КОМАНДА]]  Извлекать ТИПЫ сигнатур (регулярное выражение), дать фалу РАСШИРЕНИЕ и выполнить КОМАНДУ
    -M, --matryoshka             Рекурсивно сканировать извлечённые файлы
    -d, --depth=ЧИСЛО            Ограничить глубину рекурсии матрешки (по умолчанию: 8 уровней)
    -C, --directory=СТРОКА       Извлечь файлы/папки в указанный каталог (по умолчанию: текущий рабочий каталог)
    -j, --size=ЧИСЛО             Ограничить размер каждого извлечённого файла
    -n, --count=ЧИСЛО            Ограничить количество извлекаемых файлов
    -r, --rm                     Удалить пустые и неправильные файлы после извлечения
    -z, --carve                  Вырезать данные из файлов, но не запускать утилиты извлечения
    -V, --subdirs                Извлечь в поддиректорию, в качестве имени берётся сдвиг

Опции энтропии:
    -E, --entropy                Вычислить энтропию файла
    -F, --fast                   Использовать более мыстрый, но менее детальный анализ энтропии
    -J, --save                   Сохранить график в PNG
    -Q, --nlegend                Убрать легенду с графика энтропии
    -N, --nplot                  Не генерировать график энтропии
    -H, --high=<float>           Устанавливает восходящий уровень порогового уровня энтропии. (по умолчанию: 0.95)
    -L, --low=<float>            Устанавливает нисходящий уровень порогового уровня энтропии. (по умолчанию: 0.85)

Опции сравнения бинарных данных:
    -W, --hexdump                Показать шестнадцатеричный дамп и выполнить сравнение с файлом или файлами
    -G, --green                  Показывать только строки, содержащие одинаковые байты для всех файлов
    -i, --red                    Показывать только строки, содержащие байты, различающиеся во всех файлах
    -U, --blue                   Показывать только строки, содержащие байты, которые в некоторых файлах различаются
    -u, --similar                Отображать только одинаковые строки во всех файлах
    -w, --terse                  Выполнить сравнение всех файлов, но отобразить шестнадцатеричный дамп только первого файла

Опции необработанного сжатия:
    -X, --deflate                Сканирование потоков необработанного сжатия с дефляцией
    -Z, --lzma                   Сканирование необработанных потоков сжатия LZMA
    -P, --partial                Выполните поверхностное, но более быстрое сканирование
    -S, --stop                   Остановитесь после первого результата

Общие опции:
    -l, --length=ЧИСЛО           Количество байтов для сканирования
    -o, --offset=ЧИСЛО           Начать сканирование с этого смещения файла
    -O, --base=ЧИСЛО             Добавьте базовый адрес ко всем напечатанным смещениям
    -K, --block=ЧИСЛО            Установить размер блока файла
    -g, --swap=ЧИСЛО             Реверз каждые n байтов перед сканированием
    -f, --log=ФАЙЛ               Записывать результаты в файл
    -c, --csv                    Сохранять результаты в файл в формате CSV
    -t, --term                   Форматировать вывод так, чтобы он подходил под окно терминала
    -q, --quiet                  Подавить вывод на стандартный вывод
    -v, --verbose                Включить подробный вывод
    -h, --help                   Показать вывод справки
    -a, --finclude=СТРОКА        Проверять только файлы, имена которых соответствуют этому регулярному выражению
    -p, --fexclude=СТРОКА        Не сканировать файлы, имена которых соответствуют этому регулярному выражению
    -s, --status=ЧИСЛО           Включить сервер состояния на указанном порту

Руководство по Binwalk

Страница man отсутствует.

-B, --signature

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

Используйте эту опцию, если хотите объединить сигнатурный анализ с дополнительными анализаторами, такими как --entropy:

binwalk --signature firmware.bin

DECIMAL   	HEX       	DESCRIPTION
-------------------------------------------------------------------------------------------------------------------
0         	0x0       	DLOB firmware header, boot partition: "dev=/dev/mtdblock/2"
112       	0x70      	LZMA compressed data, properties: 0x5D, dictionary size: 33554432 bytes, uncompressed size: 3797616 bytes
1310832   	0x140070  	PackImg section delimiter tag, little endian size: 13644032 bytes; big endian size: 3264512 bytes
1310864   	0x140090  	Squashfs filesystem, little endian, version 4.0, compression:lzma, size: 3264162 bytes,  1866 inodes, blocksize: 65536 bytes, created: Tue Apr  3 04:12:22 2012

-R, --raw=СТРОКА

Это позволяет вам искать в файле (файлах) указанную строку. Строка для поиска может включать в себя восьмеричные и/или шестнадцатеричные значения с экранированием.

Используйте эту опцию, когда вам нужно найти определённую последовательность сырых байтов:

binwalk -R "\x00\x01\x02\x03\x04" firmware.bin

DECIMAL   	HEX       	DESCRIPTION
-------------------------------------------------------------------------------------------------------------------
377654    	0x5C336   	Raw string signature

-A, --opcodes

Эта опция инструктирует binwalk искать в указанном файле (файлах) исполняемых кодов операций (opcode), общих для различных архитектур ЦП. Обратите внимание, что некоторые сигнатуры опкодов короткие и поэтому могут давать ложноположительные результаты.

Используйте это, когда вам нужно найти исполняемый код в файле или если вам нужно определить архитектуру исполняемого файла:

binwalk -A firmware.bin

DECIMAL         HEX             DESCRIPTION
-------------------------------------------------------------------------------------------------------------------
268             0x10C           MIPS instructions, function prologue
412             0x19C           MIPS instructions, function prologue
636             0x27C           MIPS instructions, function prologue
812             0x32C           MIPS instructions, function epilogue
920             0x398           MIPS instructions, function epilogue
948             0x3B4           MIPS instructions, function prologue
1056            0x420           MIPS instructions, function epilogue
1080            0x438           MIPS instructions, function prologue
1356            0x54C           MIPS instructions, function epilogue
1392            0x570           MIPS instructions, function prologue
1836            0x72C           MIPS instructions, function epilogue
2012            0x7DC           MIPS instructions, function prologue
2260            0x8D4           MIPS instructions, function epilogue
2512            0x9D0           MIPS instructions, function prologue
2552            0x9F8           MIPS instructions, function epilogue

-m, --magic=ФАЙЛ

Загрузить альтернативный файл с набором сигнатур вместо файла по умолчанию.

Используйте это, если у вас есть собственный файл сигнатур, содержащий подписи, которые вы хотите найти:

binwalk -m ./foobar.mgc firmware.bin

DECIMAL         HEX             DESCRIPTION
-------------------------------------------------------------------------------------------------------------------
268             0x10C           Foobar
412             0x19C           Foobar
636             0x27C           Foobar

-b, --dumb

Отключает «умное» сопоставление подписей.

Полезно, когда ключевые слова умной подписи в ложноположительных подписях вызывают пропуск других действительных подписей (например, через ключевое слово jump-to-offset):

binwalk -b firmware.bin

-I, --invalid

Отображает все результаты, даже отмеченные как неверные.

Полезно, если вы считаете, что binwalk обрабатывает верный файл как неверный, но эта опция может выводить много мусора:

binwalk -I firmware.bin

-x, --exclude=ФИЛЬТР

Исключает подписи, соответствующие указанному фильтру исключения. Фильтры — это регулярные выражения в нижнем регистре; можно указать несколько фильтров.

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

Полезно для исключения ненужных или неинтересных результатов:

Исключить подписи вычислителя HP и OSX mach-o:

binwalk -x 'mach-o' -x '^hp' firmware.bin

-y, --include=ФИЛЬТР

Включает только подписи, соответствующие указанному фильтру включения. Фильтры — это регулярные выражения в нижнем регистре; можно указать несколько фильтров.

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

Полезно при поиске только определённых подписей или типов подписей:

Искать только сигнатуры файловой системы:

binwalk -y 'filesystem' firmware.bin

-Y, --disasm

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

Указание --verbose для этого сканирования дополнительно распечатает дизассемблированные инструкции.

Обычно более надёжен, чем простой анализ сигнатур, выполняемый --opcodes, но поддерживает меньшее количество архитектур:

binwalk --disasm firmware.bin

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
428           0x1AC           MIPS executable code, 32/64-bit, little endian, at least 750 valid instructions

-T, --minsn

Установит минимальное количество последовательных инструкций, чтобы результат --disasm считался действительным. По умолчанию 500 инструкций:

binwalk --minsn=1200 -Y firmware.bin

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
428           0x1AC           MIPS executable code, 32/64-bit, little endian, at least 1250 valid instructions

-k, --continue

Даёт команду --disasm не останавливаться на первом результате:

binwalk --continue -Y firmware.bin

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
428           0x1AC           MIPS executable code, 32/64-bit, little endian, at least 1250 valid instructions
1048576       0x100000        MIPS executable code, 32/64-bit, little endian, at least 1250 valid instructions

-E, --entropy

Выполняет энтропийный анализ входных файлов, печатает сырые данные энтропии и генерирует энтропийные графики.

Энтропийный анализ можно комбинировать с --signature, --raw или --opcodes для лучшего понимания целевого файла(ов).

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

binwalk -E firmware.bin
DECIMAL       HEXADECIMAL     ENTROPY
--------------------------------------------------------------------------------
0             0x0             Rising entropy edge (0.983751)
1155072       0x11A000        Falling entropy edge (0.000000)
1181696       0x120800        Rising entropy edge (0.990546)
3780608       0x39B000        Falling entropy edge (0.000000)

В сочетании с параметром --verbose выводится необработанная энтропия, рассчитанная для каждого блока данных:

binwalk -E --verbose firmware.bin

DECIMAL         HEX             ENTROPY ANALYSIS
--------------------------------------------------------------------------------
0               0x0             0.964914
1024            0x400           0.978591
2048            0x800           0.973048
3072            0xC00           0.976195
4096            0x1000          0.976072
5120            0x1400          0.976734
6144            0x1800          0.976861
7168            0x1C00          0.972385
8192            0x2000          0.972518

ПРЕДУПРЕЖДЕНИЕ API PYTHON: модуль построения графиков, используемый binwalk (pyqtgraph), по завершении вызывает os._exit; это очевидно необходимо для решения различных проблем QT. При запуске binwalk из командной строки энтропийный анализ всегда выполняется в последнюю очередь, что не вызывает беспокойства. Однако при вызове энтропийного анализа через API обязательно отключите построение графиков (--nplot), чтобы предотвратить преждевременный выход из скрипта.

-J, --save

Автоматически сохраняет график энтропии, созданный с помощью --entropy, в файл PNG вместо его отображения.

binwalk --save -E firmware.bin

-Q, --nlegend

Опускает легенду из графиков энтропии, созданных с помощью --entropy:

binwalk --entropy -Q firmware.bin

-N, --nplot

Отключает графические графики энтропии для сканирования --entropy.

binwalk --entropy -N firmware.bin

-H, --high=ЧИСЛО_С_ПЛАВАЮЩЕЙ_ЗАПЯТОЙ

Устанавливает восходящий уровень порогового уровня энтропии. Действительно только при использовании с --entropy. Указанное значение должно быть от 0 до 1:

binwalk --entropy -H .9 firmware.bin

-L, --low=ЧИСЛО_С_ПЛАВАЮЩЕЙ_ЗАПЯТОЙ

Устанавливает нисходящий уровень порогового уровня энтропии. Действительно только при использовании с --entropy. Указанное значение должно быть от 0 до 1:

binwalk --entropy -L .3 firmware.bin

-W, --hexdump

Выполняет шестнадцатеричный дамп входных файлов и цветовую кодировку байтов следующим образом:

  • Зелёный — эти байты были одинаковыми во всех файлах.
  • Красный — эти байты были разными во всех файлах
  • Синий — эти байты были разными только в некоторых файлах.

Можно искать различия в любом произвольном количестве файлов; дополнительные полезные параметры --block, --offset, --length и --terse:

binwalk -W --block=8 --length=64 firmware1.bin firmware2.bin firmware3.bin

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

Смотрите также: Как отображать man-страницы в цвете в Linux

-G, --green

Отображать только строки, содержащие зелёные (одинаковые во всех файлах) байты во время --hexdump:

binwalk -W --green firmware1.bin firmware2.bin firmware3.bin

-i, --red

Отображать только строки, содержащие красные (разные во всех файлах) байты во время --hexdump:

binwalk -W --red firmware1.bin firmware2.bin firmware3.bin

-U, --blue

Отображать только строки, содержащие синие (разные в некоторых файлах) байты во время --hexdump:

binwalk -W --blue firmware1.bin firmware2.bin firmware3.bin

-w, --terse

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

Полезно при просмотре большого количества файлов, которые не помещаются на экране:

binwalk -W --terse firmware1.bin firmware2.bin firmware3.bin

-e, --extract

Загружает общие правила извлечения --dd из предопределённого файла и пользовательские правила из ~/.config/binwalk/config/extract.conf.

binwalk -e firmware.bin

-D, --dd=<type[:ext[:cmd]]>

Извлекает файлы, идентифицированные во время сканирования --signature. Можно указать несколько параметров --dd.

  • type — это строка *в нижнем регистре*, содержащаяся в описании подписи (поддерживаются регулярные выражения)
  • ext — это расширение файла, которое следует использовать при сохранении диска с данными (по умолчанию нет)
  • cmd — это необязательная команда для выполнения после сохранения данных на диск

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

В следующем примере демонстрируется указание правила извлечения с помощью параметра --dd, который будет извлекать любую подпись, содержащую строку «zip archive» с расширением файла «zip», а затем выполнять команду «unzip». Кроме того, изображения PNG извлекаются «как есть» с расширением файла «PNG».

Обратите внимание на использование заполнителя «%e». Этот заполнитель будет заменён относительным путём к извлечённому файлу при выполнении команды unzip:

binwalk -D 'zip archive:zip:unzip %e' -D 'png image:png' firmware.bin

-M, --matryoshka

Эта опция будет рекурсивно сканировать извлечённые файлы во время сканирования --signature. Допустимо только при использовании с --extract или --dd.

binwalk -e -M firmware.bin

-C, --directory=СТРОКА

Устанавливает выходной каталог для извлечённых данных (по умолчанию: текущий рабочий каталог).

Применимо только при использовании с параметрами --extract или --dd:

binwalk -e --directory=/tmp firmware.bin

-d, --depth=ЦЕЛОЕ_ЧИСЛО

Ограничивает глубину рекурсии --matryoshka. По умолчанию глубина установлена на 8.

Применимо только при использовании с параметром --matryoshka:

binwalk -Me -d 5 firmware.bin

-j, --size=ЦЕЛОЕ_ЧИСЛО

Ограничивает размер данных, вырезанных из целевого файла(ов). По умолчанию ограничений по размеру нет.

Допустимо только при использовании с --extract или --dd.

Обратите внимание, что этот параметр не ограничивает размер данных, извлекаемых/распаковываемых внешними утилитами извлечения.

Полезно при вырезании или извлечении данных из больших файлов при ограниченном дисковым пространстве:

binwalk -e --size=0x100000 firmware.bin

-r, --rm

Очищает файлы нулевого размера и файлы, которые не могли быть обработаны утилитами извлечения во время извлечения.

Допустимо только при использовании с --extract или --dd.

Полезно для очистки ложноположительных файлов, скопированных из целевого файла(ов) во время извлечения:

binwalk -e -r firmware.bin

-z, --carve

Выполняет только вырезание данных, не запускает внешние утилиты извлечения.

Допустимо только при использовании с --extract или --dd.

Полезно, когда вы хотите просто вырезать данные из целевого файла(ов), но не извлекать/распаковывать эти данные автоматически:

binwalk -e --carve firmware.bin

-X, --deflate

Определяет вероятные потоки необработанных сжатых сжатых данных методом грубой силы.

Полезно для восстановления данных из файлов с повреждёнными/изменёнными/отсутствующими заголовками. Можно комбинировать с --lzma.

Это сканирование может быть медленным, поэтому полезно ограничить область сканирования с помощью --offset и/или --length:

binwalk --deflate -o 0x100 -l 10000 firmware.bin

-Z, --lzma

Определяет возможные потоки необработанных сжатых данных LZMA методом грубой силы.

Полезно для восстановления данных из файлов с повреждёнными/изменёнными/отсутствующими заголовками. Можно комбинировать с --deflate.

Из-за различного количества опций сжатия LZMA это сканирование может быть очень медленным, поэтому полезно ограничить сканируемую область с помощью --offset и/или --length:

binwalk --lzma -o 0x100 -l 10000 firmware.bin

-P, --partial

Искать только сжатые потоки использующие популярные параметры сжатия. Может значительно повысить скорость сканирования --lzma:

binwalk --partial -Z -o 0x100 -l 10000 firmware.bin

-S, --stop

При использовании с параметрами --lzma и/или --deflate сканирование будет остановлено после отображения первого результата:

binwalk --stop -Z firmware.bin

-l, --length=ЦЕЛОЕ_ЧИСЛО

Устанавливает количество байтов для анализа в целевом файле:

binwalk --length=0x100 firmware.bin

-o, --offset=ЦЕЛОЕ_ЧИСЛО

Устанавливает начальное смещение, с которого следует начать анализ целевого файла. Также можно указать отрицательное смещение (расстояние от конца файла):

binwalk --offset=0x100 firmware.bin

-O, --base=ЦЕЛОЕ_ЧИСЛО

Устанавливает базовый адрес для всех печатаемых смещений. Это значение будет добавлено к смещению исходного файла для всех распечатанных результатов:

binwalk --base=0x80001000 firmware.bin

-K, --block=ЦЕЛОЕ_ЧИСЛО

Устанавливает размер блока в байтах, используемого во время анализа.

При использовании с --entropy это определяет размер каждого блока, анализируемого во время энтропийного анализа.

При использовании с --hexdump это устанавливает количество байтов, отображаемых на строку в шестнадцатеричном выводе.

binwalk --diff -K 8 firmware1.bin firmware2.bin

-g, --swap=ЦЕЛОЕ_ЧИСЛО

Возвращается на каждые n байтов перед их сканированием:

binwalk --swap=2 firmware.bin

-f, --log=ФАЙЛ

Записывать результаты сканирования в указанный файл.

Данные, сохранённые в файле журнала, будут идентичны данным, отображаемым в терминале, если не указан параметр --csv.

Данные будут сохраняться в файл журнала, даже если указан параметр --quiet:

binwalk --log=binwalk.log firmware.bin

-c, --csv

Сохраняет данные журнала в формате CSV. Эта опция игнорируется, если используется с --cast или --hexdump.

Действует только в сочетании с параметром --log:

binwalk --log=binwalk.log --csv firmware.bin

-t, --term

Форматирует вывод в соответствии с текущей шириной окна терминала.

Полезно для повышения читабельности вывода с переносом длинной строки:

binwalk --term firmware.bin

DECIMAL   	HEX       	DESCRIPTION
-------------------------------------------------------------------------------------------------------
0         	0x0       	DLOB firmware header, boot partition: "dev=/dev/mtdblock/2"
112       	0x70      	LZMA compressed data, properties: 0x5D, dictionary size: 33554432
                        bytes, uncompressed size: 3805904 bytes
1310832   	0x140070  	PackImg section delimiter tag, little endian size: 15741184 bytes; big
                        endian size: 3272704 bytes
1310864   	0x140090  	Squashfs filesystem, little endian, version 4.0, compression:lzma,
                        size: 3268870 bytes,  1860 inodes, blocksize: 65536 bytes, created:
                        Mon Apr 22 04:56:42 2013

-q, --quiet

Отключает вывод на стандартный вывод.

Наиболее удобно при использовании с --log или подробным сканированием, например --entropy:

binwalk --quiet -f binwalk.log firmware.bin

-v, --verbose

Включает подробный вывод, включая MD5 целевого файла и временную метку сканирования.

Если указано дважды, то будет отображаться вывод внешних утилит извлечения, если также была указана опция --extract:

binwalk --verbose firmware.bin

Scan Time:     2013-11-10 21:04:04
Signatures:    265
Target File:   firmware.bin
MD5 Checksum:  6b91cdff1b4f0134b24b7041e079dd3e

DECIMAL   	HEX       	DESCRIPTION
-------------------------------------------------------------------------------------------------------------------
0         	0x0       	DLOB firmware header, boot partition: "dev=/dev/mtdblock/2"
112       	0x70      	LZMA compressed data, properties: 0x5D, dictionary size: 33554432 bytes, uncompressed size: 3805904 bytes
1310832   	0x140070  	PackImg section delimiter tag, little endian size: 15741184 bytes; big endian size: 3272704 bytes
1310864   	0x140090  	Squashfs filesystem, little endian, version 4.0, compression:lzma, size: 3268870 bytes,  1860 inodes, blocksize: 65536 bytes, created: Mon Apr 22 04:56:42 2013

-h, --help

Отображает вывод справки по binwalk:

binwalk --help

-a, --finclude=СТРОКА

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

binwalk -M -e --finclude='\.bin$' firmware.bin

-p, --fexclude=СТРОКА

Не проверять файлы, имена которых соответствуют заданной строке регулярного выражения. Особенно полезно в сочетании с --matryoshka и --extract.

binwalk -M -e --fexclude='\.pdf$' firmware_archive.zip

-s, --status=ЦЕЛОЕ_ЧИСЛО

Включите сервер состояния на указанном номере порта. Сервер состояния слушает только localhost и распечатывает удобочитаемые данные ASCII, относящиеся к текущему состоянию сканирования. Вы можете подключиться к нему с помощью telnet, netcat и так далее.

binwalk --status=8080 firmware_archive.zip

Примеры запуска Binwalk

Сканирование прошивки

Основная – и, безусловно, самая популярная – функция binwalk – это сканирование по сигнатурам.

Binwalk может сканировать образ прошивки на предмет множества различных встроенных типов файлов и файловых систем; просто дайте ему список файлов для сканирования:

binwalk firmware.bin

Пример вывода:

DECIMAL   	HEX       	DESCRIPTION
-------------------------------------------------------------------------------------------------------------------
0         	0x0       	DLOB firmware header, boot partition: "dev=/dev/mtdblock/2"
112       	0x70      	LZMA compressed data, properties: 0x5D, dictionary size: 33554432 bytes, uncompressed size: 3797616 bytes
1310832   	0x140070  	PackImg section delimiter tag, little endian size: 13644032 bytes; big endian size: 3264512 bytes
1310864   	0x140090  	Squashfs filesystem, little endian, version 4.0, compression:lzma, size: 3264162 bytes,  1866 inodes, blocksize: 65536 bytes, created: Tue Apr  3 04:12:22 2012

Извлечение файлов

С помощью параметра -e вы можете указать binwalk извлечь любые файлы, которые он найдёт в образе прошивки:

binwalk -e firmware.bin

Binwalk даже может рекурсивно сканировать файлы при их извлечении, если вы также укажете опцию -M:

binwalk -Me firmware.bin

И если указана опция -r, любые сигнатуры файлов, которые не удалось извлечь или которые привели к файлам нулевого размера, будут автоматически удалены:

binwalk -Mre firmware.bin

Чтобы извлечь файлы по одному конкретному типу сигнатуры, укажите одну или несколько опций -D:

binwalk -D 'png image:png' firmware.bin

Анализ энтропии

Что произойдёт, если binwalk не сообщит ни о каких найденных сигнатурах? Или как узнать, что binwalk не пропустил ничего интересного?

Анализ энтропии может помочь выявить интересные разделы данных внутри образа прошивки:

binwalk -E firmware.bin

СОВЕТ: Вы можете комбинировать другие сканирования со сканированием энтропии. Например, вы можете объединить сканирование по сигнатурам со сканированием энтропии:

binwalk -B -E firmware.bin

Пример вывода:

DECIMAL   	HEX       	DESCRIPTION
-------------------------------------------------------------------------------------------------------------------
36625     	0x8F11    	Zlib header, default compression

Установка Binwalk

Установка в Kali Linux

Программа предустановлена в Kali Linux.

Для установки в минимальные сборки выполните:

sudo apt install binwalk

Для установки всех рекомендуемых зависимостей выполните команды:

wget https://raw.githubusercontent.com/ReFirmLabs/binwalk/master/deps.sh
sudo bash deps.sh --yes

Если предыдущая команда завершилась ошибкой, то выполните команду:

sudo apt install git locales build-essential qtbase5-dev mtd-utils gzip bzip2 tar arj lhasa p7zip p7zip-full cabextract util-linux firmware-mod-kit cramfsswap squashfs-tools zlib1g-dev liblzma-dev liblzo2-dev sleuthkit default-jdk lzop cpio

Установка в BlackArch

Программа предустановлена в BlackArch.

Для установки в минимальные сборки выполните:

sudo pacman -S binwalk

Для установки всех рекомендуемых зависимостей выполните команду:

sudo pacman -S python-opengl python-capstone arj cabextract cpio gzip mtd-utils p7zip squashfs-tools tar bzip2 unrar xz lhasa sleuthkit

Установка в Debian, Linux Mint, Ubuntu

sudo apt update
wget https://github.com/ReFirmLabs/binwalk/archive/master.zip
unzip master.zip
cd binwalk-master
sudo python setup.py uninstall
sudo python setup.py install

Для установки всех рекомендуемых зависимостей выполните команду:

sudo bash deps.sh --yes

Если предыдущая команда завершилась ошибкой, то выполните команду:

sudo apt install git locales build-essential qtbase5-dev mtd-utils gzip bzip2 tar arj lhasa p7zip p7zip-full cabextract util-linux firmware-mod-kit cramfsswap squashfs-tools zlib1g-dev liblzma-dev liblzo2-dev sleuthkit default-jdk lzop cpio

Информация об установке в другие операционные системы будет добавлена позже.

Скриншоты Binwalk

Инструкции по Binwalk

Близкие программы:

  • TrID (79%)
  • Detect It Easy (79%)
  • YARA (55%)
  • JS Beautifier (55%)
  • JStillery (55%)
  • ext4magic (RANDOM - 1%)
  • Рекомендуется Вам:

    Comments are Closed