Windbg preview时间旅行调试(TTD)介绍

  • A+
所属分类:逆向工程

Windbg preview时间旅行调试(TTD)介绍

0x1 前言


 

从windbg preview版本出现后,新增的时间旅行调试(TTD)就是一个非常好用的功能。它改变了目前调试分析Windows app漏洞时候一遍遍的栈回溯、bp断点、重新加载等问题。大大提高了windows app漏洞分析过程的效率。还可以将调试过程保存成文件,方便分享给他人调试。


本文从几个例子来介绍下新功能的用法。


0x2 基本介绍




Windbg preview需要从微软商店下载、安装。以管理员加载程序即可。Configure recording保存调试的流程解析。

Windbg preview时间旅行调试(TTD)介绍

启动界面后,主要有两大块需要介绍,左侧红框倒叙部分以及右侧Timelines。Timelines会记录下包括异常、断点、函数调用、内存访问。如下图三角所示。

Windbg preview时间旅行调试(TTD)介绍


0x3 示例





1)利用TTD分析除以0异常


源码大致如下:

int f_vulzero(int c){         inta = c - 1;         intb = a * 3;         intd = a * b * 0;         returnd;}


使用windbg preview TTD配置加载异常程序运行后,Timelines会自动记录异常并暂停等待。此时至少需要我们双击下图右侧Timelines小三角,获取异常处代码如下图:

Windbg preview时间旅行调试(TTD)介绍

从图中可见问题出现在idiv除以了0,那么ebp-8为什么是0?


在传统windbg调试中,这里需要我们kv去回溯栈层,顺便使用IDA分析代码总体流程,然后在windbg 中bp addr上,g运行,达到指定断点地址后,接着“单步调试”,直到触发此问题。如果断点错误,可能还需要再一次restart,费时费力。


然而在windbg preview TTD功能中,我们只需要使用step into back 或t-命令即可。此时发现ebp-8来自eax。如下图所示:

Windbg preview时间旅行调试(TTD)介绍


那么继续t- 操作,发现eax来自于前函数,此时eax值为0x63。但是我们好像错过了关键信息mov eax,dword ptr[ebp-20h];如下图。那么直接通过step into 或 t命令,可以看到Imulecx,eax,0之后,ecx=0;eax的值就来源于ecx,接着进入call    chuyi0+0x11235单步就发现idiv 除以0异常原来是来自于:imulecx,eax,0这条指令。


Windbg preview时间旅行调试(TTD)介绍

Windbg preview时间旅行调试(TTD)介绍


至此这个漏洞分析完毕,而且不需要多次重复加载调试。大大简化了流程。


2)利用TTD分析栈溢出漏洞


源码大致如下:

int f_vul(char str[]){         charbuf[8];         strcpy(buf,str);         return1;}


加载进入程序后,g一下,程序直接崩溃。观察图,可以发现通过如下位置发生了栈溢出的问题。下图很简单,eip执行找不到内容,所以直接crashed了。通过下图右侧红框中,我们也可以发现栈溢出的位置。

Windbg preview时间旅行调试(TTD)介绍

那么这个漏洞怎么分析呢?老规矩,直接“step over back”一下,顺便看Stack栏中的内容。几次“step over back”后,可以看到问题出现在stackover!f_vul函数内。如下图所示,那么直接将断点下载f_vul函数上,然后“step out back”之后,重新点击“Go”命令运行。


Windbg preview时间旅行调试(TTD)介绍


当windbg preview命中断点后,step into一下,uf .命令查看整个汇编语句,我们就可以发现strcpy可能存在问题了。然后单步调试即可。


Windbg preview时间旅行调试(TTD)介绍


那么怎么确定我们传入的参数呢?


还记得我们栈溢出eip被覆盖吧。通过kb命令,我们查看第一个传递进来的参数是0x9afd2c。通过dc查看,也可以发现传递进来的字符串。如下图所示


Windbg preview时间旅行调试(TTD)介绍


接着执行到mov eax,1的时候,ebp的空间被覆成如下所示。即可知道eip栈溢出问题出现在strcpy啦。


3)利用windbg 加载镜像调试环境


新版本windbg preview除了上述调试外,还可以很方便的加载调试过的记录。方法:


Start debugging -> open trace file ->选择自己的镜像文件即可。调试起来就如同调试程序进程一样方便。如下图所示:

Windbg preview时间旅行调试(TTD)介绍

Windbg preview时间旅行调试(TTD)介绍


0x4 总结




本文以几个简短的例子来说明TTD功能的使用,同时抛砖引玉希望越来越多的人接纳使用windbg preview,因为它的确带来了很大的便利性。但是TTD也有不足之处,比如加载大型文件时候,记录过程较为缓慢、生成的run文件体积很大、不支持win7、win10 pro以外的版本等等。但是瑕不掩瑜,使用TTD功能调试漏洞时候,再也不会担心内存变量,环境位置的改变了,极大的方便了分析调试使用,期待windbg preview越来越好吧。




Windbg preview时间旅行调试(TTD)介绍
安全帮®大讲堂经典回顾


大讲堂—浅析《信息安全保障》

大讲堂—速读《网络安全法》

大讲堂—分布式流处理平台:KAFKA

大讲堂—网络协议安全,这些你不可不知

大讲堂—当威胁检测技术跟上了AI的脚步

大讲堂—企业求生之道:如何有效进行安全风险管理

大讲堂—逆向分析技术知多少?

大讲堂—关于Spark的那些事

大讲堂—浅析Hadoop!

大讲堂—MyBatis简介与入门

大讲堂—LSTM算法原理及应用

Windbg preview时间旅行调试(TTD)介绍


关于安全帮®


安全帮®,是中国电信网络与信息安全研究院旗下安全团队,致力于成为“SaaS安全服务领导者”。目前拥有“1+4”产品体系:一个SaaS电商(www.anquanbang.vip) 、四个平台(SDS软件定义安全平台、安全能力开放平台、安全大数据平台、安全态势感知平台)。

联系方式:微信公众号留言或联系客服QQ3025437891




Windbg preview时间旅行调试(TTD)介绍

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: