
Fiquei me perguntando se poderia evitar que o programa A lesse toda a minha memória RAM, pois ele não precisa monitorar o que o programa B está fazendo.
Também estou no Windows 8.1 de 64 bits.
Responder1
Os programas em execução no Windows não conseguem endereçar diretamente a RAM. Eles acessam endereços virtuais. Para acessar a RAM você precisaria da ajuda de um driver de modo kernel escrito para esse propósito. (É assim que algumas das "ferramentas sysinternals" de Mark Russinovich fazem isso: elas instalam um driver que vem empacotado como um recurso dentro do .exe.)
No que diz respeito a um programa que acessa outro, cada processo no Windows já possui seu próprio espaço de endereço virtual, separado e desarticulado de todos os outros. ou seja, o 0x10000 de um programa é completamente diferente do 0x10000 de qualquer outro. Não importa qual endereço você tente ver, você estará sempre olhando para a instância desse endereço em seu próprio processo.
No entanto:As APIs ReadProcessMemory e WriteProcessMemory permitem que os programas façam acesso entre processos (em termos de endereços virtuais). Para utilizá-los o processo que faz o "acesso" deve abrir outro processo com os direitos PROCESS_VM_READ ou PROCESS_VM_WRITE concedidos. Os processos em execução na sessão do usuário normalmente têm a capacidade de fazer isso entre si (ou seja, o descritor de segurança na maioria dos processos permite isso para o criador do processo... que é você).
No entanto, um programa não teria como saber onde estaria algo de interesse em outro processo. Seria uma busca longa e cansativa por algo interessante. A grande maioria das tentativas resultaria em uma área de “endereço não definido”, especialmente em um sistema de 64 bits, principalmente no Windows 8.1 e posterior. Mesmo dentro das áreas definidas da memória virtual, não é como se os programas rotineiramente marcassem suas áreas de memória com informações de contexto, como “o número da conta bancária está aqui:” seguido imediatamente pelo referido número da conta.
Pode ser considerado algo arrogante que qualquer um dos seus processos possa acessar a "memória" (interpretada vagamente) de qualquer outro. Mas lembre-se, tudo o que você faz com um ID de login e autorização é considerado feito por um único usuário. ou seja, são todos os seus dados de qualquer maneira.
Francamente, eu me preocuparia mais com os dados do seu disco. Todos os arquivos que contêm seus dados foram criados por você com seu ID de segurança, portanto, qualquer programa executado com seu ID de segurança pode acessá-los todos. Pior ainda, o padrão do Windows é criar todos os arquivos com acesso de leitura concedido ao grupo “Usuários” – essencialmente todos. Assim, os programas executados sob outros IDs de segurança também podem lê-los. E como os arquivos geralmente são bem nomeados e colocados em diretórios bem nomeados e organizados, encontrar arquivos "interessantes" como accounts.txt não é tão difícil. A criptografia de arquivos NTFS não ajudará contra um programa espião executado em sua própria conta. Esta é uma exposição muito, muito maior do que o acesso à memória entre processos.