Μετάβαση στο κύριο περιεχόμενο

Ένα απλό Python keylogger

Η περιέργεια είναι μια θεμέλια λειτουργία του ανθρώπινου νου. Τόσο θεμέλια που χωρίς αυτήν πολλά σύγχρονα επιστημονικά επιτεύγματα δεν θα είχαν πραγματωθέι ποτέ. Αποτελεί ευχή και κατάρα του ανθρώπινου είδους, μια αρετή που μπορεί να σε φέρει σε φαντασμαγορικές ανακαλύψεις μα και καταστροφικές καταστάσεις.  


The important thing is not to stop questioning. Curiosity has its own reason for existing. -Albert Einstein
Η Python είναι μια γλώσσα που πρωτογνώρισα αρκετά νωρίς στα βήματα μου στο κόσμο της πληροφορικής. Ένα software που χρησιμοποιούσα παλαιότερα για αν φτιάχνω τα particle effects στα βίντεο Doctor Who που δημιουργούσα ήταν το Particle Illusion. Το συγκεκριμένο διέθετε μια φανταστική  scripting engine στην Python με την οποία μπορούσες να παραμετροποιήσεις το core λογισμικό και να το φέρεις πραγματικά στα μέτρα σου. Έτσι στα 13 μου και εγώ, μην έχοντας ιδέα τι εστί γλώσσα προγραμματισμού ξεκίνησα να μαθαίνω την Python μέσα από το Particle Illusion, νομίζοντας πως είναι απλά κάτι ακόμα που πρέπει να μάθω για να με κάνω time lord, ωσάν τον Δόκτορα από το BBC.

Ο πύθωνας, αν και ονομασμένος έτσι χάρη στους Monty Python, είναι μια φανταστική γλώσσα προγραμματισμού. Ένα jack of all trades μα όχι και master of none. Ναι, ίσως είναι λιγάκι basic αν δεν χρησιμοποιήσεις όλες τα modules αλλά ποια γλώσσα δεν είναι; Με τα modules η Python πραγματικά γίνεται master of all trades.

Αυτή είναι και η περίπτωσή μας, δηλαδή το να χρησιμοποιήσουμε την Python για ένα keylogger χωρίς να χρειαστεί να πειράξουμε πολύ τα Windows ή να γνωρίζουμε καλά το low-level τρόπο λειτουργίας τους.

Καταρχάς, ας ξεκαθαρίσουμε κάτι. Ακολουθόντας τη γραμμή όλων όσων προσπαθούν με εκπαιδευτικά άρθρα να μυήσουν όλο και περισσότερους ανθρώπους στο κόσμο του software engineering και του hacking, θέλω να δηλώσω το εξής: hack for learning, not hacking.

Εν ολίγοις, οι γνώσεις που θα πάρετε, θα ήμουν περήφανος αν τις χρησιμοποιήσετε μονάχα για να μάθετε μερικά πράγματα σχετικά με τη συγκεκριμένη τεχνική και την νοοτροπία χρήσης της Python.

But, let's get started...  

Βήμα 1ο: Εγκατάσταση της Python στο σύστημα που θα εργαστούμε




 Κατεβάζουμε το επίσημο αρχείο εγκατάστασης της Python από το website ή τρέχουμε την κατάλληλη εντολή εγκατάστασης από το τερματικό μας εάν βρισκόμαστε σε -UNIX σύστημα. (να σημειωθεί πως το συγκεκριμένο keylogger θα δουλέψει μονάχα σε λειτουργικό σύστημα Windows μιας και ο τρόπος προγραμματισμού του είναι τέτοιος ώστε να αλληλεπιδρά μονάχα με το εξής σύστημα. Από την άλλη, μπορεί να προγραμματιστεί σε οποιδήποτε σύστημα διαθέτει έναν απλό text editor)

Βήμα 2ο: Κατεβάζουμε και εγκαθιστούμε τα απαρραίτητα modules 

Καθώς για να μπορέσουμε να αλληλεπιδράσουμε με το λειτουργικό σύστημα του υπολογιστή θα χρειαστούμε "εξωτερική" βοήθεια είναι καλό να κατεβάσουμε από τώρα τα απαρραίτητα modules. Αυτά είναι τα PyWin32 και PyHook και μπορούμε να τα βρούμε στην εξής ιστοσελίδα. 


(ΠΡΟΑΙΡΕΤΙΚΟ)Βήμα 3ο: Εγκατάσταση ενός text editor στο σύστημά μας 

Παρόλο που η Python διαθέτει το δικό της text editor (ένα IDLE ουσιαστικά) και εγκαθίσταται ταυτόχρονα με την ίδια τη γλώσσα, δεν ξέρω αν είναι και ο πιο εύχρηστος τρόπος να γράψει κανείς Python. Για μένα, η χρήση του IDLE δεν είναι η καλύτερη δυνατή εμπειρία.

Έτσι προτείνω - χωρίς να έχω καμία σχέση με τη δημιουργία ή την ανάπτυξη - το Notepad++. 




