Το προφίλ μας στο Google Plus
16

Φτιάξτε το δικό σας (ro)bot!

A robot is a mechanical or virtual, artificial agent. It is usually a system, which, by its appearance or movements, conveys a sense that it has intent or agency of its own. The word robot can refer to both physical robots and virtual software agents, but the latter are usually referred to as bots to differentiate (βλ. και σχετικό λήμμα της Wikipedia).

Όχι, δεν αποφασίσαμε να αλλάξουμε την γλώσσα που γράφουμε τα άρθρα. Απλά, μερικές φορές μια μετάφραση δεν είναι τόσο αντιπροσωπευτική αν δεν δίνεται μαζί με το πρωτότυπο κείμενο. Η λέξη “ρομπότ” είναι γνωστή πολύ πριν τον πρώτο IBM PC και το PC-DOS version 1, το μακρινό εκείνο 1981!

Το ρομπότ είναι μια μηχανική ή εικονική, τεχνητή συσκευή που με την παρουσία της μπορεί να εκτελέσει αυτόνομες ενέργειες ή κινήσεις. Η λέξη ρομπότ συνήθως αναφέρεται σε φυσικές συσκευές, ενώ οι εικονικές (τα προγράμματα) αναφέρονται απλά ως bots.

Στόχος μας στο παρόν είναι να σας δώσουμε να καταλάβετε τον τρόπο με τον οποίο φτιάχνονται τα bots. Λέτε όμως να περιοριστούμε μόνο σε αυτό; Χμ, όχι βέβαια ;) Είναι βλέπετε πεποίθησή μας ότι σημασία δεν έχει μόνο το εργαλείο αλλά και ο τρόπος που θα το χρησιμοποιήσεις! Θα δούμε λοιπόν κι έναν πολύ ενδιαφέρον παράδειγμα χρήσης. Αυτή τη φορά δεν θα κρύψουμε το εμπλεκόμενο site. Οι ενέργειες που θα πραγματοποιήσουμε δεν υποκρύπτουν κάποιον κίνδυνο ή, τέλος πάντων, δεν μπορεί να θεωρηθούν ως απειλές για τον server. Για να είμαστε όμως πιο σαφείς και …ειλικρινείς, πρέπει να πούμε ότι στην πραγματικότητα ο server δεν μπορεί να τις λάβει ως απειλές, αφού οι ενέργειές μας δεν παραβιάζουν κανέναν, μα κανέναν κανόνα ασφάλειας.
Α, να μην το ξεχάσουμε: Ως παράπλευρη γνώση, θα δείξουμε πώς φτιάχνεται κι ένας web browser μέσα σε ελάχιστα δευτερόλεπτα! Αναρωτιέστε πώς είναι δυνατόν κάτι τέτοιο; Συνεχίστε να διαβάζετε και θα δείτε πώς ;)

Εικόνα 1: Ένας web browser που φτιάξαμε ώσπου να πεις 'deltaHacker'!

Όλοι μας λίγο ή πολύ έχουμε γραφτεί σε κάποιο forum. Δεν είναι λίγες οι φορές που απαντάμε σε κάποιες γνώμες ή θέματα (topics) που έχουν γράψει κάποιοι άλλοι στο forum. Η ενέργεια που κάνουμε συνήθως, όταν θέλουμε να απαντήσουμε σε ένα topic, είναι να πατήσουμε στο “Απάντηση”, να γράψουμε την απάντηση στο αντίστοιχο πεδίο της φόρμας που θα εμφανιστεί και μετά να πατήσουμε το “Save” ή το “Post” ή κάτι άλλο σχετικό, ώστε να στείλουμε στον server την απάντηση μας, η οποία θα καταχωρηθεί στη βάση δεδομένων κι αναλόγως των ρυθμίσεων ενδέχεται να τη δουν όλοι οι άλλοι χρήστες του forum.

Τι θα λέγατε αν όλη την παραπάνω διαδικασία την έκανε ένα πρόγραμμα (bot), αυτόματα; Δηλαδή, να πατάει το κουμπί της απάντησης, να γράφει ένα αυτόματο κείμενο που θα του έχουμε δώσει εμείς από πριν και μετά να πατάει το κουμπί της υποβολής. Α, κι αυτό μάλιστα να το κάνει όσες φορές του πούμε εμείς!

