关于 binary-analysis
用于检查和逆向分析二进制文件、固件及未知数据的技能,面向安全分析人员和开发者,涵盖文件识别、字符串提取、十六进制检查与嵌入文件查找。
主要功能
- 01识别未知文件类型
- 02提取字符串和符号
- 03扫描固件中的嵌入文件
- 04检查原始十六进制布局
- 05分析熵值与隐藏数据
适用场景
- 01初步分析陌生二进制文件
- 02检查固件内容
- 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
文件签名(魔数)
| 签名 | 十六进制 | 文件类型 |
|---|---|---|
PK | 50 4B 03 04 | ZIP 压缩包 |
Rar! | 52 61 72 21 | RAR 压缩包 |
7z | 37 7A BC AF | 7-Zip |
ELF | 7F 45 4C 46 | Linux 可执行文件 |
MZ | 4D 5A | Windows 可执行文件 |
PNG | 89 50 4E 47 | PNG 图像 |
JFIF | FF D8 FF E0 | JPEG 图像 |
sqsh | 73 71 73 68 | SquashFS |
hsqs | 68 73 71 73 | SquashFS(LE) |
提示
- 从熵值入手:熵值高通常表示数据经过压缩或加密
- 先查找字符串:通常能快速揭示文件用途
- 检查文件头:前 16 个字节通常可以识别格式
- 使用递归提取:固件中通常包含嵌套压缩包
- 保存偏移量:记下有趣的位置,以便定向提取
评论
支持 Markdown