【WinDbg】学习以及在CTF中解题

1、Windbg介绍

Windbg是一款Window强大的调试器,可以调试0和3环的程序。

在实际开发中,可以调试我们的错误程序,从而定位关键代码,进行程序代码修复。

WinDbg 是一种调试器工具,由微软公司开发,用于分析和调试 Windows 操作系统和应用程序。它提供了强大的调试功能,可以帮助开发人员识别和解决各种软件问题。

以下是 WinDbg 的一些主要特点和功能:

  1. 内核级和用户级调试支持: WinDbg 可以用于内核级别的调试(如 Windows 内核、驱动程序等)和用户级别的调试(如应用程序、DLL 等),使开发人员能够全面分析和调试整个系统栈。
  2. 符号和源代码支持: WinDbg 可以与符号文件(PDB 文件)结合使用,以获得更详细的调试信息,包括函数名、变量名和源代码行号等。这对于理解和追踪代码执行路径非常有帮助。
  3. 调试器扩展: WinDbg 支持通过扩展插件(例如 JavaScript 脚本)来增强其功能。这些扩展可以自定义命令、自动化任务、数据分析等,使调试过程更高效和灵活。
  4. 远程调试: WinDbg 支持在远程计算机上进行调试,这对于分析在另一台计算机上发生的问题非常有用。
  5. 内存分析: WinDbg 可以帮助分析内存转储文件(如 minidump、完全转储等),以了解程序崩溃或异常终止的原因。
  6. 性能分析: WinDbg 提供了一些性能分析工具和命令,可以帮助开发人员识别和解决性能瓶颈问题。
  7. 脚本和自动化: WinDbg 具有自己的脚本语言(类似于 JavaScript),允许开发人员编写脚本来执行自动化任务,例如批量调试、数据提取等。

WinDbg 是一款功能强大且灵活的调试器工具,可用于分析和解决各种 Windows 软件问题。它在软件开发、故障排除和性能优化方面都扮演着重要角色,并广泛应用于开发人员和系统管理员的工作中。

2、Windbg安装

image

Windbg 10需要下载WindowsSDK 然后进行安装即可。

image

安装这一步属于基础,按照搜索到的步骤进行安装即可

image

Windbg 10 自带了帮助文档

image

3、dmp文件介绍

.dmp 文件是一种用于存储系统或应用程序崩溃时的信息的内存映射文件**。**
dmp 文件通常包含了在崩溃或异常事件发生时系统或应用程序的内部状态信息和堆栈跟踪信息,它们对于诊断问题和进行调试非常有用。

当程序运行到某些重大错误的时候,windows会帮我们生成一个.dmp文件,这里的dmp就是文件进程的内存镜像,可以把程序的执行状态通过调试器保存在其中。

帮助网安学习,全套资料S信免费领取:
① 网安学习成长路径思维导图
② 60+网安经典常用工具包
③ 100+SRC分析报告
④ 150+网安攻防实战技术电子书
⑤ 最权威CISSP 认证考试指南+题库
⑥ 超1800页CTF实战技巧手册
⑦ 最新网安大厂面试题合集(含答案)
⑧ APP客户端安全检测指南(安卓+IOS)

可以使用任务管理器进行生成

image

创建转储文件,即可生成对应的dmp文件

4、pdb文件介绍

.pdb 文件是用于存储调试信息的程序数据库文件。
pdb 文件包含了有关源代码的符号信息,如变量名称、函数名称、类型信息以及源代码文件和行号的映射。这使得调试器能够将二进制文件中的地址映射回源代码。

5、Windbg基础命令

提供debugger.chm文件(下载安装Windbg10自带)

debugger.chm 命令已经很全了,这里只总结常用的指令。

windbg的指令分成以下几类

  • 标准命令
  • 元命令
  • 扩展指令

标准命令相当于是内建在windbg中的默认指令。
元命令则是提供给标准指令中没有的指令,调用时开头要加上.​符号。
扩展指令则是用于实现针对特定目标的调试功能,使用前要加上!​符号,其完整的调用格式为:

!nameofExtentModule.nameofExtentCommand 参数

其中如果扩栈模块已经加载了,那么nameofExtentModule.​不是必须的,windbg会直接查找。

image

5.1 执行、调试相关

dt

The dt command displays information about a local variable, global variable or data type. This can display information about simple data types, as well as structures and unions.

