原文地址:www.trustwave.com/en-us/resou…
原文作者:
发布时间:2020年1月9日
简介
嗨,我的朋友们! 你们好吗?希望你有一个非常好的假期,对每个人都有很多的爱! 是时候开始2020年了吗?现在是写WinDBG的TTD(时间旅行调试)功能的最好时机。对于那些不熟悉这个系列的人来说,你可以查看第一部分,在那里我建立了Windows远程内核调试的环境,还有第二部分,我写了一些关于WinDBG的基本命令。这将是一篇快速的文章,但由于这是一个非常有用的工具资源,我认为对我们介绍Windows的利用是不可缺少的。
概述
顾名思义,微软在WinDBG预览版上实现了一个功能,允许调试器穿越时空。来自微软。
“时间旅行调试,是一个允许你记录你的进程运行的执行情况,然后在以后向前和向后回放的工具。时间旅行调试(TTD)可以帮助你更容易地调试问题,让你 “倒退 “你的调试会话,而不是重现问题,直到你发现错误。
那么这意味着什么呢?通常我们可以开始调试一个应用程序,从那里我们能够设置断点,然后停止执行进行分析,但我们并不真正知道它在哪里结束。利用这个工具,整个执行过程将被记录下来(在磁盘上的一个文件中),我们将能够从结束到开始浏览执行过程。
例如,如果在执行过程中出现了崩溃,你将能够在执行过程中进行浏览,以发现什么地方出了问题,导致崩溃后的意外停止。通常情况下,我们可以确定崩溃前执行的最后一个函数,但是,这并不意味着这个执行是问题的根源。利用TTD,我们可以向后看,检查导致问题的数据来自哪里。
示范
使用我们在上一篇文章中已经提到的H2HC CTF的二进制文件与TTD一起工作–实际上,我确实使用TTD来解决这个难题。
以管理员身份启动WinDBG(使用TTD必须),进入开始调试,然后启动可执行文件(高级)。

图1 – 启动可执行文件
浏览二进制文件的位置,并标记 “用时间旅行调试记录 “的方框。会问你想在哪里保存你的记录。

