之前的笔记搬运
内存DUMP
0x1 什么是内存DUMP
把内存中的代码与资源按照PE格式拷贝出至硬盘就称之为内存DUMP
0x2 为什么需要内存DUMP
当程序在硬盘的文件被压缩, 运行后解密到内存还原成正常格式, 这时候脱壳需要DUMP
当一个内存中的文件你找不到硬盘中存放的位置时, 可以DUMP出来生成新的文件
0x3 如何DUMP
可以根据PE格式中FileHeader的NumberOfSections来确定节的数量,
之后通过节表结构里 VirtualAddress + SizeOfRawData
来确定需要DUMP出来的内存, 把DUMP出来的数据拼接在一起就是新的PE文件
DUMP最好的时机是在入口点, 没有执行代码前, 文件已经完全解密至内存,
而这时候没有对全局变量做任何操作, DUMP出来的内存兼容性是最高的;
0x4 如何防止被DUMP
在运行后擦除PE头部和节表信息, 程序运行后不需要这块信息,
而这时候就没有信息来决定DUMP出来的内存了
把所有进程的OpenProcess这个API挂钩, 企图打开自己程序的全部返回0
把程序需要的一些数据附加到PE尾部,
这样根据节表信息DUMP出来的文件就不能正常运行