黑帽python第二版(Black Hat Python 2nd Edition)读书笔记 之 第八章 windows常见特洛伊木马任务(2)截屏

黑帽python第二版(Black Hat Python 2nd Edition)读书笔记 之 第八章 windows常见特洛伊木马任务(2)截屏



写在前面

大多数恶意软件和渗透测试框架都具有在远程目标机器上截图的功能。这有助于捕获数据包或者捕获键盘记录器可能看不到的图像、视频帧或其他敏感数据。幸运的是,我们可以使用PyWin32包对WindowsAPI进行本地调用来获取它们。先用pip安装pywin32软件包:
在这里插入图片描述
屏幕截图抓取器将使用Windows图形设备接口(GDI)确定必要的属性,如屏幕总尺寸,并抓取图像。一些屏幕截图软件只会抓取当前活动窗口或应用程序的图片,但我们会抓取整个屏幕。

创建screenshotter.py脚本

创建并打开screenshotter.py,并放入以下代码:

import base64
import win32api
import win32con
import win32gui
import win32ui

def get_dimensions():
    width = win32api.GetSystemMetrics(win32con.SM_CXVIRTUALSCREEN)
    height = win32api.GetSystemMetrics(win32con.SM_CYVIRTUALSCREEN)
    left = win32api.GetSystemMetrics(win32con.SM_XVIRTUALSCREEN)
    top = win32api.GetSystemMetrics(win32con.SM_YVIRTUALSCREEN)
    return (width, height, left, top)

def screenshot(name='screenshot'):
    hdesktop = win32gui.GetDesktopWindow()
    width, height, left, top = get_dimensions()

    desktop_dc = win32gui.GetWindowDC(hdesktop)
    img_dc = win32ui.CreateDCFromHandle(desktop_dc)
    mem_dc = img_dc.CreateCompatibleDC()

    screenshot = win32ui.CreateBitmap()
    screenshot.CreateCompatibleBitmap(img_dc, width, height)
    mem_dc.SelectObject(screenshot)
    mem_dc.BitBlt((0, 0), (width, height), img_dc, (left, top), win32con.SRCCOPY)

    screenshot.SaveBitmapFile(mem_dc, f'{name}.bmp')

    mem_dc.DeleteDC()
    win32gui.DeleteObject(screenshot.GetHandle())

def run():
    screenshot()
    with open('screenshot.bmp') as f:
        img = f.read()
    return img

if __name__ == '__main__':
    screenshot()

让我们回顾一下这个小脚本的作用。我们获得了整个桌面的句柄,它包括多个监视器上的整个可视区域。然后我们确定屏幕(或者多个屏幕)的大小,这样我们就知道屏幕截图所需的尺寸。我们使用GetWindowDC函数创建设备上下文,并将句柄传递给桌面。接下来,创建一个基于内存的设备上下文,我们将在其中存储捕获的图像,直到将位图字节写入文件。然后,我们创建一个位图对象,该对象设置为桌面的设备上下文。然后,SelectObject函数将基于内存的设备上下文设置为指向我们正在捕获的位图对象。我们使用BitBlt函数获取桌面图像的bit-to-bit拷贝,并将其存储在基于内存的上下文中。将其视为对GDI对象的memcpy调用。最后一步是将此图像转储到磁盘。

小试牛刀

这个脚本很容易测试:只需从命令行运行它并检查目录中的screenshot.bmp文件。您还可以在GitHub命令和控制存储库中包含此脚本,因为run函数调用屏幕截图函数来创建图像,然后读取并返回文件数据。
具体的脚本执行效果如下图所示。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值