windows黑客编程系列(八):以固定频率获取屏幕截图

功能技术模块

病毒木马的入侵并潜伏在用户计算机上总是有着某种目的,例如获取用户隐私的办公文件或是账号密码,或是控制肉鸡,或是进行加密磁盘文件然后进行勒索。

桌面截屏

对用户桌面进行截屏,获取截屏数据,能够让病毒木马的控制者直接观看到用户计算机的画面,直观地了解到目前计算机的操作和状态,便于监控用户计算机的屏幕,如果截屏频率够快,还能连成一段视频。

WIN API


GetDC

该函数检索指定窗口的客户区域,或整个屏幕上显示上下文环境的句柄,以后可以在GDI函数中使用该句柄来在设备上下文环境中绘图。

函数声明:

HDC WINAPI GetDC(
    _In_opt_ HWND hWnd);

参数说明:

  • hWnd:检索设备上下文环境窗口的句柄,如果该值为NULL,则该函数检索整个屏幕的设备上下文环境

返回值:

  • 若执行成功,则返回指定窗口的客户区域或整个屏幕上显示设备上下文环境的句柄;
  • 若执行失败,返回NULL;

BitBlt

对指定的源设备环境区域中的像素进行位块转换(Bit Block),以传送到目标设备环境。

函数声明:

 WINGDIAPI BOOL  WINAPI BitBlt(
 _In_ HDC hdc, 
 _In_ int x, 
 _In_ int y, 
 _In_ int cx, 
 _In_ int cy, 
 _In_opt_ HDC hdcSrc, 
 _In_ int x1, 
 _In_ int y1, 
 _In_ DWORD rop);

参数说明:

扫描二维码关注公众号,回复: 11081976 查看本文章
  • hdc:指向目标设备环境的句柄
  • x:指定目标矩形区域左上角的X轴逻辑坐标
  • y:指定目标矩形区域左上角的Y轴逻辑坐标
  • cx:指定源在目标矩形区域内的逻辑宽度
  • cy:指定源在目标矩形区域内的逻辑高度
  • hdcSrc:指向源设备环境的句柄
  • x1:指定源矩形区域左上角的X轴逻辑坐标
  • y1:指定源矩形区域左上角的Y轴逻辑坐标
  • rop:指定光栅操作代码,这些代码将定义源矩形区域的颜色数据,以及如何与目标矩形区域的颜色数据相组合以形成最后的颜色,下列为常见光栅操作代码:
含义
SRCCOPY 将源矩形区域直接复制到目标矩形区域
SRCAND 通过使用AND操作符将源和目标矩形区域内的颜色合并
SRCPAINT 通过使用OR操作符将源和目标矩形区域内的颜色合并

返回值:

  • 如果执行成功,则返回值非0
  • 如果失败,则返回值为0

ICONINFO结构体

结构体定义:

typedef struct _ICONINFO {
    BOOL    fIcon;
    DWORD   xHotspot;
    DWORD   yHotspot;
    HBITMAP hbmMask;
    HBITMAP hbmColor;
} ICONINFO;

成员说明:

  • fIcon:指定此结构是定义图标还是光标,若值为TRUE,则指定一个图标,否则指定光标
  • xHotspot:指向光标热点的X坐标,如果此结构定义了图标,则热点始终位于图标的中心,并且将忽略该成员
  • yHotspot:指向光标热点的Y坐标,如果此结构定义了图标,则热点始终位于图标的中心,并且将忽略该成员
  • hbmMask:指向图标位掩码的位图句柄。如果此结构定义了黑白图标,则将格式化此位掩码,以便上半部分是图标AND位掩码,下半部分是XPR位掩码
  • hbmColor:指向图标颜色位图的句柄。如果此结构定义了黑白图标,则此成员是可选的

编码实现

创建子目录,每两秒截一次屏,并保存在该子目录

// ConsoleApplication1.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <windows.h>
#include <stdio.h>
#include "resource.h"
#include "ConsoleApplication1.h"
#include <tchar.h>
#include <cstring>
#include <shlobj.h>
#include <tlhelp32.h>
#include <atlimage.h>


BOOL SaveBmp(HBITMAP hBmp, wchar_t *filename)
{
	CImage image;
	image.Attach(hBmp);
	image.Save(filename);
	return TRUE;
}

BOOL Get_screen(wchar_t *filename)
{
	HWND hDesktopWnd = GetDesktopWindow();
	HDC hdc = GetDC(hDesktopWnd);
	HDC mdc = CreateCompatibleDC(hdc);
	int dwScreenW = GetSystemMetrics(SM_CXSCREEN);
	int dwScreenH = GetSystemMetrics(SM_CYSCREEN);
	HBITMAP bmp = CreateCompatibleBitmap(hdc, dwScreenW, dwScreenH);
	HBITMAP holdbmp = (HBITMAP)SelectObject(mdc, bmp);
	BitBlt(mdc, 0, 0, dwScreenW, dwScreenH, hdc, 0, 0, SRCCOPY);
	SaveBmp(bmp, filename);
	return TRUE;
}


int main()
{
	_wmkdir(L"path");
	for (int i = 0; i < 5; ++i)
	{
		wchar_t filename1[5][40] = {L"1.png", L"2.png", L"3.png", L"4.png", L"5.png"};
		wchar_t filepath[20] = L"path";
		wchar_t filename[40] = { 0 };
		wsprintf(filename, L".\\%s\\%s", filepath, filename1[i]);
		printf("%ws\n", filename);
		BOOL bRet = Get_screen(filename);
		if (bRet)
		{
			printf("screen success!\n");
		}
		Sleep(2000);
		//每两秒抓一次截图
	}
	
	return 0;
}

运行效果

第一张截图
第二张
在这里插入图片描述

可利用桌面截屏功能+数据压缩功能+传输功能,实现固定频率截屏并回传功能。

发布了306 篇原创文章 · 获赞 213 · 访问量 31万+

猜你喜欢

转载自blog.csdn.net/AcSuccess/article/details/105715465