Как написать программу удаленного доступа

Сегодня мы будем учиться писать троянчик. Небольшой, но СВОЙ! Почему? Конечно-конечно, троянов в сети навалом, но рано или поздно они =вдруг= начинают определяться антивирусами, приходиться ждать апдейта етц. Ожидание — самый скучный повод. Не знаю как вы, но я ждать не люблю, да и использовать чужие трояны это совсем не по-><аЦкERR’ски. Короче, пишем свой троян и точка.

После точки, как учили в школе, пишем с большой буквы. Так вот, о чем я? Писать я буду, как обычно, на своем любимом Builder C++. Если у вас руки растут не оттуда, откуда у меня ноги, то без проблем все переделаете под Дельфи, если припрет конечно.

Естественно, наш троян будет состоять из 2х частей =) Серверной (отправляемой как подарок ламерюге) и клиентской (оставим себе на память). Надо сказать, что я давно не юзал никакие трояны, так что не знаю что там сейчас они умеют делать, может уже и коврик под мышкой научились двигать или корпус компа открывать. Мы же пишем "троянчик", поэтому делать он будет только следующее:
1) читать, удалять, запускать файлы на удаленном компьютере
2) работать с реестром на удаленном компьютере
3) ну и традиционный набор разных бесполезных функций, типа открытие CD-ROM’a, смена клавишей мышки etc.

Перекурили и поехали!
Использовать будем стандартные компоненты TClientSocket и TServerSocket.

Начнем с клиента. Набрасываем простенький интерфейс и приступаем к реализации. Управлять удаленным компьютером будем с помощью специальных команд. Для примера пускай структура их будет такая:
Nпараметры. N — цифра. Каждому действию присвоен свой код. Т.е. например 1 — перезагрузка, 2 — чтение файла и т.д. Главное чтоб было однозначное соответствие между тем что хотим сделать (команда передаваемая клиентом) и тем что выполняет программа (обработка команды на сервере). С этим разобрались. Теперь параметры. Бывает мало передать только номер команды. Конечно, чтобы перезагрузить компьютер никаких параметров не надо (хотя можно и здесь передать параметры в функцию перезагрузки), но как например реализовать удаление файла не передавая параметра? Мы передаем команду на удаление файла, но какого?! Для этого будем использовать параметры. В качестве параметра в данном случае будет передаваться имя файла. Бывает, что мало передать один параметр. Например надо прочитать n-строчек из file.txt. Здесь необходимо передать 2 параметра. В нашем примере параметры отделяются друг от друга комбинацией "
" — перевод каретки. Объясняется данная структура тем, что в сервере мы сначала помещаем полученную команду в TStringList и потом можем спокойно обращаться к любой строчке этого TStringList’а через свойство Strings[i], где i-номер строчки, а соответственно и номер параметра. В общем, это вещи достаточно очевидные.

Вот так, вроде бы только начав писать клиентскую часть мы ее уже почти и закончили! Ведь на самом деле ничего кроме отсылки команд и приема ответов от сервера она делать и не должна. Для приема ответов просто создадим поле TMemo и добавим обработчик события OnRead нашего компонента TClientSocket:

Вот и все. Клиент законен! Переходим к серверу.

Сервер будет чуть пообъемнее. Вначале определимся с задачами:
1) получение команд
2) их обработка и выполнение соответствующих действий
3) отсылка ответа клиенту (должны же мы знать что происходит на сервере)
Реализуем.

Во-первых, никакого визуального оформления естественно не будет =) Поэтому на форму поместим только 1 компонент: TServerSocket . Инициализацию его проведем в функции FormCreate(). Хотя можно было бы просто прописать 2 параметра в Object Inspector’е. Но раз уж сделали, так сделали =)

Итак, указали порт, активизировали сокет. Теперь обрабатываем событие ClientRead , т.е. получение данных сокетом. Комментирую на примере:

