二进制文件信息收集工具

作者:Vesper Vei
5 分钟阅读

目录

  1. 二进制文件信息收集工具
  2. 概述
  3. 工具列表
    1. nm
    2. ldd
    3. strings
    4. readelf

二进制文件信息收集工具

概述

工欲善其事,必先利其器。在二进制代码分析的过程中,需要借助一些工具来收集二进制代码的信息。 本文章用于记录一些查看二进制文件信息的工具,均为命令行使用。会收录的有: nm , ldd , strings , ps , strace , ltrace , ROPgadget , objdump , readelf 等,主要记录一些可能用到的参数还有回显信息的说明。

工具列表

nm

nm 用于查看二进制文件中的符号表(包括函数、全局变量、未定义符号等)。在漏洞利用、逆向分析中,可用于查找函数地址、判断符号是否被 strip、分析链接情况等。

常用参数

常见符号类型说明

nm 输出的第二列是符号类型(section type),常见含义如下: image.png|579

字母含义
T / tText 段(代码段)中的符号(T = global,t = local)
D / dData 段中的符号
B / bBSS 段(未初始化数据)符号
R / r只读数据段符号
UUndefined symbol(未定义符号,需要外部库解析)
W / wWeak symbol(弱符号)
AAbsolute symbol(绝对符号,地址不随链接变化)
V / vWeak object(弱对象)

在 PWN 中,最常用的是:
T/t:找函数位置
U:判断链接依赖
B/D:分析全局变量与 GOT/数据结构位置

ldd

ldd 用于查看一个 ELF 可执行文件在运行时会加载哪些 共享库(shared libraries),以及每个库被解析到的实际路径与基址(加载地址)。在漏洞利用中,用于确定 libc 版本、检查是否使用自定义 loader、判断是否存在可控的库劫持场景。

常用参数

⚠️ 注意: 在某些情况下,ldd <file> 会实际“执行” ELF 文件的初始化逻辑,因此对恶意样本使用时需谨慎。
推荐使用: `LD_TRACE_LOADED_OBJECTS=1 ./可执行文件

回显样例与说明

Terminal window
$ ldd ./pwn
linux-vdso.so.1 (0x00007fffffffe000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007ffff7a0d000)
/lib64/ld-linux-x86-64.so.2 (0x00007ffff7dd0000)

字段含义:

在 PWN 中常见用途

常见异常提示

  1. not found libmylib.so => not found 表示系统无法解析该库,通常是路径问题。

  2. statically linked not a dynamic executable 表示 ELF 使用静态链接(如 musl 编译),无法通过 ldd 查看依赖。

strings

strings 用于从二进制文件中提取可打印字符串(ASCII/UTF-8),包括程序文本字面量、日志、命令、路径、格式化字符串等。在漏洞利用中常用于快速定位关键函数名、调试信息、敏感路径与 flag 线索。

常用参数

常见输出类型说明

strings 能提取的信息包含但不限于:

字符串类型示例用途
调试信息"Enter password:"快速定位逻辑点
路径"/bin/sh"RCE / system 利用线索
格式化字符串"%p %s %n"格式化字符串漏洞判断
错误/日志"invalid length"对照逆向流程
链接库名称"GLIBC_2.31"识别 libc 版本
编译器信息"GCC: (Ubuntu 9.4.0-1)"判断比赛环境

示例输出说明

Terminal window
$ strings ./pwn
/bin/sh
Enter your input:
Correct!
GLIBC_2.31
puts
system

解析:

PWN 中常见用途

readelf

readelf 是读取 ELF 格式信息最全面、最专业的工具之一,直接解析 ELF 结构,不依赖系统环境。相比 objdumpreadelf 更偏向数据显示,输出更精确、更适合二进制分析。

常用于查看:段表、节表、动态信息、符号表、重定位表、程序头、解释器(loader)等。


常用参数


回显内容说明(重点字段)

1. ELF header (-h)
Entry point address: 0x401080
Type: EXEC (Executable file)
Machine: Advanced Micro Devices X86-64
Type: DYN → PIE 开启
Type: EXEC → PIE 关闭

2. Program Headers (-l)
LOAD 0x000000 0x400000 0x400000 0x2000 ...
INTERP /lib64/ld-linux-x86-64.so.2
DYNAMIC 0x401dd0 ...
GNU_RELRO 0x401000 ...

重点字段:

3. Section Headers (-S)

主要用于定位关键节:

.text 可执行代码区域
.data 可写数据
.bss 未初始化变量
.plt Procedure Linkage Table
.got Global Offset Table
.got.plt 延迟绑定 GOT
.init_array 程序启动时调用(构造函数)
.fini_array 程序退出时调用(析构函数)

在 PWN 中:

4. 符号表 (-s)

示例:

0000000000401030 system@plt
0000000000401040 puts@plt
0000000000404020 __libc_start_main

用途:

静态编译文件会在这里看到大量符号。

5. 动态段 (-d)

示例:

(NEEDED) Shared library: [libc.so.6]
(RPATH) Library rpath: [/home/pwn/lib]
(INTERP) Program interpreter: ./ld-2.31.so

PWN 用途:

6. 重定位表 (-r)
000000404018 R_X86_64_JUMP_SLOT puts@GLIBC_2.2.5

PWN 用途:

在 PWN 中的常见用途(总结版)


关系图谱

Loading graph...