图2 – 保存TTD文件的位置
你也可以附加到一个现有的进程中并启用TTD。
启动H2HC二进制挑战。
[+] H2HC - 16th Edition challenge
[+] Server listening
[+] Waiting for H2HC evil connections
复制代码
我将让逆向工程在另一篇博文中进行,现在,你需要知道这个服务正在等待54345/TCP端口的连接。使用正确的数据,我们将崩溃的二进制,然后我们可以点击 “停止和调试”。现在我们可以打开文件(开始调试>打开跟踪文件),我们将有整个执行流程供我们分析。
Microsoft (R) Windows Debugger Version 10.0.19528.1000 AMD64
Copyright (c) Microsoft Corporation. All rights reserved.
Loading Dump File [C:\Users\mphx2\Documents\h2hc01.run]
JavaScript script successfully loaded from 'C:\Program Files\WindowsApps\Microsoft.WinDbg_1.1912.11001.0_neutral__8wekyb3d8bbwe\amd64\TTD\Analyzers\HeapAnalysis.js'
JavaScript script successfully loaded from 'C:\Program Files\WindowsApps\Microsoft.WinDbg_1.1912.11001.0_neutral__8wekyb3d8bbwe\amd64\TTD\Analyzers\TtdAnalyze.js'
************* Path validation summary **************
Response Time (ms) Location
Deferred srv*
Symbol search path is: srv*
Executable search path is:
ModLoad: 00007ff7`3f9f0000 00007ff7`3fa04000 C:\Users\mphx2\Desktop\H2HC_CTF_2019\xpl_to_distribute\h2hc.exe
ModLoad: 00007ffc`ac840000 00007ffc`aca1a000 C:\ProgramData\Microsoft\Windbg\1-1912-11001\TTD\TTDRecordCPU.dll
ModLoad: 00007ffc`cb970000 00007ffc`cb984000 C:\Program Files\AVAST Software\Avast\aswhook.dll
ModLoad: 00007ffc`dd6e0000 00007ffc`dd76f000 C:\WINDOWS\SYSTEM32\apphelp.dll
ModLoad: 00007ffc`df750000 00007ffc`df9f3000 C:\WINDOWS\System32\KERNELBASE.dll
ModLoad: 00007ffc`e1280000 00007ffc`e13a0000 C:\WINDOWS\System32\RPCRT4.dll
ModLoad: 00007ffc`e1e30000 00007ffc`e1ee2000 C:\WINDOWS\System32\KERNEL32.DLL
ModLoad: 00007ffc`e2310000 00007ffc`e237f000 C:\WINDOWS\System32\WS2_32.dll
ModLoad: 00007ffc`e2540000 00007ffc`e2730000 C:\WINDOWS\SYSTEM32\ntdll.dll
.........
(1f20.fc0): Break instruction exception - code 80000003 (first/second chance not available)
Time Travel Position: F:0 [Unindexed] Index
!index
Indexed 2/2 keyframes
Successfully created the index in 379ms.
Microsoft (R) Windows Debugger Version 10.0.19528.1000 AMD64
Copyright (c) Microsoft Corporation. All rights reserved.
Loading Dump File [C:\Users\mphx2\Documents\h2hc01.run]
JavaScript script successfully loaded from 'C:\Program Files\WindowsApps\Microsoft.WinDbg_1.1912.11001.0_neutral__8wekyb3d8bbwe\amd64\TTD\Analyzers\HeapAnalysis.js'
JavaScript script successfully loaded from 'C:\Program Files\WindowsApps\Microsoft.WinDbg_1.1912.11001.0_neutral__8wekyb3d8bbwe\amd64\TTD\Analyzers\TtdAnalyze.js'
************* Path validation summary **************
Response Time (ms) Location
Deferred srv*
Symbol search path is: srv*
Executable search path is:
ModLoad: 00007ff7`3f9f0000 00007ff7`3fa04000 C:\Users\mphx2\Desktop\H2HC_CTF_2019\xpl_to_distribute\h2hc.exe
ModLoad: 00007ffc`ac840000 00007ffc`aca1a000 C:\ProgramData\Microsoft\Windbg\1-1912-11001\TTD\TTDRecordCPU.dll
ModLoad: 00007ffc`cb970000 00007ffc`cb984000 C:\Program Files\AVAST Software\Avast\aswhook.dll
ModLoad: 00007ffc`dd6e0000 00007ffc`dd76f000 C:\WINDOWS\SYSTEM32\apphelp.dll
ModLoad: 00007ffc`df750000 00007ffc`df9f3000 C:\WINDOWS\System32\KERNELBASE.dll
ModLoad: 00007ffc`e1280000 00007ffc`e13a0000 C:\WINDOWS\System32\RPCRT4.dll
ModLoad: 00007ffc`e1e30000 00007ffc`e1ee2000 C:\WINDOWS\System32\KERNEL32.DLL
ModLoad: 00007ffc`e2310000 00007ffc`e237f000 C:\WINDOWS\System32\WS2_32.dll
ModLoad: 00007ffc`e2540000 00007ffc`e2730000 C:\WINDOWS\SYSTEM32\ntdll.dll
.........
(1f20.fc0): Break instruction exception - code 80000003 (first/second chance not available)
Time Travel Position: F:0ntdll!LdrInitializeThunk:
00007ffc`e25b17f0 4053 push rbx
0:000>
复制代码
它从执行的开始,然后我们可以使用WinDBG中的所有命令,增加时间旅行调试的资源。向后,我们可以使用与向前相同的命令(g,t,p等),加上一个连字符。前往执行的终点。
0:000> g
ModLoad: 00007ffc`dec20000 00007ffc`dec87000 C:\WINDOWS\system32\mswsock.dll
(1f20.fc0): Access violation - code c0000005 (first/second chance not available)
First chance exceptions are reported before any exception handling.
This exception may be expected and handled.
Time Travel Position: 979:0
00000000`00000000 ?? ???
复制代码
我们可以看到,执行在一个NULL指针处结束。从现在的流程结束,我们可以向后移动并进行分析。
0:000> t-
Time Travel Position: 951:24
00000000`00000000 ?? ???
0:000>
*** WARNING: Unable to verify checksum for h2hc.exe
Time Travel Position: 951:23
h2hc+0x1476:
00007ff7`3f9f1476 c3 ret
0:000>
Time Travel Position: 951:22
h2hc+0x146f:
00007ff7`3f9f146f 4881c448010000 add rsp,148h
0:000> dqs rsp+0x148
00000000`001ff978 00000000`00000000
00000000`001ff980 00000000`0000010c
00000000`001ff988 00000000`00000100
[..]
复制代码
在H2HC+0x146f,它将被添加0x148字节到寄存器RSP,这个地址将是返回点,现在我们知道它将被指向NULL指针,使我们的二进制文件崩溃的地方。我们还可以确定堆栈地址00000000`001ff978。这就是问题发生的地方,让我们把注意力放在这个地址上。
0:000> t-
Time Travel Position: 951:21
h2hc+0x1098:
00007ff7`3f9f1098 c3 ret
0:000>
Time Travel Position: 951:20
h2hc+0x1091:
00007ff7`3f9f1091 4881c418020000 add rsp,218h
0:000>
Time Travel Position: 951:1F
h2hc+0x108b:
00007ff7`3f9f108b 880523d50000 mov byte ptr [h2hc+0xe5b4 (00007ff7`3f9fe5b4)],al ds:00007ff7`3f9fe5b4=00
0:000>
Time Travel Position: 951:1E
h2hc+0x1089:
00007ff7`3f9f1089 fec8 dec al
0:000>
Time Travel Position: 951:1D
h2hc+0x1082:
00007ff7`3f9f1082 0fb6052bd50000 movzx eax,byte ptr [h2hc+0xe5b4 (00007ff7`3f9fe5b4)] ds:00007ff7`3f9fe5b4=00
0:000>
Time Travel Position: 951:1C
h2hc+0x107e:
00007ff7`3f9f107e 488948f8 mov qword ptr [rax-8],rcx ds:00000000`001ff978=0000000000000000
0:000> dqs rcx
00000000`00000000 ????????`????????
复制代码
在这里,应用程序正在将数据从RCX(0x0)移动到RAX-0x8的地址,即堆栈中的注意地址。现在我们知道,NULL指针来自于这条指令。
为了进一步调试,我们仍然可以往回走。
0:000> t-
Time Travel Position: 951:1B
h2hc+0x107a:
00007ff7`3f9f107a 488b0c24 mov rcx,qword ptr [rsp] ss:00000000`001ff610=0000000000000000
0:000> t-
Time Travel Position: 951:1A
h2hc+0x1072:
00007ff7`3f9f1072 488b842420020000 mov rax,qword ptr [rsp+220h] ss:00000000`001ff830=00000000001ff980
0:000>
Time Travel Position: 951:19
h2hc+0x106e:
00007ff7`3f9f106e 48890424 mov qword ptr [rsp],rax ss:00000000`001ff610=0000000000000000
0:000>
Time Travel Position: 951:18
h2hc+0x106a:
00007ff7`3f9f106a 488b04c1 mov rax,qword ptr [rcx+rax*8] ds:00007ff7`3f9fe5b8=0000000000000000
0:000> dqs 00007ff7`3f9fe5b8
00007ff7`3f9fe5b8 00000000`00000000
00007ff7`3f9fe5c0 00007ff7`3f9f1a6b h2hc+0x1a6b
00007ff7`3f9fe5c8 00007ff7`3f9f165d h2hc+0x165d
复制代码
所以观察数据,我们可以看到,NULL指针确实起源于00007ff7`3f9fe5b8。
为了测试的目的,如果我们断点h2hc+0x1063并修改特定地址上的数据。
Breakpoint 0 hit
h2hc+0x1063:
00007ff7`3f9f1063 488d0d4ed50000 lea rcx,[h2hc+0xe5b8 (00007ff7`3f9fe5b8)]
0:000> eq 00007ff7`3f9fe5b8 0x4141414141414141
复制代码
然后我们继续执行。
0:000> g
(1418.2bc8): Access violation - code c0000005 (first chance)
First chance exceptions are reported before any exception handling.
This exception may be expected and handled.
h2hc+0x1476:
00007ff7`3f9f1476 c3 ret
复制代码
我们有一个不同的异常,检查堆栈框架。
00 41414141`41414141 : 00000000`000000d8 00000000`00000100 00000000`00eff3d8 00000000`00eff450 : h2hc+0x1476
01 00000000`000000d8 : 00000000`00000100 00000000`00eff3d8 00000000`00eff450 00000000`00000008 : 0x41414141`41414141
02 00000000`00000100 : 00000000`00eff3d8 00000000`00eff450 00000000`00000008 00000100`43483248 : 0xd8
复制代码
现在的返回点是我们定义的值。
这需要更多的调试来发现问题的真正根源,但我们已经可以分辨出执行时的数据了。我不会在这里解决这个问题,因为我将在未来利用一整篇文章来解决这个问题。
总结
正如所展示的,这个工具在分析过程中可能是一个非常有用和重要的工具。这对团队的贡献也很有帮助,因为你可以与任何人分享保存的文件进行分析。这个功能是非常直接的,没有什么神秘的地方,但是如果你有任何问题,请告诉我。





















![[桜井宁宁]COS和泉纱雾超可爱写真福利集-一一网](https://www.proyy.com/skycj/data/images/2020-12-13/4d3cf227a85d7e79f5d6b4efb6bde3e8.jpg)

![[桜井宁宁] 爆乳奶牛少女cos写真-一一网](https://www.proyy.com/skycj/data/images/2020-12-13/d40483e126fcf567894e89c65eaca655.jpg)