Το bot θα το γράψουμε στη γλώσσα προγραμματισμού C#, χρησιμοποιώντας το MS Visual Studio 2008. Το site που θα δεχτεί (αδιαμαρτύρητα) τις δοκιμές μας είναι to http://forum.statcounter.com, ένα forum με την πολύ καλή VBulletin.

Ξεκινώντας από τα βασικά, ανοίγουμε το MS Visual Studio 2008 και δημιουργούμε ένα νέο project σε C# (Βασικές γνώσεις στο Visual Studio χρειάζονται, χωρίς όμως να είναι 100% απαραίτητες για να πάρουμε το μήνυμα του άρθρου. Δεν θα αναφερθούμε με λεπτομέρειες στα settings και σ’ όλα τα απαραίτητα περί event driven programming -τουλάχιστον όχι στο παρόν post- αφού τότε θα ξεφεύγαμε από το βασικό μας στόχο.)

Επιλέγουμε Windows Form Application και ξεκινάμε το έργο (project) μας. Στην άδεια φόρμα που θα εμφανιστεί ρίχνουμε τα παρακάτω components:

* ένα textBox
* έναν webBrowser

Στο event “KeyPress” του TextBox, βάζουμε τον ακόλουθο κώδικα:

if (e.KeyChar == 13)
    webBrowser1.Navigate(textBox1.Text);

Αυτό ήταν, ο web browser είναι έτοιμος!

Στην πράξη, αυτό που κάναμε είναι να χρησιμοποιήσουμε το έτοιμο component (συστατικό1) που λέγεται webBrowser, καθώς και το textBox. Όταν ο χρήστης γράψει κάτι στο textbox και πατήσει [Enter] τότε καλείται το event Keypress και η μεταβλητή συστήματος e.keyChar έχει την τιμή 13. To 13 αντιπροσωπεύει το πλήκτρο [Enter] (ή Carriage Return, CR, στον κώδικα ASCII). Τότε, λοιπόν, καλούμε τη συνάρτηση webBrowser1.Navigate(textBox1.Text) που σημαίνει ότι κάνουμε navigate στο URL που δώσαμε στο text box (textBox1.Text). Διαδικασία απλή έως γελοία, η οποία θέλει λιγότερο από ένα λεπτό για να υλοποιηθεί!

Ας πάμε στο site που μας ενδιαφέρει. Στη μπάρα διευθύνσεων πληκτρολογούμε http://forum.statcounter.com και πατάμε [Enter]. Ο explorer μας μάς πάει στο site που του ζητήσαμε. Πιο συγκεκριμένα, βρισκόμαστε στη φόρμα που απαιτεί login και password. Να πούμε ότι στο forum αυτό έχουμε ήδη γραφτεί ως μέλη κι έχουμε κάποιο login και password.

Εικόνα 2: Η login φόρμα του forum που θα δοκιμάσουμε!

Πριν προχωρήσουμε στην αυτόματη είσοδο μας στο forum θα πρέπει να δώσουμε μια σύντομη περιγραφή για τις ενέργειες που βρίσκονται πίσω από τα Buttons του προγράμματος που έχουμε φτιάξει.

* Login!: Κάνει αυτόματη εισαγωγή των username και password που ήδη έχουμε και μας βάζει στο forum.

* Διόρθωση Post, Νέο Κείμενο και Σώσε το Post: Τρεις διαφορετικές ενέργειες που κάνουν ό,τι λένε, σε ξεχωριστά βήματα. Δηλαδή, η πρώτη ενέργεια βάζει ένα δικό μας post σε κατάσταση διόρθωσης, η δεύτερη εισάγει αυτόματα στο post ένα έτοιμο κείμενο (που έχουμε ήδη δώσει εμείς στο πρόγραμμα από πριν) και η τρίτη κάνει save στέλνοντας το κείμενο στον server.

* H ενέργεια One Man Show κάνει όλες τις τρεις παραπάνω ενέργειες με μία κίνηση.

Ας αναλύσουμε όλες τις ενέργειες μία προς μία, βλέποντας φυσικά και τον κώδικα που κρύβεται πίσω από τα buttons.

Κουμπί Login!
webBrowser1.Document.GetElementById("navbar_username").InnerText ="Tester";
webBrowser1.Document.GetElementById("navbar_password").InnerText = "xxxxxxxxxxx";

