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

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

Не знаю как вы, но я ждать не люблю, да и использовать чужие трояны это совсем не по->

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

Естественно, наш троян будет состоять из 2х частей =) Серверной (отправляемой как подарок ламерюге) и клиентской (оставим себе на память). Надо сказать, что я давно не юзал никакие трояны, так что не знаю что там сейчас они умеют делать, может уже и коврик под мышкой научились двигать или корпус компа открывать. Мы же пишем «троянчик», поэтому делать он будет только следующее:
1) читать, удалять, запускать файлы на удаленном компьютере

Удаленный рабочий стол средствами Python


2) работать с реестром на удаленном компьютере
3) ну и традиционный набор разных бесполезных функций, типа открытие CD-ROM’a, смена клавишей мышки etc.

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

Начнем с клиента. Набрасываем простенький интерфейс и приступаем к реализации. Управлять удаленным компьютером будем с помощью специальных команд. Для примера пускай структура их будет такая:
Nпараметры. N — цифра. Каждому действию присвоен свой код. Т.е. например 1 — перезагрузка, 2 — чтение файла и т.д. Главное чтоб было однозначное соответствие между тем что хотим сделать (команда передаваемая клиентом) и тем что выполняет программа (обработка команды на сервере). С этим разобрались. Теперь параметры.

Бывает мало передать только номер команды. Конечно, чтобы перезагрузить компьютер никаких параметров не надо (хотя можно и здесь передать параметры в функцию перезагрузки), но как например реализовать удаление файла не передавая параметра? Мы передаем команду на удаление файла, но какого?! Для этого будем использовать параметры.

В качестве параметра в данном случае будет передаваться имя файла. Бывает, что мало передать один параметр. Например надо прочитать n-строчек из file.txt. Здесь необходимо передать 2 параметра. В нашем примере параметры отделяются друг от друга комбинацией »
» — перевод каретки. Объясняется данная структура тем, что в сервере мы сначала помещаем полученную команду в TStringList и потом можем спокойно обращаться к любой строчке этого TStringList’а через свойство Strings[i], где i-номер строчки, а соответственно и номер параметра. В общем, это вещи достаточно очевидные.

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

Как пользоваться NjRAT? Приколы вируса удаленного доступа

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

Сервер будет чуть пообъемнее. Вначале определимся с задачами:
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, помни­те о такой осо­бен­но­сти: эти про­то­ко­лы рабо­та­ют толь­ко тогда, когда два ком­пью­те­ра могут напря­мую дозво­нить­ся друг до дру­га через интер­нет. Если вы захо­ти­те залезть в свой уда­лён­ный ком­пью­тер извне домаш­ней сети, вам при­дёт­ся про­кла­ды­вать до него осо­бый марш­рут. Как это сде­лать, мы ещё рас­ска­жем, а если вкрат­це — это непро­сто.

Источник: kompter.ru

RDP over SSH. Как я писал клиент для удаленки под винду

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

Сер­висы, с помощью которых мож­но орга­низо­вать под­клю­чение сот­рудни­ков на уда­лен­ке, обыч­но работа­ют через свои сер­веры. Поч­ти всег­да соеди­нение получа­ется мед­леннее пря­мых под­клю­чений, да и безопас­ность таких служб тоже под боль­шим воп­росом. Чаще все­го архи­тек­тура этих решений пос­тро­ена вок­руг реали­зации VNC (Virtual Network Computing).

Сис­тема базиру­ется на про­токо­ле RFB (Remote FrameBuffer). Управле­ние устро­ено так: с одно­го компь­юте­ра на дру­гой переда­ются нажатия кла­виш и дви­жения мыши и содер­жимое экра­на рет­ран­сли­рует­ся через сеть. Сам VNC не шиф­рует переда­ваемые дан­ные. Если тре­бует­ся обес­печить повышен­ную безопас­ность, сес­сия может быть уста­нов­лена через SSL, SSH или VPN-тун­нели, что нес­коль­ко усложня­ет задачу.

На пуб­личных сер­висах все соеди­нения уста­нав­лива­ются через сер­вер, который выда­ет ID кли­ентов, под­клю­чая их либо через VPN нап­рямую друг к дру­гу, либо через собс­твен­ный канал. Конеч­но, мож­но под­нять свой VPN-сер­вер, нас­тро­ить мар­шру­тиза­цию VPN-сети и локаль­ной сети пред­при­ятия и под­клю­чать сот­рудни­ков по пря­мым IP-адре­сам. В этом слу­чае кли­енту нуж­но, помимо логина, пароля и адре­са под­клю­чения, передать еще кли­ент VPN и дан­ные для авто­риза­ции. Для некото­рых поль­зовате­лей все это слож­новато, а это, в свою оче­редь усложнит под­дер­жку.

