找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 3667|回复: 0

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

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


作者:yincheng01 发表于2012-1-6 6:52:44 原文链接

您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-4-29 08:44 , Processed in 0.014866 second(s), 6 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表