Come possiamo fare screenshot usando Python in Windows?
Questo tutorial vi aiuterà ad hackerare windows, iniziamo il tutorial.
Fare screenshot
La maggior parte dei malware e dei framework di penetration testing includono la capacità di fare screenshot contro l'obiettivo remoto. Questo può aiutare a catturare immagini, fotogrammi video, o altri dati sensibili che si potrebbero non vedere con un packet capture o un keylogger. Fortunatamente, possiamo usare il pacchetto PyWin32 per fare chiamate native all'API di Windows per catturarle. Un grabber di screenshot userà la Graphics Device Interface (GDI) di Windows per determinare le proprietà necessarie come la dimensione totale dello schermo, e per catturare l'immagine. Alcuni software di screenshot cattureranno solo un'immagine della finestra o dell'applicazione attualmente attiva, ma nel nostro caso vogliamo l'intero schermo. 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.
Line 22- 23:
Creiamo un contesto di dispositivo usando la chiamata alla funzione GetWindowDC e passiamo un handle al nostro desktop.
Line 26:
Poi dobbiamo creare un contesto di dispositivo basato sulla memoria dove memorizzeremo la nostra cattura dell'immagine fino a quando non memorizzeremo i byte bitmap in un file.
Line 29 -31:
Creiamo quindi un oggetto bitmap che è impostato al contesto di dispositivo del nostro desktop. La chiamata SelectObject imposta quindi il contesto del dispositivo basato sulla memoria per puntare all'oggetto bitmap che stiamo catturando.
Line 35 :
Utilizziamo la funzione BitBlt per prendere una copia bit per bit dell'immagine del desktop e memorizzarla nel contesto basato sulla memoria.
Line 39:
Pensate a questo come una chiamata memcpy per gli oggetti GDI. Il passo finale è quello di scaricare questa immagine su disco. Questo script è facile da testare: Basta eseguirlo dalla riga di comando e controllare la directory C:\WINDOWS\Temp per il vostro file screenshot.bmp. Passiamo all'esecuzione dello shellcode.
Articoli simili
- Come fare screenshot nelle applicazioni Android che non permettono di fare screenshot
- Possiamo memorizzare immagini (.jpg) nei database usando Python? Se sì, come?
- Come fanno alcune app o siti web a bloccare gli screenshot e far apparire una schermata nera quando si fa uno screenshot?
- Qual è la differenza tra Windows 10, Windows 10 KN, Windows 10 N e Windows 10 Single Language?