O que é injeção de código no Windows?
A injeção de código é comum no Windows. As aplicações “injetam” partes de seu próprio código em outro processo em execução para modificar seu comportamento. Esta técnica pode ser usada para o bem ou para o mal, mas de qualquer forma pode causar problemas.
A injeção de código também é comumente chamada de injeção de DLL porque o código injetado geralmente está na forma de um arquivo DLL (biblioteca de vínculo dinâmico). No entanto, os aplicativos também podem injetar outros tipos de código que não são DLLs em um processo.
Qual injeção de código é usada para
A injeção de código é usada para realizar todos os tipos de truques e funcionalidades no Windows. Embora programas legítimos o usem, ele também é usado por malware. Por exemplo:
- Os programas antivírus geralmente injetam código nos navegadores da web. Eles podem usá-lo para monitorar o tráfego de rede e bloquear conteúdo perigoso da Web, por exemplo.
- Programas maliciosos podem adicionar código ao seu navegador para rastrear melhor sua navegação, roubar informações protegidas, como senhas e números de cartão de crédito, e alterar as configurações do seu navegador..
- Stardock's WindowBlinds, que temas sua área de trabalho, injeta código para modificar como as janelas são desenhadas.
- Cercas da Stardock injetam código para mudar a maneira como a área de trabalho do Windows funciona.
- AutoHotkey, que permite criar scripts e atribuir teclas de atalho para todo o sistema, injeta código para realizar isso.
- Drivers gráficos como os da NVIDIA injetam DLLs para realizar uma variedade de tarefas relacionadas a gráficos..
- Alguns programas injetam DLLs para adicionar opções de menu adicionais a um aplicativo.
- As ferramentas de trapaça de jogos para PC muitas vezes injetam código nos jogos para modificar seu comportamento e obter uma vantagem injusta sobre os outros jogadores..
A injeção de código é ruim??
Essa técnica é usada constantemente por uma ampla variedade de aplicativos no Windows. É a única maneira real de realizar várias tarefas. Em comparação com uma plataforma móvel moderna como o iOS da Apple ou o Android do Google, a área de trabalho do Windows é tão poderosa porque, se oferecer esse tipo de flexibilidade aos desenvolvedores.
Claro, com todo esse poder vem algum perigo. Injeção de código pode causar problemas e erros em aplicativos. O Google diz que os usuários do Windows que têm código injetado em seu navegador Chrome são 15% mais propensos a experimentar falhas do Google Chrome, e é por isso que o Google está trabalhando para bloquear isso. A Microsoft observa que a injeção de código pode ser usada por aplicativos maliciosos para adulterar as configurações do navegador, uma das razões pelas quais ele já está bloqueado no Edge.
A Microsoft ainda fornece instruções para verificar se as DLLs de terceiros estão carregadas no Microsoft Outlook, pois causam tantas falhas no Outlook.
Como funcionário da Microsoft, colocou-o em um blog de desenvolvedor de 2004:
Injeção de DLL nunca é segura. Você está falando sobre esguichar código em um processo que nunca foi projetado, construído ou testado pelo autor do processo, e cooptar ou criar um thread para executar esse código. Você corre o risco de criar problemas de sincronização, sincronização ou recurso que não existiam antes ou agravar problemas que estavam lá.
Em outras palavras, injeção de código é uma espécie de invasão. Em um mundo ideal, haveria uma maneira mais segura de conseguir isso que não causasse instabilidade em potencial. No entanto, injeção de código é apenas uma parte normal da plataforma de aplicativos do Windows hoje. Está constantemente acontecendo em segundo plano no seu PC Windows. Você pode chamar isso de um mal necessário.
Como verificar se há DLLs injetadas
Você pode verificar a injeção de código em seu sistema com o poderoso aplicativo Process Explorer da Microsoft. É basicamente uma versão avançada do Gerenciador de Tarefas com recursos adicionais.
Faça o download e execute o Process Explorer se você quiser fazer isso. Clique em View> Lower Pane View> DLLs ou pressione Ctrl + D.
Selecione um processo no painel superior e procure no painel inferior para ver as DLLs que são carregadas. A coluna "Nome da empresa" fornece uma maneira útil de filtrar essa lista.
Por exemplo, é normal ver uma variedade de DLLs feitas pela “Microsoft Corporation” aqui, pois elas são parte do Windows. Também é normal ver as DLLs criadas pela mesma empresa que o processo em questão, "Google Inc." no caso do Chrome, na captura de tela abaixo.
Nós também podemos identificar algumas DLLs feitas pelo “AVAST Software” aqui. Isso indica que o software antimalware do Avast em nosso sistema está injetando código como a “biblioteca de filtros do Avast Script Blocking” no Chrome.
Não há muito o que fazer se encontrar uma injeção de código em seu sistema, além de desinstalar o código de injeção do programa para evitar que ele cause problemas. Por exemplo, se o Google Chrome travar regularmente, convém ver se há algum programa injetando código no Google Chrome e desinstalá-lo para impedir que ele adultere os processos do Google Chrome..
Como funciona a injeção de código?
A injeção de código não modifica o aplicativo subjacente em seu disco. Em vez disso, ele aguarda a execução desse aplicativo e injeta código adicional nesse processo em execução para alterar a forma como ele funciona.
O Windows inclui uma variedade de interfaces de programação de aplicativos (APIs) que podem ser usadas para injeção de código. Um processo pode se anexar a um processo de destino, alocar memória, gravar uma DLL ou outro código nessa memória e instruir o processo de destino a executar o código. O Windows não impede que processos em seu computador interfiram uns com os outros como este.
Para obter mais informações técnicas, confira esta postagem no blog explicando como os desenvolvedores podem injetar DLLs e essa olhada em outros tipos de injeção de código no Windows.
Em alguns casos, alguém pode alterar o código subjacente no disco - por exemplo, substituindo um arquivo DLL que vem com um jogo para PC por um modificado para ativar a trapaça ou a pirataria. Isso tecnicamente não é "injeção de código". O código não está sendo injetado em um processo em execução, mas o programa está sendo enganado para carregar uma DLL diferente com o mesmo nome..
Crédito de imagem: Lukatme / Shutterstock.com.