PWN 常用工具-补充

目录

pwndbg

如何加载文件

如何运行到Main函数停止

如何查看程序的内存布局

查看内存地址存储的值

如何查看某个地址存储的指令

搜索字符串

打印

调试相关

断点相关

查看栈内数据

查看栈调用顺序

从程序回到gdb

修改内存中的值

file

可执行文件特征

动态链接文件特征

静态链接文件特征

-L参数:用于解析符号链接的文件类型

objdump

查看可执行文件反汇编

查看指定函数反汇编

查看指定节反汇编

readelf

查看可执行文件文件头

查看符号表


pwndbg

命令行下动态调试程序

如何加载文件

如何运行到Main函数停止

下断点在main函数位置  b main  

如何查看程序的内存布局

vmmap:查看程序内存布局

查看内存地址存储的值

示例:x/100gx 地址    查看100个8字节的数据,4字节g 第二个x表示16进制显示内容

如何查看某个地址存储的指令

x/8i 地址  显示8个8字节的指令

搜索字符串

search 'bin/sh'

x/s 0xf7f521dc  把这个地址8字节转为字符串显示

打印

打印函数地址:p &__函数名

调试相关

n:单步步过

s:单步步入

q:停止运行gdb,退出

info r:查看寄存器的值

finish:直接执行到函数结束位置  ret

continue:后面没断电执行到结束;有断点,执行到断点

断点相关

b:下断点

Info b :查看所有断点

delete Num:根据Num值删除断点

查看栈内数据

stack 20  查看站内最上面20条指令

查看栈调用顺序

从程序回到gdb

CTRL+C 就可以了

修改内存中的值

set指令

监控内存中的在程序运行时是否改变

watch 地址

file

file命令用于检测给定文件的类型,包含文件系统、魔法幻数和语言3个检测过程。file几乎是使用频率最高的命令,当我们拿到一个未知文件时,首先要做的就是确定其文件类型,获取一些最基本的信息。

file 文件名    // Linux系统大小写敏感

可执行文件特征

 可获得信息如下:

  • ELF 64-bit LSB executable是可执行文件的标识,表示一个可以直接运行的程序。
  • x86-64指明了该可执行文件适用于64位的x86架构。
  • version 1 (GNU/Linux)表示该可执行文件符合GNU/Linux操作系统的规范,并且使用了版本1的格式。
  • 静态链接(statically linked)表示该可执行文件在编译时已将所需的库文件静态地链接到可执行文件中,因此在运行时不需要依赖外部的动态链接库。这也意味着该可执行文件可以在没有额外库文件的情况下独立运行。
  • for GNU/Linux 3.2.0说明该可执行文件是为GNU/Linux 3.2.0版本设计的,可能依赖于该版本的系统库和功能。
  • not stripped表示该可执行文件未被剥离(stripped),即保留了符号表等调试信息,方便进行调试和分析。
  • BuildID[sha1]是一个唯一标识符,可用于识别特定版本的可执行文件。

动态链接文件特征

可获得信息如下: 

  • ELF 64-bit LSB shared object是动态链接库的标识,表示一个具有可重定位代码和数据的二进制文件格式。
  • x86-64指明了该动态链接库适用于64位的x86架构。
  • version 1 (SYSV)表示该动态链接库符合System V规范,并且使用了版本1的格式。
  • 动态链接(dynamically linked)表示该动态链接库在运行时才会被加载到内存中,并且可以被多个程序共享使用。因此,它通常用于减小程序文件的体积,优化内存占用,以及支持动态扩展等需求。
  • not stripped表示该动态链接库未被剥离(stripped),即保留了符号表等调试信息。这对于开发和调试应用程序非常有用。
  • BuildID[sha1]是一个唯一标识符,可用于识别特定版本的动态链接库。

静态链接文件特征

可获得信息如下:

  • 最主要的信息是 "current ar archive",它表明这是一个静态链接库文件。
  • 除了 "current ar archive" 之外,还可能会显示其他信息,如具体的体系结构(如x86_64)和使用的编译器版本等

-L参数:用于解析符号链接的文件类型

可解析得到符号链接指向的文件

