How to use the command "binwalk" (with examples)

How to use the command "binwalk" (with examples)

Binwalk is a firmware analysis tool that allows users to analyze binary files for embedded files and executable code. It supports multiple scanning techniques, signature detection, and extraction capabilities. This article will illustrate various use cases of the “binwalk” command.

Use case 1: Scan a binary file

Code:

binwalk path/to/binary

Motivation: By scanning a binary file, users can quickly analyze the file for embedded files or executable code. This can be useful when inspecting firmware files or reverse engineering software.

Explanation:

  • binwalk - the command to invoke the Binwalk tool.
  • path/to/binary - the path to the binary file to be scanned.

Example output:

DECIMAL       HEXADECIMAL     DESCRIPTION
----------------------------------------------------------------------------------------------
0             0x0             ELF 64-bit LSB shared object, x86-64, version 1 (SYSV)
3032          0xBC8           MySQL ISAM compressed data file Version 7
5645          0x1605          XML document, version: "1.0"

Use case 2: Extract files from a binary, specifying the output directory

Code:

binwalk --extract --directory output_directory path/to/binary

Motivation: Sometimes, it’s necessary to extract embedded files from a binary for further analysis. By specifying the output directory, users can easily organize extracted files.

Explanation:

  • --extract - flag to enable file extraction.
  • --directory output_directory - specifies the directory where extracted files will be saved.
  • path/to/binary - the path to the binary file from which files will be extracted.

Example output:

output_directory/
├── file1.jpg
└── file2.png

Use case 3: Recursively extract files from a binary limiting the recursion depth to 2

Code:

binwalk --extract --matryoshka --depth 2 path/to/binary

Motivation: In some cases, binaries may contain embedded files within embedded files. By using the recursive extraction feature, users can extract all files within the binary up to a certain depth.

Explanation:

  • --matryoshka - flag to enable recursive extraction.
  • --depth 2 - limits the recursion depth to 2 levels.
  • path/to/binary - the path to the binary file from which files will be recursively extracted.

Example output:

path/to/binary/
├── file1.jpg
└── file2.png

path/to/binary/file1.jpg/
├── file3.pdf
└── file4.txt

path/to/binary/file2.png/
└── file5.bmp

Use case 4: Extract files from a binary with the specified file signature

Code:

binwalk --dd 'png image:png' path/to/binary

Motivation: By specifying a file signature, users can extract only the files that have a particular signature. This allows for targeted extraction based on file types.

Explanation:

  • --dd 'png image:png' - specifies the file signature to search for (png image) and the desired file extension (png).
  • path/to/binary - the path to the binary file from which files will be extracted.

Example output:

0             0x0             PNG image, 800 x 600, 8-bit/color RGBA, non-interlaced

Use case 5: Analyze the entropy of a binary, saving the plot with the same name as the binary and .png extension appended

Code:

binwalk --entropy --save path/to/binary

Motivation: Analyzing the entropy of a binary file can provide insights into its structure and whether it contains encrypted or compressed data. Saving the entropy plot allows for further examination and documentation.

Explanation:

  • --entropy - flag to enable entropy analysis.
  • --save - flag to save the entropy plot.
  • path/to/binary - the path to the binary file to be analyzed.

Example output:

Saved entropy plot as: path/to/binary.png

Use case 6: Combine entropy, signature, and opcodes analysis in a single command

Code:

binwalk --entropy --signature --opcodes path/to/binary

Motivation: Sometimes, a comprehensive analysis of a binary file is required. By combining entropy, signature, and opcode analysis, users can gather a wide range of information about the binary.

Explanation:

  • --entropy - flag to enable entropy analysis.
  • --signature - flag to enable signature detection.
  • --opcodes - flag to enable opcode analysis.
  • path/to/binary - the path to the binary file to be analyzed.

Example output:

DECIMAL       HEXADECIMAL     ENTROPY     DESCRIPTION
----------------------------------------------------------------------------------------------
0             0x0             7.99999    ELF 64-bit LSB shared object, x86-64, version 1 (SYSV)
3032          0xBC8           7.6455     MySQL ISAM compressed data file Version 7
5645          0x1605          5.74188    XML document, version: "1.0"

SIGNATURES:
DECIMAL       HEXADECIMAL     DESCRIPTION
----------------------------------------------------------------------------------------------
0             0x0             ELF 64-bit LSB shared object, x86-64, version 1 (SYSV)
3032          0xBC8           MySQL ISAM compressed data file Version 7
5645          0x1605          XML document, version: "1.0"

OPCODES:
DECIMAL       HEXADECIMAL     DESCRIPTION
----------------------------------------------------------------------------------------------
0             0x0             ELF 64-bit LSB shared object, x86-64, version 1 (SYSV)
3032          0xBC8           MySQL ISAM compressed data file Version 7
5645          0x1605          XML document, version: "1.0"

Conclusion:

The “binwalk” command offers a range of capabilities for analyzing binary files. By scanning, extracting, and analyzing various aspects of a binary, users can gain valuable insights into its contents and structure. Whether it’s extracting embedded files or examining the entropy, “binwalk” provides a powerful set of tools for firmware analysis.

Related Posts

How to Use mate-screenshot (with examples)

How to Use mate-screenshot (with examples)

mate-screenshot is a command-line tool that allows you to capture screenshots in the MATE desktop environment.

Read More
Bash "local" Command (with examples)

Bash "local" Command (with examples)

The “local” command is a built-in command in Bash that is used to declare local variables and assign values to them.

Read More
Using the `compare` command to visually annotate the difference between two images (with examples)

Using the `compare` command to visually annotate the difference between two images (with examples)

Motivation When working with images, it is often necessary to compare two images and identify the differences between them.

Read More