foreach (HtmlElement HtmlElement1 in webBrowser1.Document.Body.All)
    {
    if (HtmlElement1.GetAttribute("value") == "Log in")
        {
        HtmlElement1.InvokeMember("click");
        break;
        }
    }

Οι πρώτες δύο γραμμές θα εισάγουν αυτόματα μέσα στα πεδία User Name και Password τα στοιχεία που πήραμε από το forum όταν γραφτήκαμε (το password είναι κρυμμένο για ευνόητους λόγους). Εδώ θα πρέπει να κάνουμε μια διευκρίνηση: Η φόρμα που βλέπουμε είναι γραμμένη σε HTML. Αυτό που μας στέλνει ο server όταν τον επισκεπτόμαστε είναι το αρχείο της HTML. Ο web browser μας (και κάθε web browser, π.χ. Firefox, Opera – άντε κι ο Internet Explorer ;) αποδίδει το αρχείο HTML σε κάτι πιο κατανοητό στο μέσο άνθρωπο, συγκεκριμένα στην αντίστοιχη ιστοσελίδα. Όμως το πραγματικό αρχείο HTML πού είναι; Μπορούμε να το δούμε;
Και βέβαια μπορούμε, αρκεί να ζητήσουμε την προβολή του πηγαίου κώδικα (source) της ιστοσελίδας που τώρα βλέπουμε. Πιο συγκεκριμένα, στον Firefox θα δώσουμε View –> Page Source ή θα πατήσουμε το συνδυασμό πλήκτρων [CTRL+U]. Την ίδια δυνατότητα έχουν και όλοι οι άλλοι browsers (βρείτε εσείς τις αντίστοιχες επιλογές μενού ή/και συνδυασμούς πλήκτρων).

Το ερώτημα τώρα είναι: Μας χρειάζονται οι πληροφορίες από το αρχείο HTML για το πρόγραμμα που θέλουμε να φτιάξουμε; Η απάντηση είναι μονολεκτική: Ναι! Εξηγούμαστε: Μια φόρμα HTML αποτελείται από συγκεκριμένα αντικείμενα τα οποία τα έβαλε ο προγραμματιστής που την έφτιαξε. Τέτοια αντικείμενα μπορεί να είναι: Πεδία εισαγωγής, εικόνες, μενού, links, κουμπιά κ.ο.κ. Κάθε τέτοιο αντικείμενο έχει ένα όνομα ή καλύτερα (κατά HTML) έχει ένα id (identification) – μια ταυτότητα, δηλαδή. Σε κάθε φόρμα που βλέπουμε στον browser μας, το όνομα κάθε αντικειμένου είναι διαφορετικό. Εμείς, για να φτιάξουμε το πρόγραμμα που θα δίνει αυτόματα τιμή στα πεδία login και password πρέπει οπωσδήποτε να γνωρίζουμε τα id των αντικειμένων (text boxes) User Name και Password. Στην περίπτωση μας, αυτά είναι τα navbar_username και navbar_password αντίστοιχα. Φαίνονται στις πρώτες δυο γραμμές του κώδικα μας και είναι αυτά στα οποία αποδίδουμε τιμές ;).

Πώς τα βρήκαμε, όμως; Χεχε, υπάρχουν τουλάχιστον δύο τρόποι: ο γρήγορος και ο πιο γρήγορος! O γρήγορος είναι να κάνουμε View Source και να ψάξουμε, μέσα στον κώδικα HTML που θα παρουσιαστεί, τα id των συγκεκριμένων πεδίων. Στην περίπτωση αυτή θα δούμε το παρακάτω.

Εικόνα 3: Το αρχείο HTML της φόρμας, όπως ακριβώς μας το έστειλε ο web server!

Θα μας πείτε: “Μα καλά, αν το αρχείο είναι 1000 γραμμές” (για την ακρίβεια το συγκεκριμένο είναι 1054) “πώς θα βρούμε αυτό που ψάχνουμε;”. Για άλλη μια φορά, η απάντηση κρύβεται στην παρατηρητικότητα. Αν παρατηρήσετε την προηγούμενη εικόνα 3 θα δείτε ότι δίπλα στο navbar_username βρίσκεται η λέξη User Name, που είναι το όνομα (ή καλύτερα το λεκτικό, όπως λένε οι προγραμματιστές) του πεδίου που βλέπουμε στον web browser. Άρα, αρκεί ένα -άντε δύο- αναζητήσεις μέσα στο αρχείο για το “User Name”, ώστε να βρούμε αυτό που ψάχνουμε. Φυσικά, όπως θα διαπιστώσετε, μέσα στο αρχείο αυτό κρύβονται κι άλλες, εξίσου σημαντικές πληροφορίες, αλλά καλύτερα να μην βγούμε εκτός θέματος.

