静态恶意代码逃逸(第六课)
2020-1-2|2023-6-22

倾旋
type
status
date
slug
summary
tags
category
icon
password
URL
0x01 MemoryModule
先来介绍以下MemoryModule这个项目的来源。
项目背景:Windows操作系统在执行一个Windows PE格式的文件时,Windows自身是有一个Windows PE格式的解析器,通过PE格式把文件的各个节放入不同的内存区域。
爱折腾的程序员自己也想实现这个过程,那就是反射,这个反射机制就是将Windows PE格式通过自己写的代码进行解析,并把不同的节数据加载到内存中,通常这个反射加载技术被很多APT组织、大型渗透框架、病毒作者使用比较广泛。
当一个Windows PE格式的文件变成了一个内存中的字符串,意味着这个文件可以被任意方式去转换、加密、混淆,因此反病毒软件也难以查杀。
MemoryModule就是实现了这个过程:https://github.com/fancycode/MemoryModule
但是资料都是英文的,我在国内的社区上找到了中文版本的:https://gitee.com/china_jeffery/MemoryModule
0x02 反射DLL加载的实验
首先体验一下正常DLL加载的过程:
写一个DLL:
这里我采用了Def文件来进行导出:


通过LoadLibrary这个API来加载DLL文件,使其运行,看起来是一个基础操作,那么还有另外一种方式吗?
接下来贴上MemoryModule的使用方法:
- 将要加载的PE文件读入内存
- 初始化MemoryModule句柄
- 装载内存
- 获得导出函数地址
- 执行导出函数
- 释放MemoryModule句柄
这里我将MemoryModule项目代码放入当前项目:

主要是:
MemoryModule.h
、MemoryModule.cpp
加载代码
运行结果:

能够看到,成功加载并执行了msg函数。
0x03 反射DLL与MSF联动
不知道大家还是否记得第五课的Socket方式加载Shellcode,这里我将复用第五课的代码来实现与MSF的联动免杀。
思路是这样的:
通过Socket将Msf生成的DLL给接收到内存中,然后载入MemoryModule中,直接执行。
生成DLL

生成了一个5120字节的DLL
然后设置一下MSF DLL发射器:
此时就需要来撸码了,实现一个客户端,去Msf上获取DLL:
GetPEDLL函数主要是从MSF上获取DLL,通过recv函数不断接收,偏移获得DLL地址,然后扔给MemoryGetProcAddress。
实现效果如下:

0x04 总结
注意:学习的过程中,不同位数要对应不同的payload,编译平台也要互相对应
第六课就到这里了,主要是引入反射DLL加载这个技术,以及如何使用这个技术,如果想深入研究,还需要学习Windows PE相关的基础知识。
老样子,V站查杀一下:

挑战了全球的AV,全部通过
所有的新技术,都离不开强大的基础知识的铺垫,通过积攒基础知识,使自己能挑战更多的"不可能"。