利用 r2 逆向分析框架分析 Windows Minidumps

本文介绍了如何利用radare2的mdmp模块进行Windows Minidumps文件的分析,包括文件格式、分析方法、EAT Hooking的检测以及从内存转储中Carving二进制文件的技术。
摘要由CSDN通过智能技术生成

用Microsoft使用minidump格式存储用户模式的内存转储(dump),它是一种公开记录的文件格式,以前几乎都是在WinDbg进行分析。

本文介绍如何使用radare2 mdmp模块进行Minidumps转储文件分析。

0x01 文件格式

该格式其实很简单,因为基本上都是数据流,这些数据流根据其内容而有所不同奇热

 $ r2 mini.dmp
 [0x00690efa]> i
 blksz    0x0
 block    0x100
 fd       6
 file     mini.dmp
 format   mdmp
 iorw     false
 mode     -r--
 size     0xc53a7be
 humansz  197.2M
 type     MDMP (MiniDump crash report data)
 arch     x86
 binsz    206809022
 bintype  mdmp
 bits     32
 canary   false
 crypto   false
 endian   little
 flags    0x00061826
 havecode true
 hdr.csum 0x00000000
 linenum  false
 lsyms    false
 machine  i386
 maxopsz  16
 minopsz  1
 nx       false
 os       Windows NT Workstation 6.1.7601
 pcalign  0
 pic      false
 relocs   false
 rpath    NONE
 static   false
 streams  13
 stripped false
 va       true

我们可以看到上面的文件mini.dmp包含13个stream,并且文件类型为MiniDuMP(MDMP)。有关MDMP格式基础的其他知识,请参阅Brendan Dolan-Gavitt撰写的文章

http://moyix.blogspot.co.uk/2008/05/parsing-windows-minidumps.html

0x02  分析

MDMP格式会生成一个信息量很大的文件,因此对文件的简单解析就足够了。使用radare2的pf命令很容易做到这一点,请参阅使用radare2解析文件格式的这篇文章:

http://radare.today/posts/parsing-a-fileformat-with-radare2/

以下是当前支持的文件结构的列表

 [0x00000000]> pf.
 pf.mdmp_memory_descriptor       pf.mdmp_misc_info               pf.mdmp_thread_info             
 pf.mdmp_thread_list             pf.mdmp_module                  pf.mdmp_unloaded_module_list    
 pf.mdmp_system_info             pf.mdmp_module_list             pf.mdmp_thread_info_list        
 pf.mdmp_location_descriptor     pf.mdmp_string                  pf.mdmp_memory64_list           
 pf.mdmp_vs_fixedfileinfo        pf.mdmp_location_descriptor64   pf.mdmp_header                  
 pf.mdmp_unloaded_module         pf.mdmp_memory_descriptor64     pf.mdmp_directory               
 pf.mdmp_memory_info             pf.mdmp_thread                  pf.mdmp_handle_data_stream
 pf.mdmp_memory_info_list

通过radare2的预定义二进制结构模式打开文件,可以查看MDMP文件的结构。mini.dmp文件具有如下所示的格式:

 [0x00000000]> pf.mdmp_header
           Signature : 0x00000000 = MDMP
             Version : 0x00000004 = 1812113299
     NumberOfStreams : 0x00000008 = 13
  StreamDirectoryRVA : 0x0000000c = 32
            CheckSum : 0x00000010 = 0
       TimeDateStamp : 0x00000014 = Tue Jan 31 18:44:24 2017
               Flags : 0x00000018 =  Flags (bitfield) = 0x00061826 : MiniDumpWithFullMemory | MiniDumpWithHandleData | MiniDumpWithUnloadedModule | MiniDumpWithFullMemoryInfo | MiniDumpWithThreadInfo | MiniDumpIgnoreInaccessibleMemory | MiniDumpWithTokenInformation

上面的标识记录了将被写入MDMP文件的信息,因此,需要某些标识来执行不同类型的分析,可以注意到文件项NumberOfStreams的file匹配项。使用NumberOfStreams和StreamDirectoryRVA可以打印出目录结构列表。

以下是线程信息和模块列表的结构,描述了它们的位置和大小

 [0x00000000]> pf.mdmp_stream_directory [13]? (mdmp_directory)directories
 [0x00000000]> pf.mdmp_stream_directory @ 32
  directories :
 [
 [snip]
                 st
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值