Με View Source, λοιπόν, βρίσκουμε αυτό που ψάχνουμε. Αυτός είναι ο γρήγορος τρόπος. Σας έχουμε υποσχεθεί όμως κι έναν ακόμα πιο γρήγορο. Πρόκειται για ένα Add On του Firefox, το λεγόμενο Web Developer, με πολλές και χρήσιμες λειτουργίες. Μια από αυτές είναι να μας δείχνει άμεσα τα id των αντικειμένων μιας HTML φόρμας. Αυτό γίνεται δίνοντας Forms –> Display Form Details… Απλό και γρήγορο, ε;

Εικόνα 4: Μια άποψη της φόρμας εισαγωγής με τη χρήση του Web Developer add-on για τον Firefox.

Έχουνε μείνει προς ανάλυση οι γραμμές 4-11. Ο στόχος είναι να πατηθεί αυτόματα το κουμπί “Log In” που βρίσκεται στη φόρμα εισαγωγής του forum. Ας πούμε όμως ότι έχουμε ένα μικρό πρόβλημα: Δεν γνωρίζουμε το ID του συγκεκριμένου κουμπιού. Πως θα αναφερθούμε σ’ αυτό; Εδώ κάνουμε ένα μικρό τρικ. Ψάχνουμε όλα τα αντικείμενα της φόρμας HTML κι όταν συναντήσουμε κάποιο με τ’ όνομα “Log In” το “πατάμε” καλώντας τη συνάρτηση HtmlElement1.InvokeMember(“click”). Μετά απ’ αυτό δεν χρειάζεται να ψάχνουμε άλλο, οπότε βγαίνουμε από το loop του ψαξίματος με την εντολή break.

Τελικά, μόλις πατήσουμε το δικό μας κουμπί “Login!” θα εκτελεστούν οι γραμμές 1-11 και το αποτέλεσμα φαίνεται στην ακόλουθη εικόνα.

Εικόνα 5: Πατώντας το κουμπί 'Login!' του προγράμματός μας, μπαίνουμε αυτόματα στο forum!

Ας περάσουμε τώρα στο επόμενο βήμα. Θέλουμε να διορθώσουμε κάποιο post που έχουμε γράψει. Έστω ότι έχουμε γράψει το post “Yes! I agree…”, που φαίνεται στην εικόνα παρακάτω. Πρέπει να δούμε τι ακριβώς κάνει το forum όταν πατάμε κανονικά το κουμπί Edit κι αυτό να το επαναλάβουμε αυτόματα μέσα από το πρόγραμμά μας. Μην νομίζετε ότι είναι κάτι δύσκολο. Παρατηρώντας λίγο τη συμπεριφορά του forum, είδαμε ότι μόλις πατάμε το κουμπί Edit ακολουθείται αυτό το link:

http://forum.statcounter.com/vb/editpost.php?do=editpost&p=216310

Εικόνα 6: Θέλουμε να κάνουμε edit, δηλαδή να διορθώσουμε, αυτό το post μας...

Αυτό που πρέπει να κάνουμε κι εμείς είναι να “καλέσουμε” το ίδιο link μόλις πατηθεί το δικό μας κουμπί. Είναι πάρα πολύ απλό -έως γελοίο- να γίνει αυτό. Απλά γράφουμε τον παρακάτω κώδικα, για το κουμπί “Διόρθωση Post”:

textBox1.Text = "http://forum.statcounter.com/vb/editpost.php?do=editpost&p=216310";
webBrowser1.Navigate(textBox1.Text);

Το μόνο που κάνουμε είναι να καταχωρούμε στο text box το link που θέλουμε να πάμε και μετά να ωθούμε τον browser μας να το ακολουθήσει. Τόσο απλά!

Εικόνα 7: Το post μπήκε σε edit mode, είναι δηλαδή προς διόρθωση.