解析gcc链接的文件类型

objdump

objdump命令用于查看目标文件的信息,具备反汇编能力是其最大的亮点,但其反汇编过于依赖ELF节头,且不会进行控制流分析,导致其健壮性略差。

常用参数说明:

  • 选项“-s”用于将目标文件转换成十六进制表示;
  • 选项“-d”或者“-D”用于对目标文件进行反汇编;
  • 选项”-j“,可以指定某个节

查看可执行文件反汇编

用于查看目标文件或可执行文件的反汇编代码

objdump -d hello -M intel 

会按照节的划分显示所有的反汇编代码

查看指定函数反汇编

objdump -d hello -M intel | grep -A 7 "<main>"
  • |:这是管道符号,用于将objdump输出的结果传递给下一个命令。
  • grep:这是一个用于在输入中搜索匹配模式的命令。
  • -A 7:这是grep命令的选项之一,用于指定在匹配行之后显示多少行的上下文。
  • "<main>":这是要搜索的目标函数名,用尖括号括起来指示精确匹配。

查看指定节反汇编

objdump -s -j .rodata pwn

readelf

readelf命令用于解析ELF格式目标文件的信息。该工具与objdump类似,但显示的内容更具体,且不依赖BFD库

常用参数如下:

  • 选项“-h”:用于显示文件头信息
  • 选项“-1”:用于显示程序头信息
  • 选项:“-S”:用于显示节区头信息
  • 选项“-s”:用于显示符号表
  • 选项“--dyn-syms":用于显示动态符号表。例如在 libc中查找system函数的偏移量(常用于Return-into-libc攻击)。
     

查看可执行文件文件头

readelf -h 路径/文件

包含信息如下:

  • Magic:ELF文件的魔数,用于标识该文件格式。
  • Class:指定了ELF文件的位数,这里是64位。
  • Data:指定了数据的字节顺序,这里是小端法(little endian)。
  • Version:指定了ELF文件的版本号。
  • OS/ABI:指定了目标操作系统和ABI(Application Binary Interface),即UNIX - GNU。
  • ABI Version:指定了ABI的版本号。
  • Type:指定了ELF文件的类型,这里是可执行文件。
  • Machine:指定了目标机器体系结构,这里是Advanced Micro Devices X86-64。
  • Entry point address:指定了程序的入口点地址,即程序开始执行的第一个指令的地址。
  • Start of program headers:指定了程序头部表的起始位置,它包含描述可执行文件的段或节的信息。
  • Start of section headers:指定了节头部表的起始位置,它包含描述文件所有节的信息。
  • Flags:指定了一些标志位,这里为0表示没有特殊标志。
  • Size of this header:指定了ELF头部的大小。
  • Size of program headers:指定了程序头部表的条目大小。
  • Number of program headers:指定了程序头部表的条目数量。
  • Size of section headers:指定了节头部表的条目大小。
  • Number of section headers:指定了节头部表的条目数量。
  • Section header string table index:指定了节头部字符串表的索引,用于查找节头部表中的节名称。

查看符号表

raedelf -s 路径/文件

ELF文件的符号表(Symbol Table)是一种数据结构,用于存储与程序中定义和引用的符号相关的信息。符号可以是函数、变量、常量或其他命名实体。

符号表通常包含以下信息:

  1. 符号名称:每个符号都有一个唯一的名称,用于在程序中标识该符号。
  2. 符号类型:指定该符号是函数、全局变量、局部变量等。
  3. 符号绑定:指定该符号是全局符号还是局部符号。
  4. 符号地址:指定该符号在内存中的地址或偏移量。
  5. 符号大小:指定该符号的大小,用于在内存中分配适当的空间。
  6. 符号可见性:指定该符号是否对其他模块可见。
  7. 符号所属节:指定该符号所在的节或段。

符号表对于链接器和调试器非常重要。

  • 链接器使用符号表来解析多个目标文件之间的符号引用,并将它们解析为正确的地址。
  • 调试器使用符号表来将程序的运行时状态与源代码进行关联,以便更好地进行调试和错误排查。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/355364.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

elementUI的el-select传递item对象或其他参数的2种方法

