Python - Scattare delle foto non appena viene aperto il vostro pc in Python
July 6, 2021
Guida
Rieccocci qua con un altra release/guida nell’ambito della sicurezza informatica e, in questo caso specifico, nella sicurezza in generale. ! :D
Lo script nasce da una domanda molto semplice “Come posso sapere chi accede al mio pc?” certamente esistono i file di log ma vi sfido a controllare i file di log ogni giorno ed oltretutto i file di log ti dicono che c’è stato un accesso, ma ti danno anche una bella foto del suo faccione? => NO!
Vi rendete conto che è tutto molto bello ma nella praticità è poco facile, lento e snello nelle informazioni.
Ecco che ho deciso, banalmente, di creare uno script che scatta delle foto e le manda al mio indirizzo email privato, semplice no?
Competenze Necessarie
E' necessario saper programmare a livello base in Python. Verranno usate delle librerie esterne ma nulla di particolarmente complesso.
File Necessari
Vi basta avere Python installato sul vostro computer e una connessione ad internet.
Dovete avere 2 indirizzi email:
- Indirizzo Email personale che riceverà le foto, consiglio l’indirizzo email usato più frequentemente o che avete sul vostro telefono così da ricevere la notifica e leggerla in tempi molto brevi.
- Indirizzo Email “mandante” è fortemente consigliato usare un indirizzo email diverso da quello usato per fare altro, non usate quello che avete sui social, siti di banche e in generale **è sempre meglio crearne uno appositamente per fare solo questo! **
Se usate un indirizzo Email Gmail dovrete accedere alle impostazioni e acconsentire l’accesso da terze parti, qua trovate una guida a riguardo. Vi consiglio in fine di mettere una password molto complessa perché tanto dovrete solo fare copia e incolla e non dovrete mai inserirla manualmente, qua potrete generarne una.
Script
Lo script, scritto in Python e disponibile gratuitamente su GitHub, fondamentalmente si suddivide in 3 funzioni:
- main
- get_photos
- send_email
E' semplice intuire ciò che fanno ma vediamole nel dettaglio…
Main
E' di facile intuizione che il main l’ho voluto utilizzare semplicemente per far capire meglio i passaggi, che fondamentalmente sono 3 però così è chiaro che in primis verranno scattate le foto e poi verranno inviate.
La lista photos = [] acquisirà il nome di tutte le fotografie che verranno scattate.
Python:
def main():
photos = []
internet_test()
get_photos(photos)
send_email(photos)[/CODE]
Connection Test
Tramite questa funzione aggiuntiva si può verificare che ci sia o meno una connessione la quale, se manca, manda in sleep il programma per 10 secondi e ricorsivamente ritenta fino a che non viene rilevata una connessione ad internet.
Python:
def internet_test():
try:
response = urlopen('https://www.google.com/', timeout=10)
except:
time.sleep(10)
internet_test()
Get Photos
Questa funzione, come s’intuisce dal titolo, viene usata per catturare le foto scattate dalla webcam salvandone i nomi nella lista photos.
E' un ciclo while che va da 0 a quante foto volete scattare, io ho messo 10 ma potete mettere il numero che volete.
Python:
i = 0
while i < 10:
camera = cv2.VideoCapture(0)
return_value, image = camera.read()
file_name = 'safe'+str(i)+'.png'
photos.append(file_name)
cv2.imwrite(file_name, image)
i += 1
time.sleep(3)
del(camera)
camera = cv2.VideoCapture(0) Acquisisci la prima WebCam acquisibile, solitamente la WebCam del proprio pc
return_value, image = camera.read() Scatta la foto
cv2.imwrite(file_name, image) Salva l’immagine image con il nome file_name
Send Email
Tramite questa funzione si andrà a creare l’email che poi verrà mandata al nostro indirizzo personale.
Se il mio indirizzo email personale fosse nonameon@gmail.com e il mio indirizzo email creato appositamente fosse notifica.accesso@gmail.com con password **BK]gmS@@T_~L9_ka** allora modificherei il file nel seguente modo
Python:
password = "BK]gmS@@T_~L9_ka"
sender_email = "notifica.accesso@gmail.com"
receiver_email = "nonameon@gmail.com"
Se volessi ricevere una email che contenga come Oggetto NOTIFICA DI ACCESSO e con testo Email inviata automaticamente, è stato rilevato un accesso dal tuo PC!
Python:
message["Subject"] = "NOTIFICA DI ACCESSO" # To be changed, if you want TODO
message["From"] = sender_email
message["To"] = receiver_email
text = """\
Email inviata automaticamente, è stato rilevato un accesso dal tuo PC!
"""
with smtplib.SMTP_SSL("smtp.gmail.com", port, context=context) as server:
server.login(sender_email, password)
# Open PNG file in binary mode
for photo in photos:
with open(photo, "rb") as attachment:
part = MIMEBase("application", "octet-stream")
part.set_payload(attachment.read())
encoders.encode_base64(part)
part.add_header(
"Content-Disposition",
f"attachment; filename= {photo}",
)
message.attach(part)
text = message.as_string()
server.sendmail(
sender_email, receiver_email, message.as_string()
)
Visto che il codice dovrebbe essere accessibile a tutti, anche a chi è ad un livello base in Python non andrò molto nello specifico parlando solo delle cose più rilevanti
-
with smtplib.SMTP_SSL(“smtp.gmail.com”, port, context=context) as server: Stabilisci una connessione SMTP SSL, clicca qui per approfondire l’argomento se non sai di cosa si tratta
-
**server.login(sender_email, password) **Effettua il login con email e password settate precedentemente
-
# Open PNG file in binary mode
-
**for photo in photos: **Scorri i nomi delle foto fatte
-
with open(photo, “rb”) as attachment: “Apri” l’immagine, per approfondire questa parte ti consiglio di cliccare qui
-
part = MIMEBase(“application”, “octet-stream”) Viene usato per gestire gli allegati, clicca qui per approfondire
-
**part.set_payload(attachment.read()) **“Attacca” le foto all’email
-
encoders.encode_base64(part) Codifica in base64 necessaria, clicca qui per approfondire
-
part.add_header( Aggiungi intestazione come coppia chiave/valore alla parte dell’allegato
-
“Content-Disposition”,
-
f"attachment; filename= {photo}",
-
)
-
message.attach(part) “Attacca” gli allegati al messaggio
-
server.sendmail( Invia Email
-
sender_email, receiver_email, message.as_string()
Rendere più sicuro l’utilizzo della password
@0xbro ha pubblicato del codice aggiuntivo per migliorare la sicurezza della password, lo trovate cliccando qui
Applet
- Aggiungere informazioni relative all’IP(Pubblico) usato per connettersi a internet | Clicca Qui
Esempio Di Email
Vi ho risparmiato la faccia per non farvi spaventare
Conclusione
Come avete potuto notare è stato drasticamente semplice riuscire a creare questo script, è bastato combinare un paio di elementi per avere qualcosa per cui qualche azienda potrebbe tranquillamente chiedervi bei quattrini. Il codice è totalmente gratuito e pubblicato su GitHub, potete trovarlo cliccando qui. Se vi è stato utile lasciate una Star su GitHub oppure Seguitemi :)
Note
Avete notato com’è stato semplice scattare delle foto tramite la webcam senza che qualcuno possa farci caso? Prestate molta attenzione a ciò che scaricate perché uno script del genere può essere facilmente camuffato da qualunque software non ufficiale!!!
Consiglio
Consiglio di usare un copri webcam acquistabile su Amazon cliccando qui oppure se vi sentite in vena di fare un opera di bene compratelo tramite il sito EFF per supportare un progetto decisamente valido e diffuso in tutto il mondo, potete acquistarlo cliccando qui!
Il copri webcam è utile perché lo usate quando siete voi al pc e quando state andando via lo aprite sperando che i ladri non pensano di chiuderlo.