Теперь немного подробнее. Мы пишем специальный класс TTrojanUtilites , в котором реализуем все необходимые функции. В RecognizeCommand (String Directive) мы только отделяем команду от параметров и запускаем необходимые методы TTrojanUtilites, передавая по необходимости в них параметры.

Реализация TTrojanUtilites есть то, чем мы сейчас займемся. Класс оформим в отдельном модуле, не забудьте подключить его.

Поехали. Во-первых, подключаем #include — необходимо для реализации работы с CD-ROM’ом. Далее пишем все необходимые методы.

Краткие комментарии на примере:

Вот тут я не отвечаю за все ОСи, перезагрузка-то будет, но хотелось бы сделать ее как после нажатия кнопки RESET, а так будет послано сообщение WM_. ENDSESSION etc. Короче, пробуйте сами. Могу только подкинуть основные направления поиска: смотри функции ExitWindows(), ExitWindowsEx(), InitiateSystemShutdown() и AbortSystemShutdown(). Для особо продвинутых могу предложить вариант написать надежный ребут под определенную ось и чипсет =) Например, мой прошлый комп стабильно резетился (только в Win9x, в NT не работало) следующей вставочкой:

Откуда цифры? Читайте доки по чипсету =) Одним словом, универсального метода перезагрузить комп без WM_. ENDSESSION я не знаю. Если вы знаете — напишите пару строк, не в падлу =)

Запись в реестр аналогична, только используется метод WriteBool(TTSL->Strings[2], false ); для записи булевского значения, WriteInteger(TTSL->Strings[2], StrToInt(TTSL->Strings[4])); — для числового, WriteString(TTSL->Strings[2], TTSL->Strings[4]); — для строкового.

Для запуска файлов на удаленном компьютере используем следующую функцию:

Файл запускается в той программе, с которой ассоциирован запуск данного типа файлов, т.е. вы можете запускать не толкьо exe, com, bat, но и любые другие файлы. Html-файл откроется в Explorer’e, Opere, Netscape или еще в чем-то. Хрен знает чем там ламерюга пользуется. Можете запустить ему мп3-шку Децла послушать или Бритни какой-нить, пусть проблюется =)

Идем дальше. Парочка бесполезных функций:

Можно сделать переключение кнопок обратно (передайте в SwapMouseButton параметр false), но я бы посоветовал поставить таймер и каждую секунду переключать кнопки туда-сюда, веселее будет =) В падлу сейчас уже добавлять, но вкратце это будет так: добавляем TTimer на форму, устанавливаем необходимый интервал, и в обработчике события OnTimer прописываем вызов функции SwapMouseButton с параметром, противоположным прошлому вызову. Млин, все-таки все расписал =)

Теперь довольно важная функция:

Данная функция НЕ удаляет файл сразу. Это сделано специально, так как файлы могут использоваться системой и их удаление возможно только после перезагрузки, данная функция помечает файл к удалению, а удалиться он только после перезагрузки, которую вы легко можете вызвать. Да, еще маленькое примечание: данная функция удаляет только 1 файл, если вы пометите второй файл к удалению — то будет удален только он. А первый останется нетронутым. Немного измените функцию — и можно будет удалять файлы пачками =) Могу еще добавить немного инфы на случай, если надо будет удалить целый каталог и вы точно знаете что в нем нет открытых файлов. Используйте стандартную API функцию SHFileOperation, установив тип операции wFunc в FO_DELETE. Пример:

Только внимательно все проверьте! Будет обломно если ламерюга "вдруг" увидит надпись "Папка голые тетки не может быть удалена, так как юзер активно смотрит сразу 10 порно-фильмов из нее!". А вообще, если опять удалиться в теорию, то наш главный объект Application имеет несколько полезных событий, наиболее интересное для нас OnException происходит тогда, когда в приложении возникает необработанная исключительная ситуация (деление на ноль, удаление несуществующего файла etc). По умолчанию, обработчик этого события вызывает метод ShowException для отображения окна сообщения с пояснением причины ошибки (оно нам надо?! конечно, НЕТ!). Но, вы можете изменить реакцию на событие onException, переписав его обработчик. Тут ничего трудного нет, просто я не ставил перед собой задачу написать офигенный троян, только подтолкнуть вас к этому =) Кто захочет — допишет все необходимое сам, если что — я подскажу =) Ну вот, вроде бы все функции реализовали. Теперь немного о том, что мы не сделали =) Мы не сделали: загрузку/закачку файла. Это все можно сделать подправив SendFile(). Стандартных функций для пересылки файлов через TClient(Server)Socket я не нашел, но впрочем, это не проблема — просто передавайте файлы фрагментами.