Βήμα 4ο: Ο κώδικας του keylogger 

Ο κώδικας του συγκεκριμένου keylogger είναι εξαιρετικά απλός και λιτός. Η αλήθεια είναι πως εξεπλάγην όταν παλαιότερα είχα δει ένα keylogger στην Python το οποίο είχε περί τις 100 γραμμές κώδικα περισσότερες συγκριτικά με αυτό εδώ, το οποίο καταφέρνει να παρέχει την ουσιώδη λειτουργία ενός keylogger σε ελάχιστες γραμμές κώδικα. Σίγουρα, το keylogger-μεγαθήριο θα προσέφερε και άλλες λειτουργίες αλλά πραγματικά σε όσες περιστάσεις - νόμιμες - μου χρειάστηκε ένα keylogger δεν κατάφερα να τις αξιοποιήσω. 

Καταρχάς, στο κώδικά μας πρέπει να εισάγουμε τις απαρραίτητες βιβλιοθήκες. 


Μετά, δημιουργούμε μια μεταβλητή η οποία θα δείχνει στο αρχείο καταγραφής των keystrokes. 


Δημιουργούμε τώρα τη συνάρτηση την οποία θα χρησιμοποιήσουμε ώστε να καταγράψουμε τα χτυπήματα στο πληκτρολόγιο. Για αυτή, θα χρησιμοποιήσουμε το module "logging" έτσι ώστε να το θέσουμε σε λειτουργία debugging και να του υποδείξουμε το όνομα του αρχείου καταγραφής αλλά και θα ζητήσουμε να καταγράφεται κάθε χαρακτήρας που εισάγεται από το πληκτρολόγιο και η αντιστοιχία του στο κώδικα ASCII .


Τελευταίο κομμάτι του κώδικά μας θα είναι να δημιουργήσουμε ένα hook στα Windows events μέσω του module pyHook και να αξιοποιήσουμε το module pythoncom για να αιχμαλωτίσουμε όλα τα μυνήματα πληκτρολογίου. 



Βήμα 5ο: Αποθήκευση του αρχείου 

Είναι πολύ σημαντικό να αποθηκεύσουμε σωστά το αρχείο του κώδικα στο δίσκο, που αποτελεί κατ'επέκταση και το εκτελέσιμο αρχείο μας. Αντί για το σύνηθες, θα σώσουμε το python αρχείο με την κατάληξη .pyw . Αυτό είναι χρήσιμο μιας και ο κώδικας θα εκτελεστεί στο παρασκήνιο, δίχως να ανοίξει κάποιο παράθυρο. Βέβαια, αν θέλουμε να προσθέσουμε στο κώδικά μας ένα μύνημα επιτυχίας στο τέλος έτσι ώστε να ξέρουμε ότι ο κώδικάς μας δούλεψε σωστά, τότε επανερχόμαστε στην αποθήκευσή του ως αρχείο .py .


 

Enjoy! :)



The important thing is not to stop questioning. Curiosity has its own reason for existing. Albert Einstein
Read more at: https://www.brainyquote.com/topics/curiosity
The important thing is not to stop questioning. Curiosity has its own reason for existing. Albert Einstein
Read more at: https://www.brainyquote.com/topics/curiosity
The important thing is not to stop questioning. Curiosity has its own reason for existing. Albert Einstein
Read more at: https://www.brainyquote.com/topics/curiosity
The important thing is not to stop questioning. Curiosity has its own reason for existing. Albert Einstein
Read more at: https://www.brainyquote.com/topics/curiosity

Σχόλια

Δημοφιλείς αναρτήσεις από αυτό το ιστολόγιο

Η "Dirty_Sock" και το packaging system της Canonical

Ένας ερευνητής ανακάλυψε μια νέα ευπάθεια που ονομάζεται "Dirty_Sock" στο REST API για το snapd deamon της Canonical που μπορεί να επιτρέψει στους επιτιθέμενους να αποκτήσουν root access σε μηχανές Linux.  Για να καταδείξει πώς μπορούν να αξιοποιηθούν αυτές οι ευπάθειες, ο ερευνητής έχει κυκλοφορήσει proof of concepts που χρησιμοποιούν διαφορετικές μεθόδους γιανα πραγματοποιήσουν το privilege escalation. Το σφάλμα στο REST API που οδηγεί στο privilege escalation  Κατά την ανάλυση της εγκατάστασης του snapd στο Ubuntu, ο Moberly ανακάλυψε ότι ο deamon χρησιμοποιεί UNIX sockets για να επιτρέπει στους προγραμματιστές να επικοινωνούν μαζί του χρησιμοποιώντας το REST API.  Καθώς αυτά τα socket τρέχουν κάτω από το περιβάλλον ασφαλείας του root user, άρχισε να ψάχνει για μεθόδους του API που θα μπορούσαν να επωφεληθούν από αυτά τα δικαιώματα και να αυξήσουν τα προνόμια του στο server. Κατά την ανάλυση του API, ο Moberly ανακάλυψε ότι είναι δυνατό να δημιουργη...