方法1 :value“item” 绑定对象 只要:value绑定item对象就可以 value-key"value" 必须是item里的一个属性&#xff0c;绑定值为对象类型时必填 <el-select v-model"value" placeholder"请选择" value-key"value" change"cha…

Day02-数据类型和运算符(基本数据类型转换,赋值运算符,算术运算符,关系运算符,逻辑运算符,条件运算符,位运算符,赋值运算符,运算符优先级,标点符号)

文章目录 Java基础语法学习目标1 基本数据类型转换&#xff08;Conversion&#xff09;&#xff08;掌握&#xff09;1.1 自动类型转换&#xff08;隐式类型转换&#xff09;1.2 强制类型转换&#xff08;显式类型转换&#xff09;1.3 基本数据类型与字符串类型的转换 2 运算符…

一起玩儿Proteus仿真(C51)——01. 仿真软件Proteus和开发软件Keil C51的安装

摘要&#xff1a;本文介绍仿真软件Proteus和开发软件Keil C51的安装 智能小车系列文章已经连续发布49期了。为了照顾更多读者的需求&#xff0c;从这周开始&#xff0c;新增加一个系列——Proteus仿真系列&#xff0c;这个系列的文章还是以一个个小的专题的形式&#xff0c;介绍…

数据结构(二)------单链表

制作不易&#xff0c;三连支持一下呗&#xff01;&#xff01;&#xff01; 文章目录 前言一.什么是链表二.链表的分类三.单链表的实现总结 前言 上一节&#xff0c;我们介绍了顺序表的实现与一些经典算法。 但是顺序表这个数据结构依然有不少缺陷&#xff1a; 1.顺序表指定…

(2)(2.9) Holybro Microhard P900无线电遥测设备

文章目录 前言 1 特点 2 规格 3 包装内包括 前言 Holybro Microhard Radio 集成了 microhard Pico 系列射频模块&#xff0c;能够在强大的拓扑结构中提供高性能无线串行通信&#xff0c;如点对点、点对多点和安全 Mesh&#xff08;P840 不提供 Mesh&#xff09;。 它采用跳…

多线程 之 静态代理

什么是静态代理&#xff1f; 静态代理是一种思想&#xff0c;找一个代理负责一些琐事&#xff0c;自己则专注于一件大事。 有哪些具体的表现&#xff1f; 在日常生活中做饭就是这样&#xff0c;会做饭的人需要做饭&#xff0c;那么其他的人就来帮他打杂&#xff0c;这样做饭的…

Sqli-labs-master第一关通关攻略

第一关基于错误的字符串/数字型注入 第一关打开&#xff0c;请输入id数值作为参数&#xff0c;那就输呗整个1&#xff0c;2&#xff0c;3看看效果 通过ID数值得变动&#xff0c;页面也随之发生变化&#xff0c;然后就是判断SQL语句是否拼接&#xff0c;是字符型还是数字型 输入…

DETR解读,将Transformer带入CV

论文出处 [2005.12872] End-to-End Object Detection with Transformers (arxiv.org) 一个前置知识 匈牙利算法&#xff1a;来源于二部图匹配&#xff0c;计算最小或最大匹配 算法操作&#xff1a;在n*n的矩阵中 减去行列最小值&#xff0c;更新矩阵&#xff08;此时行或者…

(蓝桥杯每日一题)求最长回文串

问题描述 给出一个长度为 n 的小写字符串&#xff0c;求一个最长的子串 S&#xff0c;满足SXY,X&#xff0c;Y>1&#xff0c;且X,Y 均为回文串。 输入格式 输入包括一行: 第一行是一个长度为 n 的小写字符串。 输出格式 输出包括一行&#xff1a; 一行一个整数&#xff0c;表…

Java设计模式-享元模式(12)

馆长准备了很多学习资料,其中包含java方面,jvm调优,spring / spring boot /spring cloud ,微服务,分布式,前端,js书籍资料,视频资料,以及各类常用软件工具,破解工具 等资源。请关注“IT技术馆”公众号,进行关注,馆长会每天更新资源和更新技术文章等。请大家多多关注…

