Mantendo as senhas secretas no código-fonte
Primeiro, tentarei abordar sua pergunta direta:
I wanted to make this myscript.ps1 protected so no one can edit it and see the username and password
Suponho que você não se importa realmente com as pessoas que realmente editam / alteram o script, mas que desejam apenas manter a senha segura. Como Ben disse, transformá-lo em um exe realmente não faz muito para impedir a extração porque você ainda está incorporando a senha nele.
O que você realmente quer é um hash de senha , que é uma função unidirecional que transforma uma senha em um hash que você pode incorporar. Dado apenas o hash, um invasor não pode reverter o processo, mas você pode verificar uma tentativa de senha, codificando a senha inserida e comparando-a com o hash conhecido da senha correta.
Por exemplo, pseudocódigo:
$authorisedHash = 'thehashedpassword';
$password = (Get-Credential).Password;
if ((Get-Hash $password) -eq $authorisedHash)
{
echo 'Password correct';
}
Em que $authorisedHash
é o resultado pré-calculado de (pseudocódigo) Get-Hash
que você armazena para comparação posterior.
O ideal seria usar um algoritmo como o Bcrypt ou o PBKDF2, com um alto fator de trabalho (ou seja, diminua a velocidade) para que ataques de força bruta (adivinhando tentando todas as senhas possíveis) demorem demais para serem viáveis.
Por esse método, a única string que você armazena em seu código é a saída original da função " Get-Hash
" (pseudocódigo) que você usa, o que dificulta muito se não impossível obter a senha original do seu código-fonte.
Protegendo um arquivo com uma senha
No entanto, enquanto isso mantém a senha em segredo, ela realmente não oferece nenhuma vantagem de segurança. Como Ben disse, não há realmente nada que impeça o usuário de executar manualmente o Copy-Item
ou copie o arquivo sozinho com o Windows Explorer.
Para esse tipo de segurança, você precisará usar as Listas de controle de acesso do Windows e uma conta de usuário separada autenticada em outro lugar (por exemplo, por meio de comandos de login / runas do sistema operacional Windows). Você precisa de um serviço ou conta externa para realizar a cópia, porque é necessário garantir que o usuário não tenha acesso direto para ignorar o script.
Se isso não for possível para você (por exemplo, porque você distribui os arquivos junto com o script, mas não é o administrador da máquina), o que você deve fazer é criptografar a Arquivo. Ao criptografar o arquivo com a senha, você garante que o arquivo seja inútil sem a senha (e, portanto, copiar o arquivo é inútil, porque permanece ilegível até ser descriptografado).
Agora, isso pode ser feito por meio do PowerShell, mas há outras maneiras mais fáceis. Um método genérico fácil é armazenar o arquivo em um arquivo criptografado, como ZIP 1 , RAR, 7z, etc., em que o usuário deve fornecer a senha a ser extraída. Como alternativa, os próprios PDFs incluem suporte para criptografia , exigindo uma senha antes de poderem ser lidos.
1 Observe que o suporte de criptografia interno do Windows para ZIP no XP para 7, possivelmente 8 e 10, não suporta AES. Suporta apenas a criptografia ZIP legada insegura. Então, você precisará de ferramentas de terceiros para extrair ou um arquivo de extração automática (exe).