【Windbg】学习+CTF案例

news/2024/12/5 7:33:49/文章来源:https://www.cnblogs.com/o-O-oO/p/18586988
1、Windbg介绍2、Windbg安装3、dmp文件介绍4、pdb文件介绍5、Windbg基础命令5.1 执行、调试相关5.2 调试辅助相关5.3 漏洞利用相关6、实战:windbg分析题目

1、Windbg介绍

Windbg是一款Windows强大的调试器,可以调试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安装

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

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

Windbg 10 自带了帮助文档

3、dmp文件介绍

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

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

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

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

4、pdb文件介绍

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

5、Windbg基础命令

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

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

windbg的指令分成以下几类

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

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

!nameofExtentModule.nameofExtentCommand 参数

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

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的基本情况。

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:

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

r @eax=1

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

ed [address][content]

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

ed 08041000 11111111

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

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

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

t:

单步步入
k:

查看栈帧调用顺序

5.2 调试辅助相关

.sympath

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

.sympath+ D:\Filename

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

• deffered:表示延迟绑定

• pdb symbols:表示已经加载当前符号

.load

.load dllname

导入指定名字的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

打开的效果:

使用第一条命令:

!analyze -v

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

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

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

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

输出了很多结果

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

这么多dll,怎么分析?

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

这里就有一个很可疑的dll

地址这么低,和系统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.dllImage name: stolen.dllBrowse all global symbols  functions  dataTimestamp:        Thu Apr 20 11:33:18 2017 (58F82BFE)CheckSum:         0000E4F8ImageSize:        0000E000Translations:     0000.04b0 0000.04e4 0409.04b0 0409.04e4Information from resource tables:

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

发现没有。。。

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

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

!vadump:

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

BaseAddress: 10001000
RegionSize:  000062f4

flag如下:

flag{acaa16770db76c1ffb9cee51c3cabfcf}

题目获取:添加qq3200599554

原创 蚁景网络安全

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【小程序】分销系统简介

为了获取更多的业绩,扩展更多的客户,小程序分销商城开发是很多商家需求的,那么小程序分销商城开发哪个好?什么是小程序分销系统?这个是很多商家不了解的,今天给大家做一下详细介绍。 小程序分销商城的优势: 可以通过分销功能勒边客户,分销商赚取佣金,实现销量的快速增…

【文化课学习笔记】【物理】电磁感应

高中物理学习笔记:电磁感应【物理】电磁感应 磁通量 基础知识 定义:磁感应强度与垂直 \(B\) 方向上的面积的乘积,表示穿过面积的条数。 字母:\(\Phi\)。磁通量是标量,但有正负。 计算: \[\Phi = BS_{\perp} \]其中 \(S\) 表示垂直于磁感线方向上的面积。 单位:韦伯,即 …

fscan全家桶:FscanPlus,fs,fscan适用低版本系统,FscanParser

fscan全家桶 fscan几乎是内网扫描必备的神器了,网上也有很多二开的版本,经过我日常的使用,为大家总结的几个好用的二开版本: FscanPlus:fscan的plus版本 fs:有免杀效果 fscan低版本:自己重新编译的适合低版本系统的fscan FscanParser:用来处理扫描结果 工具的详细介绍都…

【开源系列】Prism库:详解其核心组件和使用方法,助力构建高品质应用程序

Prism库简介 Prism库是一个开源项目,由 Microsoft 社区开发和维护。它是一组用于创建 WPF、UWP 和 Xamarin 应用程序的工具和库,提供了一种基于模块化和依赖注入的架构模式,同时它提供了一系列的工具,帮助开发人员构建可扩展、可维护、可测试的大型应用程序。 Prism库是开发…

读数据保护:工作负载的可恢复性04备份与档案

备份与档案1. 区分备份与档案 1.1. 两个完全不同的操作1.1.1. 要实现的是两个完全不同的目标1.1.2. 备份(backup)1.1.3. 档案(archive)1.2. 有些产品既能制作备份,又能制作档案 1.3. 某些产品或服务明明是专门用…

攻防世界:Crypto习题之easy_RSA

攻防世界:Crypto习题之easy_RSA RSA 加密 在非对称加密算法中,单向函数被广泛应用,用于确保从公钥加密后的密文无法轻易推导出私钥,从而保证数据的安全性。而其中最著名的算法便是 RSA 加密算法。 首先设 $$\varphi(m) := | { 1 \leq k \leq m |\gcd(k, m) = 1 } |$$ 为欧…

HCIP-23 IGMP原理与配置

IGMP的主要作用是让组播网络感知组播组成员的位置和所加组播组,同时也能维护组成员的加组状态。 IGMP有三种版本: IGMPv1:有基本的加组机制,但是组成员离开机制较为落后,同时没有独立的IGMP查询器选举机制。 IGMPv2:在IGMPv1的基础上改善了组成员离开机制,同时拥有了独立…

acwing语法基础课总结(未完结)

题单 https://www.acwing.com/activity/content/10/ 1>基础概念 权重(609) 和比列不同,例如A的成绩是90,权重为3.5;B的成绩是95,权重是7.5平均成绩就是(90 * 3.5 + 95 * 7.5) * 1.0 / (3.5 + 7.5) pow函数 返回值类型为double类型 取整函数ceil函数 向上取整 头文件 cma…

苹果im虚拟机系统,苹果imessage推信软件,苹果iMessage自动群发协议–持续更新中...

一、电脑版虚拟机苹果系统(Mac OS)上实现imessage群发: /*MacOS苹果系统,正常情况下,只能安装到苹果公司自己出品的Mac电脑,俗称白苹果,不能安装到各种组装机或者其他品牌的品牌机上,黑苹果的的原理,就是通过一些“破解补丁” 工具欺骗macOS系统,让苹果系统认为你的电脑其…

上穷碧落下黄泉

上穷碧落下黄泉,动手动脚找东西。——傅斯年 《黄泉下的美术》真好看吧,巫鸿老师我将追随你我的朋友很喜欢送给我“安安心心”这个词我也会幻想我只需要当个浸在瑰色梦中的小公主一个只需要安安心心在知识的海洋里行走的学者但幻想只是幻想啊,与现实有着无可避免的距离我很不…

高效沟通的密码:PREP 沟通表达模型 - 1、观点 2、依据 3、事例 4、重述观点

PREP 沟通模型介绍 PREP 沟通模型是一种用于有效沟通和表达观点的结构化方法。它由四个部分组成,分别是Point 观点 Reason 依据 Example 事例 Point 重述观点PREP 把表达过程分成四个步骤:先说观点,再说依据,举事例说明,最后在重述观点。1、PREP 沟通模型先提出观点,让听…

一分钟了解不同架构的优缺点

单体应用架构(Monolithic Architecture) 1968 年的软件危机产生了软件工程,并且催生了面向对象的高级语言,例如 1972 的 C 语言,同时产生了我们的单体式的技术架构。 单体应用架构是一种传统的应用架构模式,也是至今为止,一直被大规模使用的一种方式,是将应用程序作为一…