ScreenLogger - sorria, você é filmado por uma câmera escondida

Então seja bem vindo. Neste artigo, analisaremos o processo de gravação de um programa que permite o monitoramento em tempo real de todas as ações que ocorrem em um computador remoto, sem o conhecimento do usuário final. O autor do artigo alerta que ele não é responsável pelo uso ilegal das seguintes tecnologias e não recomenda o uso para fins ilegais. Vamos lá!

Ao escrever qualquer produto de software suficientemente grande, você precisa dividir a tarefa global em várias mais simples. Portanto, neste caso, identifiquei vários processos praticamente não relacionados que, trabalhando juntos, nos permitem alcançar o resultado desejado. Em particular, para implementar a tarefa, é necessário implementar:

0) Adicionando arquivos de serviço na primeira execução às pastas do sistema
1) Tire uma captura de tela da tela
2) Envie uma captura de tela para um servidor remoto

Dessa forma, a plataforma .NET foi selecionada para implementação, com todas as funcionalidades necessárias. O aplicativo é escrito em WindowsForms para fins de visualização e depuração, em geral pode ser um console.

Descrição das funções:

SetConfig - fornece a leitura dos parâmetros de configuração do arquivo de configurações anexado
Enviar - responsável por enviar uma captura de tela para o e-mail
MakeScreen - responsável por tirar uma captura de tela
Círculo - é responsável por repetir a captura e enviar uma captura de tela em segundo plano em uma frequência especificada
CasualStart - define ações no próximo lançamento do programa
FirstStart - garante a instalação correta do programa

Agora - um pouco mais de detalhes sobre cada uma das funções. Configuração:

Como o software deve ser flexível, deve ser possível alterar os parâmetros internos do programa de fora do seu código. A cada inicialização, esse software tenta encontrar o arquivo SaveScreen.ini, atualizar suas configurações e só então começar a trabalhar no modo normal. No caso em que é impossível atualizar os parâmetros, os valores padrão são usados.

(qual parâmetro é responsável pelo que será no final do artigo)

Por razões técnicas, em vez de um espaço, tive que usar o sublinhado e, em vez de @ - #, mas dentro do programa a substituição reversa é realizada.

A execução do programa inicia no bloco Form1_load e pode se desenvolver de dois modos: inicialização normal (se o computador tiver um diretório de instalação) e instalação (se não houver diretório de instalação). Vamos considerar cada um deles.

Primeira execução:
Na primeira inicialização, você precisa criar um diretório no qual os arquivos do programa serão colocados, transferir o arquivo executável e o arquivo de configuração para ele, além de adicionar as entradas necessárias ao registro para adicionar software à execução automática.

Portanto, isso é implementado pela função FirstStart ()

imagem

Após a instalação, o aplicativo é fechado - na próxima vez que você reiniciar o computador, ele funcionará normalmente.

Lançamento regular:
Um lançamento regular inicia um encadeamento em segundo plano que captura capturas de tela e as envia, além de limpar a pasta com capturas de tela capturadas durante a última sessão. Depois disso, aguarda um período de tempo considerável antes do encerramento forçado do aplicativo. Antes de iniciar o encadeamento em segundo plano, é possível uma pausa, que deve ser definida em computadores relativamente lentos para acelerar o carregamento do sistema e a ausência de conflitos na inicialização.
asualStart ()

imagem

Circulação:
Tudo é prosaico em desgraça - no ciclo eterno, tiramos e enviamos capturas de tela, após o que esperamos o tempo especificado. Uma ordem de magnitude mais interessante é o processo de capturar e enviar uma tela.

imagem

Faça uma captura de tela:
Em C #, é possível salvar uma imagem em um bitmap usando a função de cópia na tela. Portanto, tudo o que precisa ser feito é criar um objeto para armazenar uma captura de tela com uma resolução igual à resolução da tela atual, anexar um objeto a ele que possa receber um bitmap da tela e salvá-lo em um diretório criado anteriormente.

imagem

Enviando pelo correio:
Em C #, é possível trabalhar com o correio usando classes predefinidas que permitem preencher os campos da mensagem, especificar o destinatário e o destinatário e, de fato, enviar chamando um método. Coloque esse método em um bloco try-catch caso não exista conexão de rede - mesmo nesse caso, o programa não emitirá uma mensagem de erro, mas aguardará obedientemente até ter a oportunidade de acessar o servidor. O servidor de correio foi escolhido por razões de simplicidade, em princípio - você pode exibir imagens em qualquer lugar.

imagem

Interação geral:
Repito, o lançamento do programa é realizado no método Form1_Load. O programa tenta atualizar a configuração e, em seguida, determina se foi iniciado pela primeira vez; se for o caso, é adicionado à pasta desejada e inicializado e encerrado; caso contrário, inicia um processo em segundo plano que lança a imagem da tela para o servidor de correio em um determinado intervalo. Nada complicado ou incomum, apenas a interação de várias classes internas.
imagem

E, finalmente, uma explicação do arquivo de configuração automática - todos os nomes de variáveis ​​coincidem com os nomes no programa, portanto, explicando os campos no arquivo int, também descrevo as próprias variáveis.

imagem

wayToDir - o nome da subpasta na qual as capturas de tela são soltas
finalDir = -name do diretório para o qual o programa é transferido
nameOfApp = nome do arquivo executável
subKeyAdress = caminho para a entrada do Registro para adicionar à execução automática
reservado - campo reservado
nome - nome da entrada do registro
startPause - pausa antes de gravar as capturas de tela
exitPause - pausa antes da saída forçada do programa
adressFrom - endereço do remetente
nameFrom - assinatura do remetente
nameTo - endereço para correspondência do destinatário
mailSubject - Assunto do email
mailBody - texto da mensagem
smtpAdress - endereço SMTP do servidor de email do remetente
smtpPort - porta para envio de email
mailPassword - senha do email do remetente
exp - extensão de arquivo
timeBetweenScreens - o tempo entre tirar duas capturas de tela.

Em resumo:

O processo de escrever um aplicativo para rastrear ações em um computador remoto acaba de ser descrito. Ao conectar aqui, recebendo um arquivo com uma lista de comandos do servidor e dividindo-o, obtemos um TeamViewer auto-escrito simplificado. Mas isso não está neste artigo.

Código fonte

Source: https://habr.com/ru/post/pt457172/


All Articles