mcpField
B
binary-analysis

binary-analysis

github.com/laurigates安全59136 次安装1 天前更新
代码仓库

关于 binary-analysis

用于检查和逆向分析二进制文件、固件及未知数据的技能,面向安全分析人员和开发者,涵盖文件识别、字符串提取、十六进制检查与嵌入文件查找。

主要功能

  1. 01识别未知文件类型
  2. 02提取字符串和符号
  3. 03扫描固件中的嵌入文件
  4. 04检查原始十六进制布局
  5. 05分析熵值与隐藏数据

适用场景

  1. 01初步分析陌生二进制文件
  2. 02检查固件内容
  3. 03定位嵌入式归档或附加数据

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/laurigates/claude-plugins --skill binary-analysis

安装后在 Claude Code 中输入/binary-analysis确认已加载。

详细介绍

二进制分析

用于探索和逆向分析二进制文件、固件和未知数据的工具。

何时使用此技能

在以下情况下使用此技能……在以下情况下改用 rg-code-search……
识别未知或非文本文件类型(file、xxd)搜索受版本控制的源文件中的正则表达式
从已编译的二进制文件/固件中提取字符串或符号检查仓库中以文本编码的文件是否包含硬编码模式
检查 ELF、Mach-O 或 .bin 文件的原始十六进制布局输入是人类可读的代码或 Markdown
在以下情况下使用此技能……在以下情况下改用 jq-json-processing……
对不透明的二进制格式进行逆向分析数据已经是结构化 JSON,等待转换
使用 binwalk -e 查找嵌入文件需要从已解析的 JSON 数据中提取字段

快速参考

工具用途安装
strings从二进制文件中提取可打印文本内置(binutils)
binwalk固件分析、文件提取pip install binwalk 或 cargo install binwalk
hexdump十六进制/ASCII 转储内置
xxd可反向转换的十六进制转储内置(vim)
file识别文件类型内置

strings - 从二进制文件中提取文本

查找嵌入在二进制文件中的人类可读字符串。

# Basic usage - find all printable strings (min 4 chars)
strings binary_file

# Set minimum string length
strings -n 10 binary_file          # Only strings >= 10 chars

# Show file offset of each string
strings -t x binary_file           # Hex offset
strings -t d binary_file           # Decimal offset

# Search for specific patterns
strings binary_file | grep -i password
strings binary_file | grep -E 'https?://'
strings binary_file | grep -i api_key

# Wide character strings (UTF-16)
strings -e l binary_file           # Little-endian 16-bit
strings -e b binary_file           # Big-endian 16-bit
strings -e L binary_file           # Little-endian 32-bit

# Scan entire file (not just initialized data sections)
strings -a binary_file

使用 strings 常见的发现:

  • 硬编码的凭据、API 密钥
  • URL 和端点
  • 错误消息(可提供功能线索)
  • 库版本
  • 调试符号和函数名称
  • 配置路径

binwalk - 固件分析

识别并提取嵌入文件、分析熵值、查找隐藏数据。

# Signature scan - identify embedded files/data
binwalk firmware.bin

# Extract all identified files
binwalk -e firmware.bin            # Extract to _firmware.bin.extracted/
binwalk --extract firmware.bin     # Same as -e

# Recursive extraction (extract files within extracted files)
binwalk -Me firmware.bin

# Entropy analysis - find compressed/encrypted regions
binwalk -E firmware.bin            # Generate entropy graph
binwalk --entropy firmware.bin

# Opcode analysis - identify CPU architecture
binwalk -A firmware.bin
binwalk --opcodes firmware.bin

# Raw byte extraction at offset
binwalk --dd='type:extension' firmware.bin

# Specific signature types
binwalk --signature firmware.bin   # File signatures only
binwalk --raw='\\x1f\\x8b' firmware.bin  # Search for gzip magic bytes

binwalk 输出解读:

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
0             0x0             TRX firmware header
28            0x1C            LZMA compressed data
1835008       0x1C0000        Squashfs filesystem, little endian

hexdump / xxd - 原始十六进制分析

# Hex + ASCII dump
hexdump -C binary_file
xxd binary_file

# Dump specific byte range
xxd -s 0x100 -l 256 binary_file    # 256 bytes starting at offset 0x100

# Just hex, no ASCII
hexdump -v -e '/1 "%02x "' binary_file

# Create hex dump that can be reversed
xxd binary_file > hex.txt
xxd -r hex.txt > reconstructed_binary

# Find specific bytes
xxd binary_file | grep "504b"      # Look for PK (ZIP signature)

file - 识别文件类型

# Basic identification
file unknown_file
file -i unknown_file               # MIME type

# Check multiple files
file *

# Follow symlinks
file -L symlink

常见分析工作流

探索未知二进制文件
# 1. Identify file type
file mystery_file

# 2. Check for embedded files
binwalk mystery_file

# 3. Extract strings
strings -n 8 mystery_file | head -100

# 4. Look at hex header
xxd mystery_file | head -20

# 5. Check entropy (compressed/encrypted?)
binwalk -E mystery_file
固件分析
# 1. Initial scan
binwalk firmware.bin

# 2. Extract everything
binwalk -Me firmware.bin

# 3. Explore extracted filesystem
find _firmware.bin.extracted -type f -name "*.conf"
find _firmware.bin.extracted -type f -name "passwd"

# 4. Search for secrets
grep -r "password" _firmware.bin.extracted/
strings -n 10 firmware.bin | grep -i -E "(pass|key|secret|token)"
查找隐藏数据
# Check for data after end of file
binwalk -E file.jpg               # Entropy spike at end = appended data

# Look for embedded archives
binwalk file.jpg | grep -E "(Zip|RAR|7z|gzip)"

# Extract with offset
dd if=file.jpg of=hidden.zip bs=1 skip=12345

文件签名(魔数)

签名十六进制文件类型
PK50 4B 03 04ZIP 压缩包
Rar!52 61 72 21RAR 压缩包
7z37 7A BC AF7-Zip
ELF7F 45 4C 46Linux 可执行文件
MZ4D 5AWindows 可执行文件
PNG89 50 4E 47PNG 图像
JFIFFF D8 FF E0JPEG 图像
sqsh73 71 73 68SquashFS
hsqs68 73 71 73SquashFS(LE)

提示

  • 从熵值入手:熵值高通常表示数据经过压缩或加密
  • 先查找字符串:通常能快速揭示文件用途
  • 检查文件头:前 16 个字节通常可以识别格式
  • 使用递归提取:固件中通常包含嵌套压缩包
  • 保存偏移量:记下有趣的位置,以便定向提取

评论

支持 Markdown