Το επόμενο βήμα είναι να βάλουμε ένα νέο κείμενο στη θέση του παλιού. Ας πούμε ότι το νέο κείμενο είναι το “Yes I agree… A very very good job!”. Αυτό υλοποιείται αυτόματα από το κουμπί “Νέο Κείμενο”. Ο κώδικας είναι ο ακόλουθος:

webBrowser1.Document.GetElementById("vB_Editor_001_textarea").InnerText = "Yes! I agree... A very very good job!";

Ναι, πράγματι, μια μόνο εντολή αρκεί! Έχοντας βρει το id του text box που μας ενδιαφέρει (vB_Editor_001_textarea) αρκεί ένα μόνο assignment (όπως λένε πάλι οι προγραμματιστές), δηλαδή απλά μια απόδοση τιμής στην εσωτερική μεταβλητή (ή στο property, κατά την object oriented ορολογία) InnerText του αντικειμένου vB_Editor_001_textarea.

Τι μας μένει; Μα, να στείλουμε τη νέα μας απάντηση πίσω στον server (upload). Αυτή η λειτουργικότητα έχει υλοποιηθεί στο κουμπί “Σώσε το Post”:

webBrowser1.Document.GetElementById("vB_Editor_001_save").InvokeMember("click");

Εδώ έστω ότι γνωρίζουμε το id του κουμπιού “Post Reply”, που πρέπει να πατήσουμε. Είναι το vB_Editor_001_save. Απλά καλούμε τη συνάρτηση click που έχουν όλα τα αντικείμενα τύπου “κουμπί” κι απλά …παρακολουθούμε. To Αποτέλεσμα φαίνεται στην ακόλουθη εικόνα.

Εικόνα 8: Κάναμε τη διόρθωση μας...

Το σωστό και το πρέπον όμως είναι να εκτελέσουμε τις παραπάνω τρεις ενέργειες όλες μαζί, με μιας! Για να γίνει αυτό αρκεί να πατήσουμε το κουμπί “One Man Show”. Θα μπορούσε κάποιος να ισχυριστεί (λίγο βιαστικά) ότι απλά χρειάζεται να βάλουμε τον κώδικα των επιμέρους κουμπιών σ’ ένα και η δουλειά έγινε. Για άλλη μια φορά όμως επαληθεύεται το ρητό ότι “το όλον είναι κάτι περισσότερο από το άθροισμα μερών του”. Εν προκειμένω, χρειάζεται κάτι περισσότερο από απλά το “άθροισμα” του κώδικα των επιμέρους κουμπιών. Ας αφήσουμε όμως τα πολλά λόγια κι ας δούμε την ουσία:

textBox1.Text = "http://forum.statcounter.com/vb/editpost.php?do=editpost&p=216310";
webBrowser1.Navigate(textBox1.Text);

for (int i = 0; i < 50; i++)
    {
    System.Threading.Thread.Sleep(100);
    Application.DoEvents();
    }
  
webBrowser1.Document.GetElementById("vB_Editor_001_textarea").InnerText = "Yes! I agree... A very very good job!!!!";
webBrowser1.Document.GetElementById("vB_Editor_001_save").InvokeMember("click");

Οι γραμμές που προσθέσαμε είναι οι 4-8. Εντάξει, δεν πάμε ν’ αναλύσουμε τα threads σε C# (τουλάχιστον όχι σ’ αυτό το άρθρο) αλλά αυτό που κάναμε είναι να καθυστερήσουμε λίγο τη διαδικασία μεταξύ των βημάτων 2 και 10. Αυτό συμβαίνει διότι για να εκτελεστεί σωστά το βήμα 10 θα πρέπει πρώτα ν’ απαντήσει ο απομακρυσμένος server (στο βήμα 2) κι αυτό χρειάζεται κάποιο χρόνο. Μην νομίζετε, όχι πολύ μεγάλο. Ίσως λίγα δέκατα του δευτερολέπτου. Αυτό όμως το διάστημα είναι τεράστιο σε σχέση μ’ αυτό που θα μεσολαβούσε αν δεν βάζαμε την καθυστέρηση, με αποτέλεσμα να εκτελούσαμε την εντολή 10 χωρίς ακόμα να υπήρχε το αντικείμενο vB_Editor_001_textarea, διότι απλά δεν θα είχε προλάβει ο server να απαντήσει. Αυτό θα είχε ως αποτέλεσμα να λαμβάναμε ένα μήνυμα λάθους. Εκτελώντας τον παραπάνω κώδικα θα οδηγηθούμε κατευθείαν από την εικόνα 6 στην εικόνα 8, πράγμα που υλοποιεί τον αρχικό μας στόχο.