Vue ECharts X轴 type为value的数据格式 + X轴固定间隔并向上取整十位数 - 附完整实例

echarts&#xff1a;一个基于 JavaScript 的开源可视化图表库。 目录 效果 一、介绍 1、官方文档&#xff1a;Apache ECharts 2、官方示例 二、准备工作 1、安装依赖包 2、示例版本 三、使用步骤 1、在单页面引入 echarts 2、指定容器并设置容器宽高 3、数据处理&am…

Java: javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated

我们在平时练习的时候一般使用低版本的jdk来练习&#xff0c;以便了解不同版本jdk的区别&#xff0c;下面是我们练习中遇到的问题 >>> DefaultHttpClient mHttpClient new DefaultHttpClient(new BasicHttpParams()); ClientConnectionManager ccm mHttpClien…

【Vite+Vue3+TS】基于Vite+Vue3+TypeScript+ESLint+Prettier+Stylelint搭建项目(亲测超详细)

目 录 项目搭建步骤确定node版本使用Vite创建Vue3项目规范目录结构配置环境修改Vite配置文件集成路由工具Vue Router集成状态管理工具Pinia集成CSS预编译器Sassvite-plugin-svg-icons图标组件集成UI框架Element Plus集成HTTP 请求工具 Axios 项目代码规范集成ESLint配置集成Pre…

docker环境搭建及其安装常用软件

centos安装docker Install Docker Engine on CentOS | Docker Docs 下载docker sudo yum install -y yum-utils sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo yum install -y docker-ce docker-ce-cli containerd.io…

Git学习,基础,安装,配置,笔记总结

Git安装与常用命令 本教程里的git命令例子都是在Git Bash中演示的,会用到一些基本的linux命令,在此为大家提前列举: ls/ll 查看当前目录 cat 查看文件内容 touch 创建文件 vi vi编辑器(使用vi编辑器是为了方便展示效果,学员可以记事本、editPlus、notPad++等其它编 辑…

【YOLO系列算法俯视视角下舰船目标检测】

YOLO系列算法俯视视角下舰船目标检测 数据集和模型YOLO系列算法俯视视角下舰船目标检测YOLO系列算法俯视视角下舰船目标检测可视化结果 数据集和模型 数据和模型下载&#xff1a; YOLOv6俯视视角下舰船目标检测训练好的舰船目标检测模型舰船目标检测数据YOLOv7俯视视角下舰船…

ES6.8.6 为索引映射(Mapping)创建自定义分词器,测试分词匹配效果

文章目录 环境创建索引&#xff1a;配置自定义分词器、字段指定分词器自定义分词器参数说明创建索引&#xff1a;custom_analyzer_comment 使用索引中自定义的分词器进行分词分析自定义分词器my_custom_analyzer分词测试&#xff1a;测试中文停用词、英文字母转小写测试敏感词替…

Parquet文件推送数据到OSS

1. 任务背景 任务说明&#xff1a;公司 saas 数据分析类产品&#xff0c;客户需要把行为数据回传到客户指定文件系统中&#xff08;oss&#xff09;周期&#xff1a;T1数据格式&#xff1a;parquet数据范围&#xff1a;部分表全量&#xff0c;部分表增量其他要求&#xff1a; …

STM32-LwESP 移植

LwESP 是一个专门解析 Espressif 公司旗下 ESP 系列芯片 AT 指令的开源库&#xff0c;具有以下特性&#xff1a; 支持 Espressif 公司 ESP32, ESP32-C2, ESP32-C3, ESP32-C6 和 ESP8266 芯片。独立平台&#xff0c;采用 C99 标准编写&#xff0c;易于移植。允许不同的配置来优…

【Linux】第三十九站:可重入函数、volatile、SIGCHLD信号

文章目录 一、可重入函数二、volatile三、SIGCHLD信号 一、可重入函数 如下图所示&#xff0c;当我们进行链表的头插的时候&#xff0c;我们刚刚执行完第一条语句的时候&#xff0c;突然收到一个信号&#xff0c;然后我们这个信号的自定义捕捉方法中&#xff0c;正好还有一个头…