Теперь нам осталось только разобраться с автозагрузкой трояна. Сделаем следующее:
1) при запуске файл переписывается в папку, в которой установлены винды.
2) прописываем запуск нашего файла в реестре.

В принципе, это все. Троян готов! Конечно, он тяжеловат, малофункционален etc, НО все это можно исправить, творите =) Если сделаете что-нибудь интересное — скидывайте, с радостью опубликуем это для всех. А вообще, я хочу сейчас все это переделать под API Socket’ы, без всяких компонентов, тогда и файл exe гораздо меньше станет. Если у кого-нибудь есть интерес к этому делу — напишите пару строк в мыльницу.

Товарищи ламеры! Внимательно следите теперь за соединениями по порту 4321 =) Некоторые ведь ничего не перекомпиливают и не меняют =)

Тогда какие библиотеки использовать?

Как написать программу которая удаленно управляет windows?

Пред­ставь­те, что вам зво­нит мама и гово­рит, что у неё не откры­ва­ют­ся сай­ты. Насто­я­щий айтиш­ник отве­ча­ет так: «Не тро­гай ком­пью­тер, сей­час под­клю­чусь и всё почи­ню». Вот как это­му научить­ся.

Что за удалённый доступ

Где-то сто­ит ком­пью­тер. Вы под­клю­ча­е­тесь к нему с помо­щью спе­ци­аль­но­го соф­та и полу­ча­е­те доступ.

В одном слу­чае доступ — это воз­мож­ность испол­нять коман­ды. О таком мы писа­ли в ста­тье про SSH: у вас на экране команд­ная стро­ка, вы може­те выпол­нять коман­ды на дру­гом ком­пью­те­ре, но не уви­ди­те его экра­на.

В дру­гом слу­чае может быть доступ к фай­ло­вой систе­ме — то есть мож­но копи­ро­вать и запи­сы­вать фай­лы. Так рабо­та­ет, напри­мер, FTP: когда вы под­клю­ча­е­тесь к FTP-серверу, то фак­ти­че­ски полу­ча­е­те уда­лён­ный доступ к части его фай­ло­вой систе­мы.

В тре­тьем слу­чае мож­но пря­мо уви­деть кар­тин­ку с мони­то­ра дру­го­го чело­ве­ка и пора­бо­тать за ком­пью­те­ром так, буд­то вы сами за ним сиди­те. Такие систе­мы назы­ва­ют VNC, Remote Desktop, «Общий экран», «Уда­лён­ный рабо­чий стол» и дру­ги­ми муд­рё­ны­ми сло­ва­ми.

Что нужно для удалённого доступа

Что­бы под­клю­чить­ся к дру­го­му ком­пью­те­ру, нуж­но:

  • уста­но­вить на уда­лён­ный ком­пью­тер про­грам­му, кото­рая отве­ча­ет за управ­ле­ние (сер­вер­ная часть) — напри­мер TeamViewer;
  • запу­стить у себя ана­ло­гич­ную про­грам­му (кли­ент­ская часть);
  • убе­дить­ся, что оба ком­пью­те­ра могут вый­ти в интер­нет;
  • най­ти дру­гой ком­пью­тер через интер­нет — по IP-адресу, через сер­вер­ный софт или как-то ещё.

Если интер­нет не рабо­та­ет на одном из ком­пью­те­ров, соеди­нить­ся не полу­чит­ся. Поэто­му если вам зво­нят и гово­рят: «У меня интер­нет не рабо­та­ет, можешь как-то почи­нить?», то уда­лён­ный доступ тут не помо­жет.

