Alarm! 2


Μια IP camera που καθοταν απραγη, ενα λειτουργικο λαπτοπ με χαλασμενη οθονη, ενας νεος λογαριασμος στο Dropbox, ενα CCTV προγραμμα, ενα fork του Forthnet-SMS και συνδρομη στη Forthnet προκειμενου να μπορουμε να χρησιμοποιησουμε τα Forthnet SMS, η τελευταια εκδοση του PyInstaller και φυγαμε.
Στοχος η καταγραφη φωτογραφιων απο την καμερα οταν ανιχνευει κινηση στο χωρο, upload αυτων στο Dropbox, ενημερωτικο sms οτι αρχισε η καταγραφη απο την καμερα και λιγη τυχη να καταφτασει η αστυνομια πριν προλαβουν να κλεψουν τα εκατομμυρια μου.
1ο βημα δεν ειναι αλλο απο τη συνδεση της καμερας στο δικτυο. Αδυνατω να πιστεψω πως υπαρχει IP camera η οποια δεν περιεχει οδηγιες στο manual της για το συγκεκριμενο, οποτε συνεχιζω ανενδοτος.
Λειτουργικο συστημα για το laptop. Οτι Windows αγαπαει κανεις. Οχι πως δεν ειναι εφικτο με Linux και τις απαιτουμενες τροποποιησεις, αλλα στη περιπτωση μου ειχε εγκασταθει αρκετα πριν ο Windows Server 2012 για δοκιμες, οποτε παραμεινα ως εχει. Το CCTV προγραμμα, iCatcher, του οποιου link δινω πιο πανω, ειναι shareware αλλα διαθετει μια πληρως λειτουργικη δοκιμαστικη εκδοση των 21 ημερων (απαιτει email). Τελος, το patch του ForthnetSMS.py και ο PyInstaller για τη μετατροπη του σε exe.
Η εγκατασταση του iCatcher ειναι αρκετα απλη και επεξηγηματικη, παρ ολα αυτα το manual του βρισκεται σ αυτο το link για οποιον το χρειαζεται. Στοχος ειναι η προσθηκη ενος feed, αυτο της καμερας που εχουμε συνδεσει προηγουμενως στο δικτυο. Το μονο που χρειαζεται το προγραμμα, ειναι η IP της καμερας, το username, το password και το μοντελο της, οπως φαινεται και απο τη φωτογραφια 1. Στη συνεχεια εχουμε ουκ ολιγα feed settings με τα οποια μπορουμε να παιξουμε και μεταξυ αλλων αυτο του motion detection και της ποιοτητας της εικονας (φωτογραφια 2). Αφου τελειωσουμε με τα settings επομενο βημα στο iCatcher ειναι να δηλωσουμε το φακελο στον οποιο θα αποθηκευονται οι φωτογραφιες οι οποιες θα καταγραφονται απο την καμερα. Εδω ερχεται και ο νεος λογαριασμος στ

ο Dropbox (..ή οποια αλλη cloud service υπηρεσια προτιμα κανεις). Οπως ειναι λογικο δεν ειναι απαραιτητος ενας νεος λογαριασμος απο τη στιγμη που και ενας υπαρχον μπορει ανετα να χρησιμοποιηθει. Ο λογος που προτιμησα να μην συνδεσω το συγκεκριμενο μηχανημα με τον κανονικο μου λογαριασμο, ειναι πως εαν οντως μπει καποιος στο χωρο, ενα απο τα πρωτα πραγματα που θα παρει ειναι το συγκεκριμενο laptop, το οποιο βρισκεται σε κοινη θεα και παραλληλα θα λειτουργησει ως αποδιοπομπαιος τραγος. Με αλλα λογια προσπαθω να μειωσω τη χασουρα hardware και data, στο μικροτερο δυνατο. Για την ιστορια ο λογαριασμος στο Dropbox του συγκεκριμενου μηχανηματος εχει ως shared folder με τον κανονικο μου λογαριασμο, το φακελο στον οποιο καταγραφονται οι φωτογραφιες της καμερας οταν αυτη εντοπισει κινηση.
Ωραιο το sync με το Dropbox, αλλα εαν εκεινη την ωρα δεν ειμαι μπροστα σε καποιο pc μου, δεν θα παρω χαμπαρι οτι η καμερα εχει αρχισει να καταγραφει. Αρα περναμε σε κατι πιο αμεσο, αυτο της ενημερωσης οταν κατι κινειται μεσα στο σπιτι μου, με sms στο κινητο μου. Enter i-Catcher Alert.

