VisualC++信息安全编程(4)实现文件自我删除

来源:互联网 发布:java quartz 定时服务 编辑:程序博客网 时间:2024/05/21 17:00

文件自我删除是一个很有必要的功能,尤其在国家之间的网络战争。

[cpp] view plaincopy
  1. #include "stdafx.h"  
  2. #include <sys/stat.h>  //加入状态显示头文件.  
  3.   
  4. BOOL SelfDel1()  
  5. {  
  6.     SHELLEXECUTEINFO sei;  
  7.     TCHAR szModule [MAX_PATH],szComspec[MAX_PATH],szParams [MAX_PATH];  
  8.       
  9.     // 获得文件名.  
  10.     if((GetModuleFileName(0,szModule,MAX_PATH)!=0) &&  
  11.         (GetShortPathName(szModule,szModule,MAX_PATH)!=0) &&  
  12.         (GetEnvironmentVariable("COMSPEC",szComspec,MAX_PATH)!=0))  
  13.     {  
  14.         // 设置命令参数.  
  15.         lstrcpy(szParams,"/c del ");  
  16.         lstrcat(szParams, szModule);  
  17.         lstrcat(szParams, " > nul");  
  18.           
  19.         // 设置结构成员.  
  20.         sei.cbSize = sizeof(sei);  
  21.         sei.hwnd = 0;  
  22.         sei.lpVerb = "Open";  
  23.         sei.lpFile = szComspec;  
  24.         sei.lpParameters = szParams;  
  25.         sei.lpDirectory = 0;  
  26.         sei.nShow = SW_HIDE;  
  27.         sei.fMask = SEE_MASK_NOCLOSEPROCESS;  
  28.           
  29.         // 执行shell命令.  
  30.         if(ShellExecuteEx(&sei))  
  31.         {  
  32.             // 设置命令行进程的执行级别为空闲执行,使本程序有足够的时间从内存中退出.   
  33.             SetPriorityClass(sei.hProcess,IDLE_PRIORITY_CLASS);  
  34.             SetPriorityClass(GetCurrentProcess(),REALTIME_PRIORITY_CLASS);  
  35.             SetThreadPriority(GetCurrentThread(),THREAD_PRIORITY_TIME_CRITICAL);  
  36.               
  37.            // 通知Windows资源浏览器,本程序文件已经被删除.  
  38.             SHChangeNotify(SHCNE_DELETE,SHCNF_PATH,szModule,0);  
  39.             return TRUE;  
  40.         }  
  41.     }  
  42.     return FALSE;  
  43. }   
  44.   
  45. BOOL SelfDel2()  
  46. {  
  47.     CStdioFile  file;  
  48.     CFileException fileEx;  
  49.     TCHAR szDir[MAX_PATH];  
  50.     TCHAR szModule[MAX_PATH];  
  51.   
  52.     GetModuleFileName(0, szModule, sizeof(szModule));   // 获得应用程序名.  
  53.     GetCurrentDirectory(MAX_PATH, szDir);               // 获得文件的当前目录.  
  54.   
  55.     CString strFilePath=CString(szDir)+"tempDel.bat";   // 临时批处理文件名.  
  56.   
  57.     if(!file.Open(strFilePath,CFile::modeWrite |   
  58.         CFile::typeText | CFile::modeCreate,&fileEx))  
  59.     {  
  60.         #ifdef _DEBUG  
  61.         afxDump << "The file could not be opened " << strFilePath<<"\n";  
  62.         afxDump << "Cause :"<<fileEx.m_cause << "\n";  
  63.         #endif  
  64.         return FALSE;  
  65.     }  
  66.       
  67.     CString strCmdLine1,strCmdLine2;  
  68.     strCmdLine1.Format("del %s\n",szModule);  
  69.     strCmdLine2.Format("del %%0\n");  
  70.   
  71.     file.WriteString(strCmdLine1);                    // 写删除EXE的命令行.  
  72.     file.WriteString(strCmdLine2);                    // 写删除BAT的命令行.  
  73.     file.Close();  
  74.       
  75.     WinExec(strFilePath,SW_HIDE);                     // 执行自行删除操作.  
  76.   
  77.     return TRUE;  
  78. }  
  79.   
  80. void main()  
  81. {  
  82.     SelfDel1();  
  83. }  
0 0
原创粉丝点击