DLL远程注入实践
来源:互联网 发布:迅龙数据恢复官方下载 编辑:程序博客网 时间:2024/04/28 15:00
最近在网上找到一篇介绍DLL远程注入的文章《DLL远程注入技术》,通过DLL注入,可以让你的进程不独立运行,而是隐藏到一个普通的已经运行的进程中,很多木马好像就是这么实现的。感觉挺有趣的,所以就自己实践了下。主要用到的相关函数有:
1. CreateToolhelp32Snapshot 进程快照,找出想要注入的进程
2. OpenProcess 获得进程句柄
3. VirtualAllocEx 在远程进程中分配虚拟空间
4. WriteProcessMemory 写远程进程内存空间
5. CreateRemoteThread 在远程进程中创建线程
6. LoadLibrary 装载DLL
7. FreeLibrary 卸载DLL
8. GetModuleHandle 获得DLL的句柄
9. GetExitCodeThread 获得线程退出代码
特别注意这个函数,当以线程里面就只有一个函数时,线程的退出代码,就是函数的返回值。
DLL注入的思想方法:
1. 调用CreateToolhelp32Snapshot ,获得想要注入的目标进程ID
2. 调用OpenProcess获得目标进程句柄
3. 在VirtualAllocEx中,为目标进程分配保存DLL名称的大小虚拟空间
4. 调用WriteProcessMemory将 DLL 名称 写入到新申请的虚拟空间中,因为本线程的空间不能被目标进程使用。这也是要调用VirturalAllocEx分配空间的原因。
5. 调用CreateRemoteThread函数,为目标进程创建一个新的线程,线程函数为LoadLibrary ,参数为 新申请的虚拟内存地址,这样这个函数就可以执行了。
DLL卸载的思想方法:
前4步跟DLL注入式一样的,接下来不同的是:
5.调用CreateRemoteThread函数,为目标进程创建的新线程,但是调用的函数为
GetModuleHandle,目的是去的要卸载的DLL的模块句柄。
6. 调用WaitForSingleObject等待刚才新建线程退出,然后调用GetExitCodeThread函数,获得刚才线程的推出代码。即函数GetModuleHandle的返回值。
7. 再调用CreteRemoteThread函数,调用FreeLibrary函数,参数为刚才的GetModuleHandle的返回值。
8. 这样,卸载DLL的任务已经完成。
在编程过程中遇到的一些小问题,当时发现当目标进程就是本进程时没有问题,当要注入到一些其他的进程时,发现可以正确在目标进程中创建线程,但是没有注入DLL。后来发现是目标进程找不到目标DLL,当把目标DLL拷贝到C盘下面的Windows系统目录下面时,就可以正确注入目标进程了。
下面是我为了实现注入与注销的一个简单封装的DllManager类:
DllManager.h文件
DllManger.cpp文件:
- DLL远程注入实践
- C++:远程注入DLL
- zz - DLL远程注入
- 学习:DLL远程注入
- 远程dll注入 C#
- createremotethread()远程注入dll
- 远程线程dll注入
- DLL远程注入实例
- dll远程注入
- 远程DLL注入
- 远程线程DLL注入
- Dll远程注入解除
- DLL的远程注入
- DLL远程注入代码
- 远程注入DLL
- dll远程注入
- 远程线程注入dll
- dll远程注入
- Asp.net MVC 示例项目"Suteki.Shop"分析之---NVelocity模版引擎
- Http Handler 介绍
- Http Module 介绍
- 入手微软X6键盘
- 如何在子窗体(被调用者)中实现对其父窗体(调用者)的刷新
- DLL远程注入实践
- Asp.Net 三层式Web应用程序开发 - Part.1
- 鬼魅
- Matlab文件简单操作
- 修复 Internet Explorer 中的运行时错误
- LDAP技术资源
- 最新的ADO类
- Struts 的优缺点
- xp下jdk的 配置