dt命令看可以显示局部变量、全局变量或数据类型的信息。它也可以仅显示数据类型。即结构和联合(union)的信息。

#查看当前线程块
dt _teb
d 查看数据

默认格式如下

d [type] [address range]

d这个命令能够查看指定地址和内存的内容,其中常用的有dd(使用双字节来查看内存内容),如:

dd 77400000
!peb

可以查看当前进程中的peb的基本情况。

image

bp

The bp, bu, and bm commands set one or more software breakpoints. You can combine locations, conditions, and options to set different kinds of software breakpoints.

指令格式如下

bp <address>

常见的下断点的方式。对应的清除断点的方式为bc num,而列出断点的方法为bl

g

最基本的指令,运行当前程序。

u

将指定的地址反汇编:

u[u|b] address(.表示当前的程序执行地址)
uu Address L[Length]

其中uu和ub可以指定当前反汇编的长度(暂时没看出什么区别,似乎是ub的话使用.会自动计算从函数开始的地址进行汇编)。可以使用以下的语法进行长度的指定

使用L表示后面的数字表示的是长度

r

image

查看当前的寄存器
同时可以修改当前的寄存器,比如说:

r @eax=1

将当前的eax寄存器的值修改成1

ed

ed [address][content]

ed [address][content]

将当前的内存修改成指定值
例如

ed 08041000 11111111

将地址08041000处的内容修改成11111111

p

常见指令,单步步过。除此之外还有:

  • p 2 // 2为步进数目
  • pc // 执行到下一个函数调用处停下 【Step to Next Call】
  • pa 7c801b0b // 执行到7c801b0b地址处停下 【Step to Adress】
t

image

单步步入

k

查看栈帧调用顺序

image

5.2 调试辅助相关

.sympath

表示当前的符号加载情况。符号能够帮助我们更加方便的分析程序。

.sympath+ D:\Filename

将D:\Filename添加到符号查找的路径中。
关于符号,其中lm​指令可以检查当前的文件中是否加载了符号文件:

image

  • deffered:表示延迟绑定
  • pdb symbols:表示已经加载当前符号
.load
.load dllname

image

导入指定名字的dll文件,常常用于导入插件

5.3 漏洞利用相关

!py mona

mona​是一个好东西哈,可以用来生成ROP​,查找Gadget​,进行漏洞挖掘等等。

生成ROP Chain

!py mona rop -m "module"

利用module生成ROP Chain

6、实战:windbg分析题目

这里使用了WindbgPreview来分析这道dmp

题目描述:

赛题描述:explorer.exe进程已经被木马感染了,现已经获取explorer.exe进程的dump文件,尝试从DUMP文件中找到flag

打开的效果:

image

使用第一条命令:

!analyze -v

!analyze -v​ 是 WinDbg 调试器中的一个命令,用于自动分析崩溃的原因。这个命令会执行一些步骤来帮助你找到崩溃的根本原因,包括输出调用栈、异常信息、可能引起问题的模块以及其他相关信息。

!analyze 是命令,-v表示详细输出的参数

image

发现没什么信息,尝试使用 命令 lm,列出当前加载的模块

根据题目描述,感觉像是注入了恶意dll

输出了很多结果

image

这里有个小技巧,加载了对应符号的pdb,可以先排除

image

这么多dll,怎么分析?

这里再教一个小技巧,系统dll的地址一般都很高。

image

这里就有一个很可疑的dll

image

地址这么低,和系统dll的地址显得格格不入

猜测这是可疑dll,使用命令进行分析

start    end        module name
10000000 1000e000   stolen     (deferred)

将光标移动到stolen,windbgpreview会输出一段信息:

或者运行命令:​lmv m stolen

lmv m 是 WinDbg 调试器中的一个命令,用于显示指定模块的详细信息。该命令可以帮助你查看模块的基地址、文件名、调试符号等信息。
0:030> lmDvmstolen
Browse full module list
start    end        module name
10000000 1000e000   stolen     (deferred)           
    Image path: C:\Users\Administrator\Desktop\stolen.dll
    Image name: stolen.dll
    Browse all global symbols  functions  data
    Timestamp:        Thu Apr 20 11:33:18 2017 (58F82BFE)
    CheckSum:         0000E4F8
    ImageSize:        0000E000
    Translations:     0000.04b0 0000.04e4 0409.04b0 0409.04e4
    Information from resource tables:

尝试寻找:​C:\Users\Administrator\Desktop\stolen.dll

发现没有。。。

image

