Screenlogger – улыбнитесь, вас снимает скрытая камера. пишем свой teamviewer.

Tartuga

Бывалый
ПРОВЕРЕННЫЙ ПРОДАВЕЦ
PREMIUM USER

Tartuga

Бывалый
ПРОВЕРЕННЫЙ ПРОДАВЕЦ
PREMIUM USER
Регистрация
7 Фев 2020
Сообщения
525
Реакции
98
Репутация
147
Итак, приветствую. В данной статье будет разобран процесс написания программы, позволяющей в режиме реального времени отслеживать все действия происходящие на удаленном компьютере, без ведома конечного пользователя. Автор статьи предупреждает, что не несет ответственности за неправомерное использование нижеизложенных технологий и не рекомендует использовать ее в противоправных целях. Поехали!



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



0) Добавление служебных файлов при первом запуске в папки системы

1) Снятие скриншота с экрана

2) Отправку скриншота на удаленный сервер



Соответственно, для реализации была выбрана платформа .NET, обладающая всем необходимым функционалом. Приложение написано на WindowsForms в целях наглядности и отладки, по большому счету оно могло быть консольным.



Описание функций:



SetConfig – обеспечивает чтение параметров конфигурации из приложенного файл настроек

Send – отвечает за отправку скриншота на почту

MakeScreen – отвечает за снятие скриншота

Circle – отвечает за повторение снятие и отправки скриншота в фоновом режиме с заданной периодичностью

CasualStart – определяет действия при очередном запуске программы

FirstStart – обеспечивает корректную установку программы



Теперь – чуть подробнее по каждой из функций. Настройка конфигурации:



Так как программное обеспечение должно быть гибким, следует обеспечить возможность изменения внутренних параметров программы извне ее кода. При каждом запуске данное программное обеспечение пытается найти файл

Пожалуйста Авторизуйтесь или Зарегистрируйтесь для просмотра скрытого текста.

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



(о том, какой параметр за что отвечает – будет в конце статьи)



По техническим причинам, вместо пробела пришлось использовать нижнее подчеркивание, а вместо @ — #, но внутри программы осуществляется обратная замена.



Выполнение программы начинается в блоке Form1_load, и может развиваться в двух режимах – обычный запуск(если на компьютере есть установочная директория) и установка(если установочной директории нет). Рассмотрим каждый из них.



Первый запуск:

При первом запуске требуется создать директорию, в которой будут размещаться файлы программы, перенести туда исполняемый файл и файл конфигурации, а так же – добавить необходимые записи в реестр, для добавления программного обеспечения в автозапуск.



Соответственно, это осуществляет функция FirstStart()


После установки приложение закрывается – при следующей перезагрузке компьютера оно будет работать в штатном режиме.



Штатный запуск:

Штатный запуск запускает фоновый поток, который осуществляет снятие и отправку скриншота, а так же очищает папку с скриншотами, снятыми за прошлую сессию. После чего, ожидает в течении значительного промежутка времени перед принудительным завершением приложения. Перед запуском фонового потока возможна пауза, которую стоит выставлять на сравнительно медленных компьютерах для ускорения загрузки системы и отсутствия конфликтов при запуске.

СasualStart()


Циркуляция:

Все прозаично до безобразия – в вечном цикле мы снимаем и отправляем скриншоты, после чего – ждем указанное время. На порядок интереснее сам процесс снятия и отправки скрина.


Сделать скриншот:

В С# есть возможность сохранения изображения в битмап путем функции копирования с экрана. Поэтому все, что требуется сделать – создать объект для хранения скриншота, с разрешением, равным текущему разрешению экрана, привязать к нему объект, способный получить битмап с экрана и сохранить это в предварительно созданную директорию.





Отправка на почту:

В C# есть возможность работы с почтой используя предустановленные классы, позволяющие заполнить поля письма, указать адресата и адресанта и, собственно – осуществить отправку вызовом одного метода. Этот метод завернуть в try-catch блок на случай отсутствия подключения к сети – даже в таком случае программа не выдаст сообщение об ошибке, а будет покорно ждать, пока у нее появится возможность обратиться к серверу. Почтовый сервер был выбран из соображений простоты, в принципе — можно снимки перекидывать куда угодно.


Общее взаимодействие:

Запуск программы, пoвторюсь, осуществляется в методе Form1_Load. Программа пытается обновить конфиг, потом определяет – была ли она запущена в первый раз, если да – добавляется в нужную папку и в автозагрузку и отключается, а если нет – запускает фоновый процесс, который стабильно по заданному интервалу закидывает изображение с экрана на почтовый сервер. Ничего сложного или необычного, просто взаимодействие нескольких встроенных классов.


И, наконец, пояснение файла автоконфигурации – все имена переменных совпадают с именами в программе, поэтому, поясняя поля в инит-файле, я так же описываю сами переменные.


wayToDir – имя подпапки, в которую скидываются скриншоты

finalDir = -имя директории, в которую переносится программа

nameOfApp = название исполняемого файла

subKeyAdress = путь к записи в реестре для добавления в авторан

reserved – зарезервированное поле

name — название записи в реестре

startPause — пауза перед началом записи скринов

exitPause – пауза перед принудительным выходом из программы

adressFrom –адрес отправителя

nameFrom –подпись отправителя

nameTo — почтовый адрес получателя

mailSubject — Тема письма

mailBody – текст письма

smtpAdress –адрес SMTP сервера почты отправителя

smtpPort – порт отправки почты

mailPassword – пароль от почты отправителя

exp – расширение файла

timeBetweenScreens –время между снятием двух скриншотов.



Резюмируя:



Только что был описан процесс написания приложения для отслеживания действий на удаленном компе. Подключив сюда получение файла с списком команд с сервера и разбиение его, получим упрощенный самописный TeamViewer. Но это — не в этой статье.
 
Сверху