Hack typeracer με τη βοήθεια της ruby

Το typeracer.com είναι ένα site - παιχνίδι στον browser που σε βοηθά να μάθεις να πληκτρολογείς γρηγορότερα. Μας αρέσει πολύ σαν ιδέα και είναι αρκετά προσεγμένο, γι' αυτό και με το κόλπο που θα δείξουμε, δεν πρόκειται να το βλάψουμε, περισσότερο θέλουμε να δείξουμε μια απλή τεχνική πώς γίνεται με την ruby.

Ξεκινώντας ένα νέο παιχνίδι στο typeracer, μας εμφανίζει ένα κείμενο και ξεκινάμε να το γράφουμε. Το scriptακι που θα παρουσιάσουμε στο παρόν άρθρο, γράφει το κείμενο στο input box του typeracer με μεγάλη ταχύτητα.

Πώς λειτουργεί;

Όταν ξεκινήσει ένα καινούριο race, αρχικά κάνουμε copy - paste το κείμενο που πρέπει να γράψουμε μέσα στο scriptaki μας (για την αντιγραφή υπάρχουν αρκετοί τρόποι που μπορούμε να το επιτύχουμε ανάλογα τον browser, π.χ. στον firefox μπορούμε να χρησιμοποιήσουμε είτε τον firebug είτε γράφοντας κάποιο script με το greasemonkey). Έπειτα τρέχουμε το προγραμματάκι μας και εστιάζουμε στο input box του typeracer. Έτσι ξεκινά η αντιγραφή του κειμένου χαρακτήρα προς χαρακτήρα πολύ γρήγορα. Το προγραμματάκι μας δηλαδή αναλαμβάνει απλά να στείλει τους χαρακτήρες έναν έναν στο input box του typeracer.

Παρουσίαση και εξήγηση του κώδικα

Ο κώδικας του προγράμματος μας είναι ο εξής:


require 'win32ole'
wsh = WIN32OLE.new('Wscript.Shell')

test=<<HERE

In order to become an elf I filled out ten pages worth of forms,
took a multiple choice personality test, underwent two interviews and a drug test.
The first interview was general, designed to eliminate obvious sociopaths.
During the second interview we were asked why we wanted to be elves.

HERE
test = test.split('')
sleep(3)
0.upto(test.length-5) {|x| wsh.SendKeys(test[x]); sleep(0.025) }

To script τρέχει σε windows, η πρώτη εντολή φορτώνει την απαραίτητη βιβλιοθήκη για χρήση του πληκτρολογίου ενώ η 2η δημιουργεί ένα νέο αντικείμενο για χρήση του πληκτρολογίου παρακάτω. Η επόμενη εντολή είναι ένα heredoc. Το heredoc είναι ένας ειδικός τρόπος εισαγωγής ενός string μέσα σε μια μεταβλητή για να μη χρειάζεται να βάλουμε escape characters. Με λίγα λόγια του λες "ξεκίνα από το HERE και τελείωσε στο επόμενο HERE και ότι δεις ανάμεσα τους, πάρτο σαν string". To HERE μπορεί να αντικατασταθεί από οποιαδήποτε άλλη λέξη. Μέσα στο heredoc κάνουμε επικόλληση το κείμενο από το typeracer.

Η εντολή test = test.split('') χωρίζει τους χαρακτήρες του heredoc έτσι ώστε να μπορέσουμε να τους χρησιμοποιήσουμε σε μια επανάληψη. Έπειτα χρησιμοποιούμε μια μικρή χρονοκαθυστέρηση 3 δευτερολέπτων (sleep(3)) πριν ξεκινήσει το script για να προλάβουμε να κάνουμε focus στο input box του typeracer και η τελευταία εντολή ξεκινά να στέλνει έναν έναν τους χαρακτήρες. Έχουμε βάλει μια μικρή χρονοκαθυστέρηση μετά από κάθε γράμμα (sleep(0.025)) γιατί διαφορετικά το script τρέχει υπερβολικά γρήγορα και το typeracer "καταλαβαίνει" ότι δεν είναι ανθρώπος αυτός που γράφει.

Στην επανάληψη παρατηρούμε ότι έχουμε βάλει να γράφει τους χαρακτήρες από το μηδέν (τον πρώτο) μέχρι το test.length -5 (δηλαδή όλο το μέγεθος του test μείον 5 χαρακτήρες). Αυτό το κάναμε επίσης για να μπορέσουμε να κοντρολάρουμε καλύτερα πότε θα τελειώσει. Τρέχοντας το script πιάνει απίστευτες ταχύτητες, οπότε αφού ολοκληρωθεί, μας μένει να εισάγουμε τους 4-5 τελευταίους χαρακτήρες μόνοι μας για να τελειώσουμε όποτε θελήσουμε εμείς.

Ένας άλλος τρόπος αντί για τη χρήση της εντολής split, να κάνουμε επανάληψη μέσα στο heredoc. Η ruby βλέπει τα strings και σαν arrays. Έστω η εντολή:


metavliti = "Ena tixaio string"
puts metavliti[4]

Το παραπάνω θα μας επιστρέψει 116. Το 116 είναι η ASCII μορφή του "t", γράφοντας metavliti[4].chr μας επιστρέφει το "t" όπου και είναι το 4ο γράμμα του string (ξεκινά από το μηδέν ο πίνακας και μετράει και το κενό). Οπότε ανάλογα θα μπορούσαμε να είχαμε προσαρμόσει τον κώδικα μας και να μη χρησιμοποιούσαμε την split.

Επίλογος

Φυσικά ο σκοπός μας δεν ήταν να χαλάσουμε το typeracer αλλά να παίξουμε και να το hackaρουμε με όμορφο τρόπο μαθαίνοντας παράλληλα. Όταν γράψουμε πάνω από 100 λέξεις το λεπτό στο typeracer μας δίνει μια εικόνα για κείμενο και μας ζητά να πληκτρολογήσουμε με 25% λιγότερη ταχύτητα από την αρχική το κείμενο της εικόνας αυτής. Με ένα OCR θα μπορούσαμε να διαβάσουμε την εικόνα και να γράψουμε επίσης γρήγορα και να ξεπεράσουμε κι αυτό το στάδιο, όμως αυτό θα χάλαγε τo παιχνίδι.

comments powered by Disqus