在内存中也没有数据,因为还没映射

那么我们就查看整个内存空间布局,看看能不能找到相应的映射数据,(在dll对应的范围内)

!vadump

!vadump 是 WinDbg 调试器中的一个命令,用于显示虚拟地址空间 (Virtual Address Space) 的详细信息。
该命令将输出当前进程的虚拟地址空间中每个 VAD(虚拟地址描述符)的信息。
VAD 是操作系统内核用于管理进程虚拟内存的数据结构之一。
通过使用 !vadump 命令,可以查看每个 VAD 的起始地址、结束地址、保护标志、镜像文件名等信息。

BaseAddress: 10001000
RegionSize:  000062f4

image

image

flag如下:

flag{acaa16770db76c1ffb9cee51c3cabfcf}

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

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

相关文章

随笔记录-springboot_LoggingApplicationListener+LogbackLoggingSystem

环境&#xff1a;springboot-2.3.1 加载日志监听器初始化日志框架 SpringApplication#prepareEnvironment SpringApplicationRunListeners#environmentPrepared EventPublishingRunListener#environmentPrepared SimpleApplicationEventMulticaster#multicastEvent(Applicati…

自然语言处理阅读第一弹

Transformer架构 encoder和decoder区别 Embeddings from Language Model (ELMO) 一种基于上下文的预训练模型,用于生成具有语境的词向量。原理讲解ELMO中的几个问题 Bidirectional Encoder Representations from Transformers (BERT) BERT就是原生transformer中的Encoder两…

YOLOv5改进 | 2023卷积篇 | DWRSeg扩张式残差助力小目标检测

一、本文介绍 本文内容给大家带来的DWRSeg中的DWR模块来改进YOLOv5中的C3和Bottleneck模块&#xff0c;主要针对的是小目标检测&#xff0c;主要创新点可以总结如下&#xff1a;多尺度特征提取机制的深入研究和创新的DWR模块和SIR模块的提出&#xff0c;这种方法使得网络能够更…

P2P网络下分布式文件共享场景的测试

P2P网络介绍 P2P是Peer-to-Peer的缩写&#xff0c;“Peer”在英语里有“对等者、伙伴、对端”的意义。因此&#xff0c;从字面意思来看&#xff0c;P2P可以理解为对等网络。国内一些媒体将P2P翻译成“点对点”或者“端对端”&#xff0c;学术界则统一称为对等网络(Peer-to-Pee…

AR室内导航如何实现?技术与原理分析

随着科技的进步&#xff0c;我们生活中许多方面正在被重新定义。其中之一就是导航&#xff0c;尤其是室内导航。增强现实&#xff08;AR&#xff09;技术的出现为室内导航带来了革命性的变革。本文将深入探讨AR室内导航的技术与原理&#xff0c;以及它如何改变我们的生活方式。…

局域网其他pc如何访问宿主机虚拟机IP?

文章目录 背景贝瑞蒲公英设置虚拟机网络连接测试 背景 使用贝瑞蒲公英异地组网&#xff0c;将家里的pc作为pgsql服务器在公司使用&#xff0c;但是虚拟机的ip和端口访问不了 贝瑞蒲公英 设置虚拟机网络 就是添加端口转发规则 连接测试 公网内其他pc连接测试 可以看到已经连接成…

关于“Python”的核心知识点整理大全28

目录 11.1.5 添加新测试 11.2 测试类 11.2.1 各种断言方法 unittestModule中的断言方法&#xff1a; ​编辑11.2.2 一个要测试的类 survey.py language_survey.py 11.2.3 测试 AnonymousSurvey 类 test_survey.py 往期快速传送门&#x1f446;&#xff08;在文章最后&…

UART协议——FPGA代码篇

一.串口&#xff08;UART&#xff09;协议简介 UART 串口通信有几个重要的参数&#xff0c;分别是波特率、起始位、数据位、停止位和奇偶检验位&#xff0c;对于两个使用UART 串口通信的端口&#xff0c;这些参数必须匹配&#xff0c;否则通 起始位&#xff1a;表示数据传输的开…

如何在Eclipse中安装WindowBuilder插件,详解过程

第一步&#xff1a;找到自己安装eclipse的版本&#xff0c;在Help-关于eclipse里面&#xff0c;即Version 第二步&#xff1a;去下面这个网站找到对应的 link&#xff08;Update Site&#xff09;&#xff0c;这一步很重要&#xff0c;不然版本下载错了之后还得删除WindowBuil…