Проб­росить пор­ты на локаль­ные ПК тоже не вари­ант. Это небезо­пас­но, да и нас­тра­ивать мар­шру­тиза­цию замуча­ешь­ся, ког­да кли­ентов ста­новит­ся боль­ше двух. В Linux есть замеча­тель­ный кли­ент Remmina, который поз­воля­ет проб­расывать сес­сии RDP/VNC через SSH-соеди­нение без допол­нитель­ных кли­ентов.

В Windows мож­но орга­низо­вать SSH-тун­нели через кли­ент­ские при­ложе­ния, которые необ­ходимо нас­тра­ивать на уда­лен­ных поль­зователь­ских машинах. SSH-кли­ент «из короб­ки» есть толь­ко в Windows 10, но как быть с юзе­рами семер­ки и вось­мер­ки? Да и для Windows 10 при­дет­ся писать бат­ник, и не один. Все это не добав­ляет бал­лов стан­дар­тным решени­ям.

Но всег­да мож­но при­думать нес­тандар­тное. Чем мы пря­мо сей­час и зай­мем­ся.

Постановка задачи

Итак, задача у нас будет сле­дующая. Под­клю­чать поль­зовате­ля по RDP (как выяс­нилось, это нам­ного при­выч­нее для боль­шинс­тва из них). Самое глав­ное пре­иму­щес­тво RDP по срав­нению с VNC — это ско­рость. RDP быс­трее потому, что этот про­токол перери­совы­вает на сто­роне кли­ента толь­ко изме­нен­ную часть экра­на, а зна­чит, дан­ных переда­ется мень­ше.

Под­клю­чение дол­жно быть безопас­ным. Под­клю­чение дол­жно выпол­нять­ся с минималь­ными нас­трой­ками и не тре­бовать от поль­зовате­ля никаких допол­нитель­ных дей­ствий.

А что скажет Google?

В общем‑то, задача не новая, и реали­заций пос­тро­ения SSH-тун­неля сущес­тву­ет доволь­но мно­го. В Google мож­но с ходу най­ти ре­шения на базе PuTTY или ва­риан­ты для Windows 10. Мы сво­их поль­зовате­лей любим (и свои нер­вы тоже). А зна­чит, надо дать им такой инс­тру­мент, который не нуж­но нас­тра­ивать и который будет работать надеж­но.

Ины­ми сло­вами, решение дол­жно отве­чать сле­дующим тре­бова­ниям:

  • прос­тота для поль­зовате­ля;
  • лег­кость под­дер­жки;
  • прос­тая и понят­ная под­готов­ка и нас­трой­ка «сер­верных час­тей».
Читайте также:
В какой программе сделать памятку

Ре­шение будет осно­вано на тех­нологии RDP over SSH. Тех­ничес­ки мы орга­низу­ем это так:

  • кли­ент SSH для орга­низа­ции тун­неля с проб­росом пор­та до целево­го ПК под­клю­чения;
  • ав­томати­чес­кий старт RDP-сес­сии без допол­нитель­ного вво­да парамет­ров под­клю­чения.

Сис­тема дол­жна быть лег­ко встра­иваемой, и дол­жен быть кли­ент для прод­винутых поль­зовате­лей (опци­ональ­но).

Готовим серверную часть

Прос­тые вещи вро­де нас­трой­ки RDP или SSH-сер­вера мы рас­смат­ривать не будем. Инс­трук­ций в интерне­те име­ется тьма, а у нас объ­ем огра­ничен, да и перег­ружать статью не хочет­ся. Так­же я не ста­ну под­робно рас­ска­зывать, как реали­зовать получе­ние дан­ных с Kerio Control: на стра­нице про­екта мож­но най­ти го­товый код.

Пер­вым делом нам нуж­но раз­решить RDP-под­клю­чения на кли­ент­ских машинах в локаль­ной сети. Если там реали­зова­но цен­тра­лизо­ван­ное управле­ние типа Active Directory, тебе повез­ло. Раз­реша­ем под­клю­чение к RDP в груп­повых полити­ках. Если нет, обхо­дим рабочие мес­та ногами и раз­реша­ем на целевых локаль­ных машинах RDP. Не забыва­ем и о фай­рво­лах.

Вто­рым шагом нам понадо­бит­ся дос­тупный из интерне­та SSH-сер­вер. Тех­ничес­ки подой­дет любое решение. Я исполь­зовал VPS с Debian 10 (один мой зна­комый под­нимал такой сер­вак даже на роуте­ре, что небезо­пас­но). Даль­ше сто­ит раз­делить решения на нес­коль­ко вер­сий, кон­крет­ная реали­зация зависит от того, как орга­низо­вано получе­ние дан­ных для авто­риза­ции поль­зовате­лей.

Пер­воначаль­но у нас исполь­зовал­ся Kerio с авто­риза­цией поль­зовате­лей через AD.

Схема подключения