Το Alert διαθετει ενα πληθος συναγερμων, οπως email, tweet (version>5), ftp/web upload και αυτο που μας ενδιαφερει, sms alert. Δυστυχως οι δυνατοτητες του συγκεκριμενου alert ειναι πολυ περιορισμενες, οποτε αναλαμβανουμε μεσω της Custom επιλογης να το φερουμε στα μετρα μας. Python, το μικρο patch του Forthnet-SMS script και τα dependencies του (mechanize).
Μικρο sidenote, για μεγαλυτερη ευκολια εγκαταστασης dependencies, προτεινω την εγκατασταση των setuptools. Χαρη σ αυτα μπορουμε στο μελλον να ικανοποιουμε οποιοδηποτε python dependency, δινοντας ενα easy_install dependency. Στην περιπτωση μας η εντολης ειναι easy_install mechanize. Στη συνεχεια αφαιρουμε τις interactive επιλογες του Forhnet-SMS script, αφου θελουμε να ειναι πληρως αυτοματοποιημενο και ενσωματωνουμε τον forthnet λογαριασμο-κινητο με το οποιο θα επικοινωνει οταν τρεχει.

import mechanize
import cookielib
login_email = “fakemail@ath.forthnet.gr”
password = “fakepassword!”
br = mechanize.Browser()
cj = cookielib.LWPCookieJar()
br.set_cookiejar(cj)
br.set_handle_robots(False)
br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=5)
br.addheaders = [(‘User-agent’, ‘Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11’)]
r = br.open(‘https://www.forthnet.gr/secure/webSMS/default.aspx’)
#Site-authentication (email/password)
br.select_form(nr=0)
br.form[‘Username’] = login_email
br.form[‘Password’] = password
br.submit()
#SMS texting/sending
br.select_form(nr=0)
br.form[‘txtTo’] = “6945111111” #προσθετουμε 2ο κινητο βαζοντας κομμα μετα το 1ο
br.form[‘txtMessage’] = “Something is moving in the house!Computers at risk!RUN!!”
br.submit()

Σωζουμε το παραπανω ως sendsms.py. Επομενο -και προτελευταιο βημα- η μετατροπη του script σε portable executable (aka .exe) μεσω του PyInstaller. Στο παραδειγμα μας, ο PyInstaller βρισκεται στο C:\Pyinstaller και εχουμε σωσει το sendsms.py στο C:\Pyinstaller\utils. Δινουμε

Makespec.py –onefile –noconsole -nSMS sendsms.py

οπου δηλωνουμε οτι θελουμε ενα μονο αρχειο, χωρις console, με ονομα “SMS” και το python script στο οποιο βασιζεται ειναι το sendsms.py. Υπαρχει πληθος switches τα οποια μπορουν να χρησιμοποιηθουν, ομως δεν ειναι απαραιτητα για τις αναγκες του εγχειρηματος.
Θα πρεπει να παρουμε ως αποτελεσμα κατι σαν το παρακατω

C:\Pyinstaller\utils>Makespec.py –onefile –noconsole -nSMS sendsms.py
wrote C:\Pyinstaller\utils\SMS.spec
now run Build.py to build the executable

Οπως μας ενημερωνει και ο PyInstaller, η επομενη εντολη ειναι

Build.py SMS.spec

για να δημιουργηθει το exe. Εδω ισως μας ζητηθει το pywin32 (build 218 οταν γραφονταν αυτες οι γραμμες). Τα αποτελεσματα της ειναι

C:\Pyinstaller\utils>Build.py SMS.spec
72 INFO: Testing for ability to set icons, version resources…
79 INFO: … resource update available
85 INFO: UPX is not available.
1406 INFO: checking Analysis
1407 INFO: building Analysis because out00-Analysis.toc non existent
1407 INFO: running Analysis out00-Analysis.toc
1408 INFO: Adding Microsoft.VC90.CRT to dependent assemblies of final executable
2703 INFO: Searching for assembly x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.21022.8_none …
2704 INFO: Found manifest C:\Windows\WinSxS\Manifests\x86_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.21022.8_none_bcb86ed6ac711f91.manifest
2710 INFO: Searching for file msvcr90.dll
2712 INFO: Found file C:\Windows\WinSxS\x86_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.21022.8_none_bcb86ed6ac711f91\msvcr90.dll
2712 INFO: Searching for file msvcp90.dll
2713 INFO: Found file C:\Windows\WinSxS\x86_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.21022.8_none_bcb86ed6ac711f91\msvcp90.dll
2713 INFO: Searching for file msvcm90.dll
2714 INFO: Found file C:\Windows\WinSxS\x86_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.21022.8_none_bcb86ed6ac711f91\msvcm90.dll
2920 INFO: Analyzing C:\Pyinstaller\support\_pyi_bootstrap.py
4884 INFO: Analyzing C:\Pyinstaller\PyInstaller\loader\pyi_importers.py
4972 INFO: Analyzing C:\Pyinstaller\PyInstaller\loader\pyi_archive.py
5068 INFO: Analyzing C:\Pyinstaller\PyInstaller\loader\pyi_carchive.py
5160 INFO: Analyzing C:\Pyinstaller\PyInstaller\loader\pyi_iu.py
5194 INFO: Analyzing sendsms.py
C:\Python27\lib\xml\__init__.py
5992 INFO: Hidden import ‘encodings’ has been found otherwise
5993 INFO: Looking for run-time hooks
5995 INFO: Analyzing rthook C:\Pyinstaller\support/rthooks/pyi_rth_encodings.py
7199 INFO: Warnings written to C:\Pyinstaller\utils\build\pyi.win32\SMS\warnSMS.txt
7217 INFO: checking PYZ
7219 INFO: rebuilding out00-PYZ.toc because out00-PYZ.pyz is missing
7220 INFO: building PYZ out00-PYZ.toc
8541 INFO: checking PKG
8542 INFO: rebuilding out00-PKG.toc because out00-PKG.pkg is missing
8544 INFO: building PKG out00-PKG.pkg
10779 INFO: checking EXE
10782 INFO: rebuilding out00-EXE.toc because SMS.exe missing
10783 INFO: building EXE from out00-EXE.toc
10798 INFO: Appending archive to EXE C:\Pyinstaller\utils\dist\SMS.exe


Το μονο που μενει ειναι δηλωσουμε στο i-Catcher Alert οτι σε περιπτωση συναγερμου θελουμε να τρεξει το SMS.exe. Μια δοκιμη αρκει για να δουμε εαν ολα δουλευουν οπως θα πρεπε (photo 4)

Και οντως, μετα απο λιγα δευτερολεπτα ερχεται το παρακατω, ανησυχητικο SMS (photo 5). Μερικες τελευταιες παρατηρησεις. Το ολο συστημα προφανως και εχει τρωτα σημεια και δεν αποτελει τιποτα παραπανω απο ενα ακομα στρωμα ασφαλειας. Ο αρκετα υποψιασμενος κλεφτης πριν παρει το laptop παραμασχαλα, εχει τη δυνατοτητα να σβησει τις

φωτογραφιες που εχουν καταγραφει στον Dropbox folder, με αποτελεσμα να σβηστουν και απο τις υπολοιπες συσκευες. Βεβαια το undelete του Dropbox, πιθανοτατα δεν θα του κανει ευκολα τη χαρη να σβησει καθε ιχνος του. Επισης το κλειδωμα του laptop βοηθα αρκετα στη σπαταλη πολυτιμου χρονου του δραστη σε περιπτωση που οντως ψαξει τροπο να σβησει τα ιχνη του. Στην περιπτωση μου, η σπασμενη του οθονη, ειναι η καλυτερη δυνατη αμυνα:) Εννοειται πως εαν ο αγαπητος κλεφτης ειναι κουκουλοφορος, καναμε μια τρυπα στο νερο οσον αφορα την αναγνωριση του.
Το μεγαλυτερο ομως τρωτο σημειο του συστηματος ειναι η παρουσιαση του σε αυτο το blog. Αγαπητε κλεφτη/αναγνωστη που μ εχεις βαλει στο ματι, να ξερεις οτι εχω και αλλο, ισχυρο μετρο ασφαλειας στο μανικι μου: Δεν διαθετω κατι πολυτιμο στο σπιτι μου και ο λογος που εκατσα και ασχοληθηκα με το ολο εγχειρημα ειναι o geek που κρυβω(?) μεσα μου.
Καλες γιορτες σε ολους και χρονια πολλα στους αυριανους εορταζοντες!


Leave a comment

Your email address will not be published. Required fields are marked *

Bot or not? * Time limit is exhausted. Please reload CAPTCHA.

2 thoughts on “Alarm!