【计算机网络】TCP协议——3. 可靠性策略效率策略

前言 TCP是一种可靠的协议&#xff0c;提供了多种策略来确保数据的可靠性传输。 可靠并不是保证每次发送的数据&#xff0c;对方都一定收到&#xff1b;而是尽最大可能让数据送达目的主机&#xff0c;即使丢包也可以知道丢包。 目录 一. 确认应答和捎带应答机制 二. 超时重…

什么是关键词排名蚂蚁SEO

关键词排名是指通过搜索引擎优化&#xff08;SEO&#xff09;技术&#xff0c;将特定的关键词与网站相关联&#xff0c;从而提高网站在搜索引擎中的排名。关键词排名对于网站的流量和用户转化率具有至关重要的影响&#xff0c;因此它是SEO工作中最核心的部分之一。 如何联系蚂…

机器学习 | SVM支持向量机

欲穷千里目&#xff0c;更上一层楼。 一个空间的混乱在更高维度的空间往往意味着秩序。 Machine-Learning: 《机器学习必修课&#xff1a;经典算法与Python实战》配套代码 - Gitee.com 1、核心思想及原理 针对线性模型中分类两类点的直线如何确定。这是一个ill-posed problem。…

【工作流Activiti】Activiti的使用

1、数据库支持 Activiti 运行必须要有数据库的支持&#xff0c;支持的数据库有&#xff1a;mysql、oracle、postgres、mssql、db2、h2 2、Activiti环境 我们直接在当前项目&#xff1a;guigu-oa-parent做Activiti入门讲解 2.1、引入依赖 <!--引入activiti的springboot启动…

苹果个人开发者如何实现应用下载安装

作为苹果个人开发者&#xff0c;你可以为iOS设备用户提供应用程序&#xff0c;而用户将能够通过下载和安装这些应用来丰富他们的设备体验。本文将详细介绍个人开发者实现应用下载安装的步骤&#xff0c;包括开发和上架应用程序到App Store。 图片来源&#xff1a;苹果个人开发者…

P2P应用

目录 一.P2P的简介 二.P2P的工作方式 1.具有集中目录服务器的P2P工作方式 2.具有全分布式结构的P2P文件共享程序 一.P2P的简介 P2P(对等连接)&#xff0c;是指两台主机在通信时&#xff0c;并不区分哪一个是服务请求方和哪一个是服务提供方。只要两台主机都运行了对等连接…

【06】GeoScene海图或者电子航道图数据自动化质检

1 S-58错误管理器验证产品 在你编辑数据时进行快速的质量检查可以使用S-58错误管理器&#xff0c;S-58错误管理器工具允许您使用IHO S-58验证标准来验证海事数据库中的产品。你可以验证整个产品&#xff0c;或验证产品的当前范围。 1.1验证产品 使用S-58错误管理器工具完成以…

Android vs. iOS:移动操作系统的对决

导言 Android和iOS作为两大主流移动操作系统&#xff0c;影响着数十亿用户的数字生活。Android和iOS&#xff0c;作为移动操作系统的巅峰代表&#xff0c;它们的竞争塑造了全球数十亿用户的数字化生活。本文将深入探讨这两个系统的起源、特点以及它们在用户体验、开发者生态和市…

Linux 特殊符号

目录 1. # 注释 2. &#xff1b;命令分隔符 3. .. 上级目录 4. . 当前目录 5. " " 换行&#xff0c;解析变量 6. 换行&#xff0c;不解析变量 7. \ 和 / 8. &#xff01;历史命令调用&#xff0c;取反 9. * 通配符 10. $ 调用变量 11. | 管道 12. || …

云原生之深入解析减少Docker镜像大小的优化技巧

一、什么是 Docker&#xff1f; Docker 是一种容器引擎&#xff0c;可以在容器内运行一段代码&#xff0c;Docker 镜像是在任何地方运行应用程序而无需担心应用程序依赖性的方式。要构建镜像&#xff0c;docker 使用一个名为 Dockerfile 的文件&#xff0c;Dockerfile 是一个包…

【二分查找】【z型搜索】LeetCode240:搜索二维矩阵

LeetCoe240搜索矩阵 作者推荐 【贪心算法】【中位贪心】.执行操作使频率分数最大 本文涉及的基础知识点 二分查找算法合集 题目 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性&#xff1a; 每行的元素从左到右升序排列。 每列的…