Кли­ент под­клю­чал­ся по SSH, проб­расывал порт на API Kerio Control Server, затем под­клю­чал­ся к нему, выпол­нял поиск по задан­ным парамет­рам (логин или фамилия сот­рудни­ка), искал IP локаль­ного ПК. Далее раз­рывал SSH-соеди­нение и уста­нав­ливал новое уже с проб­росом пор­та на най­ден­ный IP, на порт RDP (3389), пос­ле чего штат­ными средс­тва­ми Windows под­нималась сес­сия RDP с переда­чей парамет­ров под­клю­чения.

Та­кое решение работа­ло доволь­но быс­тро, но нам это­го ста­ло мало, и мы раз­делили его на две час­ти. Сер­верный скрипт стал работать на SSH-сер­вере и сам вре­мя от вре­мени ходить в Kerio за информа­цией. Кли­ент­ская часть под­клю­чалась к сер­веру по SFTP, иска­ла нуж­ные дан­ные, офор­млен­ные в JSON, и выпол­няла под­клю­чение. В ито­ге ско­рость работы уве­личи­лась.

Ре­комен­дую сра­зу нас­тро­ить сер­вер OpenSSH с дос­тупом по клю­чам и под­готовить RSA-клю­чи для авто­риза­ции. Для это­го нуж­но соз­дать отдель­ного поль­зовате­ля и огра­ничить его в пра­вах, затем отдать ему пуб­личную часть клю­ча. Ниже при­веду часть / etc/ ssh/ sshd_config с нас­трой­ками этих двух поль­зовате­лей:

Источник: xakep.ru

Saved searches

Use saved searches to filter your results more quickly

Cancel Create saved search

You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window.

Reload to refresh your session.

Simple RDP client-server application written in c++ using Qt and WinAPI

DeliriumV01D/Helper

This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Switch branches/tags
Branches Tags
Could not load branches
Nothing to show
Could not load tags

Nothing to show

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Cancel Create

  • Local
  • Codespaces

HTTPS GitHub CLI
Use Git or checkout with SVN using the web URL.
Work fast with our official CLI. Learn more about the CLI.

Sign In Required

Please sign in to use Codespaces.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching Xcode

If nothing happens, download Xcode and try again.

Launching Visual Studio Code

Your codespace will open once ready.

There was a problem preparing your codespace, please try again.

Latest commit

Git stats

Files

Failed to load latest commit information.

Latest commit message
Commit time

README.md

Simple RDP client-server application written in c++ using Qt and WinAPI

Программа «Помощник» состоит из трех частей, являющихся отдельными программами

Server — отладочный http-сервер для связи Sharer и Viewer

Sharer — Программа клиента. Предназначена для создания RDP-сесии, генерации приглашения и отправки приглашения на сервер для последующей передачи его программе специалиста.

Viewer — Программа специалиста. Умеет запрашивать с сервера приглашение для подключения к клиенту. Подключается к клиенту с целью управления посредством RDP.

Все программы написаны на языке с++ в Microsoft Visual Studio 2010 с использованием библиотеки Qt

  1. Sharer Верхний класс в иерархии TSharer — пользовательский интерфейс (модули TSharer.h, TSharer.cpp) наследуется от QMainWindow, TSharer, TRDPServer Содержит в качестве делегата THelperClient

TRDPServer (модули TSharer.h, TSharer.cpp) — Класс для обеспечения доступа к данному компьютеру через RDP Открытие/зыкрытие сессии, генерация приглашения, получение событий от RDP-клиента.

THelperClient (модули THelperClient.h, THelperClient.cpp) — общая часть в программах клиента и специалиста для общения с HTTP-сервером по протоколу.

Программа такая разнородная, потому что начал писать ее с нуля, не найдя никаких готовых библиотек. Но потом все таки нашел RDP.h, RDP.cpp, но для экономии времени работающий кусок было решено не переписывать заново.

RDP.h и RDP.cpp — набор классов, являющихся оберткой вокруг WindowsAPI функций для работы с RDP.

TSharer.ui — GUI форм, пока не используется. (вся работа через трей)

  1. Viewer класс Viewer (модули Viewer.h и Viewer.cpp) наследуется от QMainWindow и Ui::ViewerClass в качестве делегата имеет THelperClient

Вся его работа сейчас крутится вокруг расположенного на визуальной форме ActiveX компонента axRDPClientWidget обеспечивающего функционал RDP — клиента.

Визуальный форм — Viewer.ui

  1. Server Консольная программа.

Основной функционал заключен в классе THelperServer(модули THelperServer.h, THelperServer.cpp) В нем переопределены методы readClient() для получения данных с клиента и ProcessRequest() для обработки клиентских запросов и генерации ответов сервера. Класс THelperServer унаследован от класса THTTPServer

THTTPServer (модули THTTPServer.h, THTTPServer.cpp) унаследован от кутэшного QTcpServer

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

  1. PostConnectionString (c->s)

Источник: github.com

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru