windows平台实现dll远程注入的简单例子

简介:

最新看了下关于dll远程注入的东西,这个技术原来是用来隐藏木马很好的方式,现在貌似很难通过了,一般的杀软都能检测到相关的行为,

// 一个dll的代码,随便加了一个messagebox函数,仅用来测试注入时候成功的,注入成功会弹出这个对话框

 
  1. #include "stdafx.h"  
  2. #include <stdio.h>  
  3.  
  4. BOOL APIENTRY DllMain( HANDLE hModule,   
  5.                        DWORD  ul_reason_for_call,   
  6.                        LPVOID lpReserved  
  7.                      )  
  8. {  
  9.     MessageBoxA(NULL,"hello world","dll",MB_OK);      
  10.     return TRUE;  

// dll远程注入的代码,我这里是手动输入一个进程的pid的,其实也可以通过快照方式来固定一个进程进行注入

 
  1. #include <windows.h>  
  2.  
  3.  
  4. int  main ()  
  5. {  
  6.     DWORD  pid =  2324;  
  7.     LPVOID pAddress = 0;  
  8.     char *dllpath = "C:\\Documents and Settings\\All Users\\桌面\\dll\\Debug\\dll.dll";  
  9.     int dwSize = lstrlen(dllpath) + 1;  
  10.     DWORD  write = 0;  
  11.     BOOL bRet  = FALSE;  
  12.     HANDLE hThread  = 0;  
  13.     DWORD dwthread = 0;  
  14.  
  15.     PTHREAD_START_ROUTINE pfnThreadRtn = (PTHREAD_START_ROUTINE) GetProcAddress(GetModuleHandle(TEXT("kernel32")),"LoadLibraryA");  
  16.       
  17.     HANDLE  hPid = OpenProcess(PROCESS_ALL_ACCESS,FALSE,pid);  
  18.  
  19.     if ( NULL == hPid )  
  20.     {  
  21.         CloseHandle(hPid);  
  22.     }  
  23.  
  24.     pAddress = VirtualAllocEx( hPid,0,0x1000,MEM_COMMIT,PAGE_EXECUTE_READWRITE);  
  25.  
  26.     if ( NULL == pAddress)  
  27.     {  
  28.         VirtualFreeEx(hPid,pAddress,0x1000,MEM_RELEASE);  
  29.         CloseHandle(hPid);  
  30.     }  
  31.  
  32.      bRet  = WriteProcessMemory(hPid,pAddress,dllpath,dwSize,&write);  
  33.  
  34.     if ( FALSE == bRet )  
  35.     {  
  36.         VirtualFreeEx(hPid,pAddress,0x1000,MEM_RELEASE);  
  37.         CloseHandle(hPid);  
  38.     }  
  39.  
  40.     hThread = CreateRemoteThread(hPid,NULL,0,pfnThreadRtn,pAddress,0,&dwthread);  
  41.  
  42.     if ( NULL == hThread)  
  43.     {  
  44.         VirtualFreeEx(hPid,pAddress,0x1000,MEM_RELEASE);  
  45.         CloseHandle(hPid);  
  46.     }  
  47.  
  48.     return 0;     

 

本文转自wiliiwin 51CTO博客,原文链接:http://blog.51cto.com/wiliiwin/385444



相关文章
|
11月前
|
XML C# 数据格式
掌握了在Windows平台上查看DLL依赖的方法
掌握了在Windows平台上查看DLL依赖的方法
1610 4
|
4月前
|
安全 前端开发 Linux
Immunity CANVAS Professional 7.27 (macOS, Linux, Windows) - 渗透测试和漏洞利用平台
Immunity CANVAS Professional 7.27 (macOS, Linux, Windows) - 渗透测试和漏洞利用平台
152 3
Immunity CANVAS Professional 7.27 (macOS, Linux, Windows) - 渗透测试和漏洞利用平台
|
12月前
|
监控 Windows
Windows平台RTSP|RTMP播放器如何实时调节音量
我们在做Windows平台RTSP、RTMP播放器的时候,有这样的技术需求,特别是多路监控的时候,并不是每一路audio都需要播放出来的,所以,这时候,需要有针对音量调节的设计
179 1
|
6月前
|
固态存储 C++ 计算机视觉
Windows平台GIMP 2.10下载教程:零基础入门高级图像编辑
GIMP(GNU Image Manipulation Program)是一款开源跨平台图像编辑工具,支持图层管理、高级修图、色彩校正等功能,广泛应用于平面设计和照片修复。其优势包括全功能免费、插件生态丰富(600+扩展插件)、硬件要求低(1GB内存即可流畅运行)。本文详细介绍GIMP的软件定位、安装流程、首次配置及常见问题解答,帮助用户快速上手并充分利用其强大功能。
|
12月前
|
监控 C# 块存储
Windows平台RTSP|RTMP播放器如何叠加OSD文字
做Windows平台RTSP|RTMP播放器的时候,特别是多路播放场景下,开发者希望可以给每一路RTSP或RTMP流添加个额外的OSD台标,以区分不同的设备信息(比如添加摄像头所在位置),本文主要探讨,如何动态添加OSD台标。
226 1
Windows平台RTSP|RTMP播放器如何叠加OSD文字
|
11月前
|
NoSQL Shell MongoDB
Windows 平台安装 MongoDB
10月更文挑战第10天
285 0
Windows 平台安装 MongoDB
|
12月前
|
Linux Android开发 iOS开发
Windows平台RTSP|RTMP播放器如何实现实时录像功能
Windows平台RTSP、RTMP播放器实时录像接口设计,实际上,除了Windows平台,我们Linux、Android、iOS平台也是一样的设计,单纯的录像模块,如果做的全面,也不是一两个接口可以搞定的
314 1
|
11月前
|
并行计算 开发工具 异构计算
在Windows平台使用源码编译和安装PyTorch3D指定版本
【10月更文挑战第6天】在 Windows 平台上,编译和安装指定版本的 PyTorch3D 需要先安装 Python、Visual Studio Build Tools 和 CUDA(如有需要),然后通过 Git 获取源码。建议创建虚拟环境以隔离依赖,并使用 `pip` 安装所需库。最后,在源码目录下运行 `python setup.py install` 进行编译和安装。完成后即可在 Python 中导入 PyTorch3D 使用。
1078 0
|
4月前
|
安全 数据安全/隐私保护 虚拟化
Windows Server 2022 中文版、英文版下载 (2025 年 5 月更新)
Windows Server 2022 中文版、英文版下载 (2025 年 5 月更新)
694 2