逆向技巧之计算dump文件大小

逆向技巧之计算dump文件大小_第1张图片

dump文件是逆向中经常会遇到的一个问题。如果病毒将恶意模块解密出来后,直接在内存中加载执行,就不会有文件释放。为了能够使用IDA分析恶意模块功能或者单独调试,需要将它dump下来,即转存为文件。


但dump之前有一个问题,原始文件的大小是多少呢?


比如像下面这样,病毒解密出PE文件内容后将其分段写入其他进程。这里我们可以定位到PE文件在内存中的起始地址0x011860D0,可以看到“MZ”标志。现在的问题是,结束地址是什么?

逆向技巧之计算dump文件大小_第2张图片


可以有3种方法:

直接往后拖,看到哪里像是文件末尾,就当做结束地址。这种方法需要非常丰富的逆向经验,适用于少数逆向大佬。

直接拖到内存块末尾,把它当做结束地址。这种方式也不是不可以,毕竟很多时候,解密出来的PE文件都是放在单独一块内存中的 ,而且就算dump出的文件末尾多了一些内容,也不会影响分析,但如果要提取文件的MD5的话就麻烦了。

根据PE结构计算出原始文件的大小。

逆向技巧之计算dump文件大小_第3张图片

我们先看一下PE文件的结构及其在内存中的映射方式。PE文件主要分为DOS头部PE文件头块表各区块以及文件末尾的不能映射部分(如调试信息等,在逆向时用处不大,而且很多时候都没有这部分)。

逆向技巧之计算dump文件大小_第4张图片


其中除了不能映射部分,其他部分的大小我们都是可以通过解析PE文件获取到的。我们现在只是需要获取总的大小,可以先把DOS头部、PE文件头、块表这几部分dump出来。只需要找到块表的位置即可,在内存中很容易找,一般带有“.text”、“.data”这样的区块名字符串,这里由于dump对象加了upx壳,所以区块名是“UPX0”“UPX1”,也是同样的道理。

逆向技巧之计算dump文件大小_第5张图片


如果不确定块表的结束地址的话,直接找到后面0x00结束的地方全部dump下来就可以了。这里是0x11864AA,大小为0x3DB。dump多了也没关系,这里不需要精准。

逆向技巧之计算dump文件大小_第6张图片


用LoadPE dump下来。

逆向技巧之计算dump文件大小_第7张图片


将dump下来的PE头放到DIE里面,主要关注“Offset”和“R.Size”两项,分别表示区块在文件中的偏移以及大小。我们直接找到最后一个区块“UPX2”的偏移以及大小:0x66a00,0x200。相加为0x66c00,即为需要dump文件除了文件末尾不能映射部分以外的大小。

逆向技巧之计算dump文件大小_第8张图片


重新dump。 

逆向技巧之计算dump文件大小_第9张图片


Dump出的文件的hash值可以在VT中找到,说明这是一个完整的文件。

逆向技巧之计算dump文件大小_第10张图片


由于在这个例子中,被dump的文件没有文件末尾的不能映射部分,所以能够精确dump。如果有这部分内容的情况下,就不能做到精确了,毕竟PE文件末尾的这部分大小是没有办法通过计算获取到的。不过对于被dump的文件,这部分内容对于分析它是没有影响的,只是会影响提取MD5。



原文作者:aWelBs

原文链接:https://bbs.pediy.com/thread-248670.htm

转载请注明:转自看雪学院



更多阅读:

看雪CTF.TSRC 2018 团队赛 第十二题 移动迷宫

[原创]恶意代码分析实战Chapter1

[原创] LL(1) 语法分析器解析算数表达式生成AST,和我学习编译的原因

[原创]【编译原理】文法解析算法以及左递归消除算法

你可能感兴趣的:(逆向技巧之计算dump文件大小)