win7 64 DLL的远程注入技术 及注入dll函数调用

一、DLL注入

DLL的远程注入技术是目前Win32病毒广泛使用的一种技术。使用这种技术的病毒体通常位于一个DLL中,在系统启动的时候,一个EXE程序会将这个DLL加载至某些系统进程(如Explorer.exe)中运行
这样一来,普通的进程管理器就很难发现这种病毒了,而且即使发现了也很难清除,因为只要病毒寄生的进程不终止运行,那么这个DLL就不会在内存中卸载,
用户也就无法在资源管理器中删除这个DLL文件,真可谓一箭双雕哉。记得2003年QQ尾巴病毒肆虐的时候,就已经有些尾巴病毒的变种在使用这种技术了。
到了2004年初,我曾经尝试着仿真了一个QQ尾巴病毒,但独是跳过了DLL的远程加载技术。直到最近在学校论坛上看到了几位朋友在探讨这一技术,便忍不住将这一尘封已久的技术从我的记忆中拣了出来,以满足广大的技术爱好者们。
在阅读本文之前,你需要了解以下几个API函数:

  ·OpenProcess - 用于打开要寄生的目标进程。

  ·VirtualAllocEx/VirtualFreeEx - 用于在目标进程中分配/释放内存空间

  ·WriteProcessMemory - 用于在目标进程中写入要加载的DLL名称

  ·CreateRemoteThread - 远程加载DLL的核心内容,用于控制目标进程调用API函数。

  ·LoadLibrary - 目标进程通过调用此函数来加载病毒DLL。

 在此我只给出了简要的函数说明,关于函数的详细功能和介绍请参阅MSDN。

示例程序

  我将在以下的篇幅中用一个简单的示例Virus.exe来实现这一技术。这个示例的界面如下图:


(1)首先运行Target.exe,这个文件是一个用Win32 Application向导生成的“Hello, World”程序,用来作为寄生的目标进程。

(2)然后在界面的编辑控件中输入进程的名称“Target.exe”,单击“注入DLL”按钮,这时候Virus.exe就会将当前目录下的DLL.dll注入至Target.exe进程中。

(3)在注入DLL.dll之后,你也可以单击“卸载DLL”来将已经注入的DLL卸载。

  模拟的病毒体DLL.dll

  这是一个简单的Win32 DLL程序,它仅由一个入口函数DllMain组成:

[cpp]  view plain copy
  1. BOOL WINAPI DllMain( HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved )  
  2. {  
  3.  switch ( fdwReason )  
  4.  {  
  5.   case DLL_PROCESS_ATTACH:  
  6.   {  
  7.    MessageBox( NULL, _T("DLL已进入目标进程。"), _T("信息"), MB_ICONINFORMATION );  
  8.   }  
  9.   break;  
  10.   case DLL_PROCESS_DETACH:  
  11.   {  
  12.    MessageBox( NULL, _T("DLL已从目标进程卸载。"), _T("信息"), MB_ICONINFORMATION );  
  13.   }  
  14.   break;  
  15.  }  
  16.  return TRUE;  
  17. }   


如你所见,这里我在DLL被加载和卸载的时候调用了MessageBox,这是用来显示我的远程注入/卸载工作是否成功完成。而对于一个真正的病毒体来说,
它往往就是处理DLL_PROCESS_ATTACH事件,在其中加入了启动病毒代码的部分:

[cpp]  view plain copy
  1. case DLL_PROCESS_ATTACH:  
  2. {  
  3.  StartVirus();  
  4. }  
  5. break;   

注入!
现在要开始我们的注入工作了。首先,我们需要找到目标进程:

  • 5
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值