静态恶意代码逃逸(第六课)

倾旋
倾旋
技术分享|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文件来进行导出:
notion image
notion image
通过LoadLibrary这个API来加载DLL文件,使其运行,看起来是一个基础操作,那么还有另外一种方式吗?
接下来贴上MemoryModule的使用方法:
  1. 将要加载的PE文件读入内存
  1. 初始化MemoryModule句柄
  1. 装载内存
  1. 获得导出函数地址
  1. 执行导出函数
  1. 释放MemoryModule句柄
这里我将MemoryModule项目代码放入当前项目:
notion image
主要是:MemoryModule.hMemoryModule.cpp
加载代码
运行结果:
notion image
能够看到,成功加载并执行了msg函数。

0x03 反射DLL与MSF联动

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

生成DLL

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

0x04 总结

注意:学习的过程中,不同位数要对应不同的payload,编译平台也要互相对应
第六课就到这里了,主要是引入反射DLL加载这个技术,以及如何使用这个技术,如果想深入研究,还需要学习Windows PE相关的基础知识。
老样子,V站查杀一下:
notion image
挑战了全球的AV,全部通过
所有的新技术,都离不开强大的基础知识的铺垫,通过积攒基础知识,使自己能挑战更多的"不可能"。
©2021-2024 倾旋. All rights reserved.