Συμπεράσματα
Είδαμε πόσο εύκολο είναι να φτιάξουμε ένα botάκι, ακόμα και έναν web browser. Το πρόγραμμα που φτιάξαμε δεν θα μπορούσε να αποτελέσει απειλή για την ασφάλεια ενός forum …ή μήπως θα μπορούσε; Η έννοια της απειλής είναι συναρτημένη με το σκοπό που έχει κάποιος όταν χρησιμοποιεί ένα εργαλείο, όχι τόσο με το εργαλείο αυτό καθαυτό. Για παράδειγμα, τι θα λέγατε αν αφήναμε ένα bot να βάζει συνέχεια νέα posts σ’ ένα forum; Κι όταν λέμε συνέχεια, εννοούμε για μία ή δύο μέρες συνεχόμενα! Δεν θα γέμιζε κάποτε ο δίσκος του server; Δεν θα έφτανε στα όριά της η βάση δεδομένων; Μάλλον ναι. Μια τέτοια ενέργεια θα μπορούσε να θεωρηθεί ως μια επίθεση DoS (Denial Of Service)! Φυσικά, πολλά forums για να αποφύγουν τέτοιες …ομορφιές έχουν υιοθετήσει κάποια μικρά κολπάκια, όπως το να παρουσιάζουν μια εικόνα από τυχαία γράμματα και να ζητάνε από το χρήστη να τα πληκτρολογήσει (CAPTCHA), εμποδίζοντας έτσι σημαντικά την κακόβουλη χρήση bots. Απ’ την άλλη μεριά, ποιος θα έβαζε CAPTCHA στη διαδικασία εισαγωγής ενός post σ’ ένα forum; Πολλοί διαχειριστές το αποφεύγουν, διότι έχει την τάση να κάνει τη ζωή των μελών σημαντικά πιο δύσκολη.

Όχι, δεν επικροτούμε επιθέσεις Denial of Service (DoS). Θέλουμε όμως να μάθουμε να σκεφτόμαστε με τέτοιο τρόπο, ώστε ν’ αρχίσουμε να υποψιαζόμαστε ότι, στην τελική, ένα νόμισμα ίσως δεν έχει μόνο δύο όψεις ;)

