汇总: pwn分析工具GDB + peda + objdump + readelf

汇总: pwn分析工具GDB + peda + objdump + readelf

  • 前言
  • 1、GDB的基本操作
  • 2、GDB增强工具peda
  • 3、GNU工具链 (GNU Toolchain): objdump + readelf


前言

本篇内容持续完善中…

  • GDB是一个由GNU开源组织发布的、UNIX/LINUX操作系统下的、基于命令行的、功能强大的程序调试工具. GDB主要来调试C/C++语言写的程序,GDB调试是可执行文件而不是.c文件.
  • GDB的一些增强工具:peda,pwbdbg,gef等.
  • GNU工具链 (GNU Toolchain) 是一组用于开发应用程序和操作系统的编程工具的集合,这些工具构成了一个完整的系统。GNU工具链包括GDB、GCC、GNU Binutils、GNU make等部分.

熟练掌握GDB-> gdb peda -> GNU Binutils: objdump readelf等工具,对调试很重要.


1、GDB的基本操作

GDB是一个终端调试器, 这就要习惯于使用命令来操作.

常用命令:

  • run 简记 r 运行GDB调试

  • quit 简记 q 退出GDB调试

  • list 简记 l 可以列出所调试程序的代码.

    • list+***** 列出******附近的代码
      汇总: pwn分析工具GDB + peda + objdump + readelf_第1张图片
  • break n (简写b n) 在第n行处设置断点

    • break [function] 在函数体处设置断点
    • break [line] 在源文件指定行下断点
    • break -N break + N 在源文件前n行 后n行下断点
    • break [address] 在程序指令地址处下断点
    • delete d 删除断点, 不带参数时删除所有断点
      在这里插入图片描述
      在这里插入图片描述
  • info (简写i)

    • i b 查看断点
      在这里插入图片描述
    • info reg 查看寄存器
    • 在寄存器之前添加 $,即可以显示各个寄存器的内容
      汇总: pwn分析工具GDB + peda + objdump + readelf_第2张图片
    • info threads 打印所有线程信息
      在这里插入图片描述
    • info frame 打印指定栈帧的详细信息
      汇总: pwn分析工具GDB + peda + objdump + readelf_第3张图片 -
    • info proc 查看proc里的进程信息
      在这里插入图片描述
  • step 简记s step N 单步步进,参数n表示执行n次

  • next 简记n next N单步步过.

  • continue 简记 c continue N 继续运行程序,程序会在遇到断点后再次暂停运行,如果没有遇到断点就会一直运行到结束。

  • x/nfu 显示内存的内容,x这个名字的由来是eXamining.

    • x/格式 地址
      格式 说明
      x 显示为十六进制数
      d 显示为十进制数
      u 显示为无符号十进制数
      o 显示为八进制数
      t 显示为二进制数,t的由来是two
      a 地址
      c 显示为字符(ASCII)
      f 浮点小数
      s 显示为字符串
      i 显示为机器语言(仅在显示内存的X命令中可以使用)
    • x/n 重复次数,
    • x/ni 的意思是显示汇编指令 x/10i
      汇总: pwn分析工具GDB + peda + objdump + readelf_第4张图片
      汇总: pwn分析工具GDB + peda + objdump + readelf_第5张图片
      汇总: pwn分析工具GDB + peda + objdump + readelf_第6张图片
  • disassemble 简记 disas

    • 反汇编当前整个函数
    • disassemble 开始地址 结束地址, 反汇编从开始地址到结束地址之间的部分
    • 汇总: pwn分析工具GDB + peda + objdump + readelf_第7张图片
  • backtrace 简记bt

    • bt 打印整个栈的回溯,每个栈帧一行
    • bt N 只打印最内层的N个栈帧
    • bt -N 只打印最外层的N个栈帧
      在这里插入图片描述

2、GDB增强工具peda

peda是为GDB设计的一个插件,全称是Python Exploit Development Assistance for GDB。它提供了很多人性化的功能,比如高亮显示反汇编代码、寄存器、内存信息,提高了debug的效率.

安装:

$ git clone https://github.com/longld/peda.git ~/peda
$ echo "source ~/peda/peda.py" >> ~/.gdbinit 

使用:

添加命令以支持调试和利用开发(有关命令使用的完整列表peda help):
aslr - 显示/设置GDB的ASLR设置
checksec - 检查二进制文件的各种安全选项
dumpargs - 在呼叫指令处停止时显示传递给函数的参数
dumprop - 将特定内存范围内的所有ROP小工具转储
elfheader - 从被调试的ELF文件中获取标题信息
elfsymbol - 从ELF文件获取非调试符号信息
lookup - 搜索所有地址/参考地址属于一个内存范围
patch - 修补程序内存以string / hexstring / int的地址开始
pattern - 生成,搜索或写入循环模式到内存
procinfo - 显示/ proc / pid /
pshow - 显示各种PEDA选项和其他设置
pset - 设置各种PEDA选项和其他设置
readelf - 从ELF文件获取标题信息
ropgadget - 获取二进制或库的通用ROP小工具
ropsearch - 在内存中搜索ROP小工具
searchmem|find - 在内存中搜索模式; 支持正则表达式搜索//查找用,例如searchmem“/ bin / sh”libc
shellcode - 生成或下载常用的shellcode。
skeleton - 生成python漏洞利用代码模板
vmmap --   //可以用来查看栈、bss段是否可以执行
xormem - 用一个键异或存储区域
  • pattern – 生成字符串模板 写入内存 用于定位溢出点
    • pattern create size 生成特定长度字符串
    • pattern offset value 定位字符串
      在这里插入图片描述
      在这里插入图片描述

3、GNU工具链 (GNU Toolchain): objdump + readelf

GNU工具链 (GNU Toolchain)是一组用于开发应用程序和操作系统的编程工具的集合,这些工具构成了一个完整的系统。GNU工具链包括GDB、GCC、GNU Binutils、GNU make等部分.

  • GNU Binutils 是 GNU Binary Utilities 的简写,一般简称为 Binutils。中文可以翻译为 GNU 的二进制工具集。显然,Binutils 是一组二进制工具的集合。也就是说,Binutils 不是指某一个工具,而是指一组工具,并且这些工具都是专门针对于二进制的.

  • GNU Binutils是一系列二进制工具的集合。主要包括:
    ld —— GNU链接器, ld是链接器,通常由GCC/G++调用。外部基本不可见
    as—— GNU汇编器

  • GNU Binutils还包括以下二进制工具( 这些工具程序通常搭配GCC、make、和GDB这些程序来使用。):

    • nm:显示目标文件内的符号信息
    • objdump:显示目标文件的相关信息,具备反汇编是其最大的亮点, 不过其反汇编依赖与ELF节头,而且不不会进行控制流分析。
    • readelf: 解析ELF格式文件的信息. 与objdump类似, 但是显示内容更加具体, 而且不依赖BFD库. 可通过参数选项来控制显示哪些特定信息。( readelf不支持显示静态库, 也不支持64位的ELF文件)。

本篇内容持续完善中…

你可能感兴趣的:(PWN,linux,安全漏洞,pwn,gcc/gdb编译调试,系统安全)