Como podemos tirar screenshots usando o Python no Windows?
Este tutorial irá ajudá-lo a hackear janelas , Vamos iniciar o tutorial.
Tirar screenshots
A maioria dos pedaços de malware e frameworks de testes de penetração incluem a capacidade de tirar screenshots contra o alvo remoto. Isso pode ajudar a capturar imagens, quadros de vídeo ou outros dados sensíveis que você pode não ver com uma captura de pacotes ou keylogger. Felizmente, podemos usar o pacote PyWin32 para fazer chamadas nativas para a API do Windows para capturá-las. Um capturador de tela utilizará a Interface do Dispositivo Gráfico do Windows (GDI) para determinar as propriedades necessárias, como o tamanho total da tela, e para capturar a imagem. Alguns softwares de captura de tela só vão pegar uma imagem da janela ou aplicação atualmente ativa, mas no nosso caso queremos a tela inteira. Let’s get started.
- import win32gui
- import win32ui
- import win32con
- import win32api
- # grab a handle to the main desktop window
- hdesktop = win32gui.GetDesktopWindow()
- # determine the size of all monitors in pixels
- width = win32api.GetSystemMetrics(win32con.SM_CXVIRTUALSCREEN)
- height = win32api.GetSystemMetrics(win32con.SM_CYVIRTUALSCREEN)
- left = win32api.GetSystemMetrics(win32con.SM_XVIRTUALSCREEN)
- top = win32api.GetSystemMetrics(win32con.SM_YVIRTUALSCREEN)
- # create a device context
- desktop_dc = win32gui.GetWindowDC(hdesktop)
- img_dc = win32ui.CreateDCFromHandle(desktop_dc)
- # create a memory based device context
- mem_dc = img_dc.CreateCompatibleDC()
- # create a bitmap object
- screenshot = win32ui.CreateBitmap()
- screenshot.CreateCompatibleBitmap(img_dc, width, height)
- mem_dc.SelectObject(screenshot)
- # copy the screen into our memory device context
- mem_dc.BitBlt((0, 0), (width, height), img_dc, (left, top),win32con.SRCCOPY)
- # save the bitmap to a file
- screenshot.SaveBitmapFile(mem_dc, 'c:\\WINDOWS\\Temp\\screenshot.bmp')
- # free our objects
- mem_dc.DeleteDC()
- win32gui.DeleteObject(screenshot.GetHandle())
Lets crack this code one by one
Line 11:
First we acquire a handle to the entire desktop , which includes the entire viewable area across multiple monitors.
Line 15–18:
We then determine the size of the screen(s) so that we know the dimensions required for the screenshot.
Linha 22- 23:
Criamos um contexto de dispositivo usando a função GetWindowDC e passamos um handle para o nosso desktop.
Linha 26:
A seguir precisamos criar um contexto de dispositivo baseado em memória onde armazenaremos nossa captura de imagem até armazenarmos os bytes de bitmap em um arquivo.
Linha 29 -31:
Criamos então um objeto de bitmap que é definido para o contexto do dispositivo do nosso desktop. A chamada SelectObject então define o contexto do dispositivo baseado na memória para apontar para o objeto bitmap que estamos capturando.
Linha 35 :
Usamos a função BitBlt para pegar uma cópia bit a bit da imagem da área de trabalho e armazená-la no contexto baseado na memória.
Linha 39:
Pense nisto como uma chamada de memória para objetos GDI. O passo final é descarregar esta imagem para o disco . Este script é fácil de testar: Basta executá-lo a partir da linha de comando e verificar o directório C:\WINDOWS\Temp para o seu ficheiro screenshot.bmp. Vamos passar para a execução do shellcode.