打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
[Win32] DLL注入技术

DLL注入是什么?DLL注入是把指定的DLL加载到另一个进程的内存空间中去的技术。

为何要注入DLL?完成一些特殊目的,病毒把恶意代码隐藏在正常的宿主进程中,瞒天过海。或者偷窥密码edit的内容(因为利用Windows消息机制获取不了密码框的内容),或者Hook API拦截对API的调用(比如进程保护不让自己被结束;还有杀软也可以通过这个拦截程序调用API干坏事,充分体现了杀软和病毒是同一种东西)等等。

=================================================

DLL注入技术有很多种,我知道的有:

1。通过远程线程注入(CreateRemoteThread)

2。通过全局消息钩子注入(SetWindowsHookEx)

3。通过注册表注入

4。通过输入法注入

5。驱动注入

6。在启动进程时直接挂起主线程,写入指令后再恢复线程(难度较大)

7。DLL劫持(严格意义上这个不是注入方法)

8。修改PE文件导入表

还有百度到的:

9。使用NtMapViewOfSection注入

10。使用SetThreadContext注入

=================================================

这里主要说一下第一种方法

1。用OpenProcess打开要注入进程的句柄。

2。用VirtualAllocEx在远程进程中申请一段内存,长度为DLL路径长度+1(多出来的一字节用于存放\0)。

3。用WriteProcessMemory将Dll的路径远程写入申请的内存中。

4。用CreateRemoteThread将LoadLibraryA作为线程启动函数,参数为DLL的路径,远程创建线程。

5。用CloseHandle关闭线程句柄。

6。会调用DllMain函数,在这个函数里完成你要做的事,比如偷窥密码edit的内容,或者Hook API了等等

源代码如下:

(注意最好加上Debug权限:http://blog.csdn.net/zuishikonghuan/article/details/47746451

  1. BOOL InjectDll(DWORD dwProcessID, char* dllPath){//参数:目标进程ID、DLL路径  
  2.     FARPROC FuncAddr = NULL;  
  3.     HMODULE hdll = LoadLibrary(TEXT("Kernel32.dll"));//加载DLL  
  4.     if (hdll != NULL){  
  5.         FuncAddr = GetProcAddress(hdll, "LoadLibraryA");//获取LoadLibraryA函数地址  
  6.         if (FuncAddr == NULL)return FALSE;  
  7.     }  
  8.   
  9.     HANDLE hProcess = OpenProcess(PROCESS_VM_OPERATION | PROCESS_VM_WRITE | PROCESS_VM_READ | PROCESS_CREATE_THREAD | PROCESS_VM_OPERATION, FALSE, dwProcessID);//获取进程句柄  
  10.     if (hProcess == NULL)return FALSE;  
  11.     DWORD dwSize = strlen(dllPath) + 1;  
  12.     LPVOID RemoteBuf = VirtualAllocEx(hProcess, NULL, dwSize, MEM_COMMIT, PAGE_READWRITE);//远程申请内存  
  13.     DWORD dwRealSize;  
  14.     if (WriteProcessMemory(hProcess, RemoteBuf, dllPath, dwSize, &dwRealSize))//远程写内存  
  15.     {  
  16.         DWORD dwThreadId;  
  17.         HANDLE hRemoteThread = CreateRemoteThread(hProcess, 0, 0, (LPTHREAD_START_ROUTINE)FuncAddr, RemoteBuf, 0, &dwThreadId);//创建远程线程  
  18.         if (hRemoteThread == NULL)  
  19.         {  
  20.             VirtualFreeEx(hProcess, RemoteBuf, dwSize, MEM_COMMIT);  
  21.             CloseHandle(hProcess);  
  22.             return FALSE;  
  23.         }  
  24.         //释放资源  
  25.         WaitForSingleObject(hRemoteThread, INFINITE);  
  26.         CloseHandle(hRemoteThread);  
  27.         VirtualFreeEx(hProcess, RemoteBuf, dwSize, MEM_COMMIT);  
  28.         CloseHandle(hProcess);  
  29.         return TRUE;  
  30.     }  
  31.     else  
  32.     {  
  33.         VirtualFreeEx(hProcess, RemoteBuf, dwSize, MEM_COMMIT);  
  34.         CloseHandle(hProcess);  
  35.         return FALSE;  
  36.     }  
  37. }  

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Dll注入经典方法完整版
DLL的远程注入技术详解
更新了已经过测试-Windows下如何改写目标进程的窗口函数来注入DLL
自删除程序的研究及实现
Windows下实现进程保护
将可执行程序以资源形式添加到另外一可执行程序[转贴]
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服