16 Responses to “Φτιάξτε το δικό σας (ro)bot!”

  1. ^^TnT^^ | 16/08/2011 at 00:00

    Στο facebook πάντως σε αφήνει να κάνεις post συνέχεια :p

    • Thiseas | 16/08/2011 at 00:55

      Εννοείται! :-))

    • antonmorvolhert | 16/08/2011 at 03:11

      Δοκίμασε να κάνεις πολλά post(και εννοώ ΠΟΛΛΑ, ΠΑΑΡΑ ΠΟΛΛΑ συνεχόμενα, έχω φτάσει με ένα παιδί επειδή βαριόμασταν 1000 comment σε ένα post μέσα σε καμια ώρα. Μετά από λίγο άρχιζε να μου βγάζει κάτι σαν pop-up με CAPTCHA ;)
      Αυτό θα έλεγα τώρα, τα περισσότερα forum ή σε αναγκάζουν να περιμένεις Χ δευτερόλεπτα ανάμεσα στα post ή έχουν μεθόδους που μετά από Χ αριθμό post σε αναγκάζουν να περιμένεις Υ δευτερόλεπτα για να ξανα-κάνεις post.

      • ^^TnT^^ | 23/08/2011 at 23:44

        Το sleep γι’ αυτό το έχουμε, φαίνεται χωρίς να το ξέρω είχα βάλει περισσότερο χρόνο από το ελάχιστο τους :p πάντως έφαγα ban στην σελίδα που έκανα αταξίες πριν το facebook καταλάβει ότι είμαι τρομοκράτης :p

  2. antonmorvolhert | 16/08/2011 at 03:14

    Sorry για το double post αλλά θυμήθηκα πως συνήθως όταν ένας χρήστης σε ένα forum κάνει συνέχεια spam post αποκτά συνήθως προσωπική εμπειρία των αποτελσμάτων του θρυλικού Banhammer ;)

  3. Thiseas | 16/08/2011 at 09:21

    Το να κάνεις το bot σου να περιμένει λίγα seconds πριν ξαναποστάρει είναι εύκολο. Επίσης υπάρχουν ήδη στην… “αγορά” έτοιμες functions που καταφέρνουν και αναγνωρίζουν τα περισσότερα captcha. Η μάχη καλά κρατεί. ;)

    • antonmorvolhert | 16/08/2011 at 16:59

      Εύκολο είναι, αλλά άμα γίνει αυτό μειώνεται κατά πολύ η απόδοση του bot. Άμα γίνει αυτό μετά θα πρέπει να υπάρχουν παραπάνω από ένα bot για να γίνει η δουλειά. Όσο για το CAPTCHA, υπάχρουν διαδικασίες που το ξεπερνάνε, αλλά δουλεύουν σε ικανοποιητικό βαθμό?

      • Thiseas | 16/08/2011 at 21:33

        Ναι, πολλά δουλεύουν σε πάρα πολύ ικανοποιητικό βαθμό (πάνω από 90% επιτυχία). Όπως καταλαβαίνεις δεν μπορώ να σου δώσω κάποιο πρόγραμμα, μπορώ όμως να σου δείξω ένα μικρό παράδειγμα για το πως προχωράει η θεωρία: http://is.gd/Yt0JoP

  4. stamatiou | 20/08/2011 at 13:52

    Αυτό δουλεύει και σε linux;

    • subZraw | 20/08/2011 at 15:23

      Φυσικά, bots μπορεί να φτιάξει κάποιος δουλεύοντας *και* από το Linux!

      Αν τώρα αναφέρεσαι ειδικά στη γλώσσα προγραμματισμού C# της Microsoft, την οποία χρησιμοποιεί ο @Thiseas στο άρθρο του, τότε για να δουλέψεις μ’ αυτή κάτω από Linux θα πρέπει να εγκαταστήσεις το περιβάλλον ανάπτυξης Mono (http://www.mono-project.com/Main_Page)

      • stamatiou | 25/08/2011 at 19:00

        Ευχαριστώ πολύ! Αυτό φαντάζομαι και γίνονται και με άλλες γλώσσες (πχ C) έτσι;

  5. sigma | 08/09/2011 at 00:44

    ειχα δει ενα άρθρο απο το παλιό site ακομα που ειχε εναν τροπο να “μαθει” τιο μποτακι το CAPTCHA

  6. shadowlike | 25/10/2012 at 09:11

    αναρωτιέμαι ..αν θα μπορούσα με την ίδια μεθοδολογία να κάνω κάτι σαν το εξής

    ένα σκρπιπτάκιον το οποίο

    1.θα συνδέετε σε ένα ftp server, θα ανεβάζει 1 αρχείο
    2.μετά θα συνδέεται στη βάση και θα τραβάει κάποια πληροφορία η οποία προήλθε απο την επεξεργασία του αρχείου
    3.μετά θα ανοίγει έναν browser και θα χρησιμοποιεί αυτή την πληροφορία για να εκτελέσει ένα use case
    4.θα ήθελα να λαμβάνει screenshot απο κάθε step στον browser, τα URL headers και να τα σώζει σε ένα folder.

    με άλλα λόγια θα ήθελα έναν artificial agent που να τρέχει επάνω στην εφαρμογή μου και να ακολουθεί κάποια βήματα και να βγάζει ένα μικρό report.

  7. shadowlike | 25/10/2012 at 09:15

    εννοείτα πως το εν λόγω app είναι web εφαρμογή :)… μα γιατί δεν έχετε ένα edit βρε παιδιά.

  8. Ion | 26/10/2012 at 14:10

    Yeap, είναι ένα ωραίο project. Θα πρότεινα να το ξεκινήσεις και μπορείς κάλλιστα να χρησιμοποιήσεις τη γλώσσα Python για όλα τα παραπάνω (τι παιδευόταν ο sonic τόσο καιρό; :D). Θα μάθεις αρκετά νέα πράγματα.

Leave a Reply

You must be logged in to post a comment.

Σύνδεση

Αρχείο δημοσιεύσεων