以勒索病毒StopV2为例
执行流程
第一层Loader通常用来解密解混淆动态加载API地址——VirtualAlloc
在VirtualAlloc申请的内存空间中,写入PayLoad——内存写入
执行PayLoad后到创建傀儡进程(CreateProcessA)将自身挂起,卸载内存镜像(ZwUnmapViewOfSection)再写入新的PE数据——ZwWriteVirtualMemory
断点
第1个断点
下VirtualAlloc,用来写入PayLoad,注意权限是可执行,或Size比较大:
断下后执行到返回(Ctrl+F9),EAX地址是申请的内存地址,对该地址下内存写入断点
F9执行到断下后,F2对PayLoad地址下断,再F9
更新
StopV2不下这个断点也可以,在↓的“ZwWriteVirtualMemory”可以断下来。
第2个断点
执行到PayLoad后断下,下ZwWriteVirtualMemory断点,参数有当前程序的加载基址时(非动态随机基址时是0x40 0000),下一行的就是数据源地址:
右键-备份-保存数据到文件,打开文件可能不是MZ开头,删除(12F15A0)前面多余的数据,就是PE数据了。
OD脚本处理
此类型的傀儡文件母文件,可以通过脚本完成对第二阶段PE数据的提取:
OD-脚本 - Dump傀儡进程的PE数据