Для чего можно применить

О, вари­ан­тов мас­са.

Тех­под­держ­ка. Понят­ное дело, мож­но ока­зы­вать тех­под­держ­ку детям и роди­те­лям. Вы види­те их мони­тор, нажи­ма­е­те кла­ви­ши и исправ­ля­е­те всё, что нуж­но испра­вить. Не помо­жет, если нет интер­не­та или не загру­жа­ет­ся ком­пью­тер как тако­вой.

Облач­ный тер­ми­нал. Допу­стим, у вас на рабо­те сто­ит супер­мощ­ный ком­пью­тер с про­фес­си­о­наль­ным соф­том и огром­ной памя­тью. А дома — мало­мощ­ный ноут­бук, кото­рый годит­ся толь­ко для интер­не­та. И вот вам нуж­но сроч­но доде­лать какую-то рабо­ту на рабо­чем ком­пью­те­ре. Не нуж­но ехать в офис: под­клю­ча­е­тесь к нему уда­лён­но, дела­е­те дела, отклю­ча­е­тесь. Поте­ет рабо­чая маши­на, а ваш домаш­ний ноут­бук исполь­зу­ет­ся ско­рее как мони­тор.

Подоб­ным обра­зом сей­час устро­е­ны сер­ви­сы стри­мин­га игр: где-то дале­ко сто­ит супер­мощ­ный ком­пью­тер с мощ­ной видео­кар­той, а вы под­клю­ча­е­тесь к нему со сво­е­го про­сто­го. Запус­ка­е­те «Ведь­ма­ка» и насла­жда­е­тесь гра­фи­кой. Но игра­е­те вы не на сво­ём ком­пью­те­ре, а как бы на уда­лён­ном, там про­ис­хо­дят все вычис­ле­ния, а к вам через интер­нет лишь при­ле­та­ет кар­тин­ка.

Меди­ацентр. Напри­мер, у вас есть ста­рый ком­пью­тер или мини-ПК. К нему под­клю­че­на аудио­си­сте­ма. На ком­пью­те­ре рабо­та­ет при­ло­же­ние для стри­мин­га музы­ки или торрент-клиент, кото­рый обме­ни­ва­ет­ся легаль­ной музы­кой с дру­ги­ми поль­зо­ва­те­ля­ми. Вам не нуж­но посто­ян­но смот­реть в мони­тор это­го ком­пью­те­ра — он рабо­та­ет как бы фоном. Отлич­но: уби­ра­е­те от него мони­тор и кла­ви­а­ту­ру, вклю­ча­е­те уда­лён­ный доступ и под­со­еди­ня­е­тесь к это­му ком­пью­те­ру, когда нуж­но.

Видео­на­блю­де­ние. К меди­ацен­тру мож­но под­клю­чить веб-камеру и под­со­еди­нять­ся к ней, когда вы в отпус­ке или на рабо­те. Будет вид­но, чем зани­ма­ет­ся кот в ваше отсут­ствие.

Инфор­ма­ци­он­ный экран. У вас в офи­се может лежать ненуж­ный мини-ПК или систем­ный блок. Мож­но под­клю­чить его к боль­шой плаз­ме, сам комп спря­тать куда-нибудь под стол, а плаз­му пове­сить повы­ше. Вклю­ча­е­те комп, под­клю­ча­е­тесь к нему дистан­ци­он­но и настра­и­ва­е­те, что нуж­но выво­дить на плаз­ме. Отклю­ча­е­тесь. Комп пока­зы­ва­ет что надо на экране, шур­ша где-то в углу.

Фай­ло­вый сер­вер. Ста­рый систем­ный блок или мини-ПК может отлич­но рабо­тать фай­ло­вым сер­ве­ром, а с помо­щью уда­лён­но­го досту­па мож­но настра­и­вать его рабо­ту, управ­лять фай­ла­ми и давать зада­ние на скач­ку новых фай­лов. Он сто­ит себе на антре­со­лях, а его жёст­кие дис­ки напол­ня­ют­ся полез­ным кон­тен­том.

