1、DLL 是 Dynamic Link Library(动态链接库)的缩写,是 Windows 系统中的一种可执行文件格式,扩展名为 .dll。它的本质是一个模块化的程序组件,可以被其他程序调用其中的函数、资源或类库,而不需要把这些代码直接编译进主程序中。
2、DLL 是一组可被多个程序共享调用的函数或资源集合,通常以 .dll 文件形式存在。
3、几乎所有的exe都加载DLL
4、类似linux系统中共享对象文件(Shared Object, .so 文件)
5、DLL分类
|
|
|
---|---|---|
系统级 DLL | kernel32.dll
user32.dll , ntdll.dll |
|
软件自带 DLL | photoshopcore.dll
steam_api64.dll , msword.dll |
|
第三方库 DLL | libcrypto.dll
zlib1.dll , opencv_core.dll |
|
恶意 DLL | payload.dll
backdoor.dll |
|
二、DLL编写
1、攻防实战中99%是“自己写DLL”!
2、DLL 可以用 C/C++、Rust、C#、Go 等语言编写,但需注意 ABI 兼容性。
3、实战中,编写用于注入的恶意DLL,最常用C/C++,写法类似于shellcode加载器。
VS创建新项目→动态链接库DLL
默认自带两个cpp文件:dllmain.cpp/pch.cpp
4、DLL文件可以反编译成源码吗?
DLL和EXE本质是一样的,都是PE文件,都是机器码,可以被反编译,能看到汇编代码和部分伪C代码,但很难100%还原成开发者的源码。除非是.NET的DLL,否则只能还原功能逻辑,变量名和结构都变了。
三、DLL代码运行
DLL需要被其他程序(比如你写的EXE、目标软件或注入器)加载后才能运行,不能直接双击!
|
|
|
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
示例:exe调用
四、DLL注入的意义和价值
DLL注入是指将一个DLL动态链接库植入到目标进程的地址空间中,使其加载并执行你指定的代码。它本质上是一种进程注入技术,是一种攻击手段,用于实现绕过安全软件检测、权限提升、持久化等目的。
|
|
|
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
五、DLL如何注入
DLL注入的方式有很多,例如:
1、远程线程注入(最常见)
2、线程劫持
3、反射式注入
sRDI(
Shellcode Reflective DLL Injection)是一种将DLL转换为Shellcode的技术,全称为 "Shellcode Reflective DLL Injection",它的核心作用是:把一个DLL文件转换成一个可直接执行的、无需依赖磁盘落地的Shellcode。https://github.com/monoxgas/sRDI
熟悉反射DLL注入:
https://disman.tl/2015/01/30/an-improved-reflective-dll-injection-technique.html
4、APC注入
5、IAT劫持
6、DLL劫持
......
#免杀 #C2 #DLL注入 #shellcode加载器 #注射器 #CS
原文始发于微信公众号(仇辉攻防):【免杀】C2免杀技术(九)DLL注入-前置篇
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论