恶意代码分析中,经常会出现在内存中释放PE文件的操作。内存中的PE文件,通常被称作展开后的文件,dump下来的内存文件通常是无法被直接反编译的,这篇文章将简述一个通用的dump技巧,使内存中dump下来的PE文件被正常反编译,方便你的静态分析。
Virtual address、RAW address、Imagebase 、AddressOfEntryPoint。
virtual address 字段中的值,代表PE文件在内存中的页长度;RAW address 字段中的值,这代表PE文件在磁盘中的页长度;Imagebase 字段中的值,代表PE文件中的偏移地址从哪里开始计算;AddressOfEntryPoint 字段中的值,代表进程从哪里进入执行代码。
以一个恶意代码为例,进行演示。
首先在动态调试过程中,获取到内存中的PE文件。如下图中:
接下来将内存中的PE文件保存下来,此时还无法正常进行反编译,需要进行一些调整,将所有节区的virtual address 字段
的值复制粘贴给 Raw address 字段
。将 rax
寄存器中的值赋值给AddressOfEntryPoint 字段
。本示例修改使用的工具为 CFF Explore
。
所有涉及的字段,在下图中用红框标记。
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!