Сек­рет­ная рабо­чая стан­ция. Вари­ант для хаке­ров. Напри­мер, вы реши­ли напи­сать сверх­сек­рет­ную про­грам­му. Арен­ду­е­те вир­ту­аль­ный сер­вер где-нибудь в Ирлан­дии или Корее. Ста­ви­те на него свою люби­мую опе­ра­ци­он­ную систе­му и сер­вер уда­лён­но­го досту­па. Уда­лён­но под­клю­ча­е­тесь. Дей­ству­е­те так, как буд­то это ваш ком­пью­тер: пише­те там код, тести­ру­е­те, в общем — рабо­та­е­те как за обыч­ным ком­пью­те­ром. А на сво­ём домаш­нем ниче­го не хра­ни­те.

Как толь­ко омо­нов­цы начи­на­ют пилить вам дверь, отклю­ча­е­тесь от уда­лён­но­го ком­пью­те­ра и сти­ра­е­те его адрес из памя­ти. Даже если экс­пер­ты попы­та­ют­ся извлечь ваш сек­рет­ный код с изъ­ятой тех­ни­ки, они ниче­го не най­дут — ведь сек­рет­ный код весь хра­нит­ся на уда­лён­ном ком­пью­те­ре, адрес кото­ро­го они не зна­ют.

Что конкретно делать

Если у вас есть роди­те­ли с ком­пью­те­ра­ми, уста­но­ви­те им при­ло­же­ние TeamViewer и убе­ди­тесь, что оно рабо­та­ет: им выда­ёт­ся имя поль­зо­ва­те­ля, при­ло­же­ние запус­ка­ет­ся и не веша­ет комп. Поставь­те ярлык при­ло­же­ния на вид­ное место, что­бы роди­те­ли мог­ли его най­ти в любой ситу­а­ции. На сво­ём ком­пью­те­ре тоже поставь­те TeamViewer.

Когда роди­те­лям потре­бу­ет­ся ком­пью­тер­ная помощь, попро­си­те их про­дик­то­вать вам код и пароль из их TeamViewer, вве­ди­те его в сво­ём TeamViewer, и у вас откро­ет­ся их ком­пью­тер, буд­то вы сиди­те рядом.

Если у вас несколь­ко ком­пью­те­ров дома, уста­но­ви­те на них какое-нибудь при­ло­же­ние с назва­ни­ем VNC Server, а на свой план­шет — VNC Viewer. Теперь вво­ди­те во вью­ер адре­са ваших домаш­них ком­пью­те­ров, и вы смо­же­те управ­лять ими уда­лён­но из дру­гой ком­на­ты. Адре­са долж­ны быть локаль­ны­ми, типа 192.168.0.2. О них ещё напи­шем.

Если у вас есть Mac Mini, отклю­чи­те его от мони­то­ра и поставь­те на антре­соль. Теперь с любо­го дру­го­го Mac в доме зай­ди­те в «Сеть» — Ваш Mac Mini — нажми­те кноп­ку «Общий экран. ». Вве­ди­те логин и пароль от Mac Mini, и у вас запу­стит­ся встро­ен­ная в Mac OS систе­ма уда­лён­но­го досту­па.

Если исполь­зу­е­те VNC или доступ через общий экран Mac, помни­те о такой осо­бен­но­сти: эти про­то­ко­лы рабо­та­ют толь­ко тогда, когда два ком­пью­те­ра могут напря­мую дозво­нить­ся друг до дру­га через интер­нет. Если вы захо­ти­те залезть в свой уда­лён­ный ком­пью­тер извне домаш­ней сети, вам при­дёт­ся про­кла­ды­вать до него осо­бый марш­рут. Как это сде­лать, мы ещё рас­ска­жем, а если вкрат­це — это непро­сто.

Читайте также:  Как померить напряжение блока питания
Adblock detector