Olá pessoal,
Há um tempo atrás estava pesquisando como recuperar a senha de um arquivo do Remote Desktop Connection Manager para um módulo de powershell que escrevi, o RDCMan. O módulo tem como objetivo automatizar a criação e organização de um arquivo do Remote Desktop Connection Manager.
A forma mais pratica que encontrei foi renomear o executavel do RDCMan para .dll e importar ele no powershell para ter acesso as classes que ele utiliza.
Para importar as classes, vou utilizar o comando Add-Type
:
Add-Type -Path 'E:\Sources\RDCMan\bin\Debug\netstandard2.0\RDCMan.dll'
O arquivo do RDCMan é basicamente um arquivo XML com a extensão .rdg para nosso exemplo vou utilizar o seguinte arquivo:
<?xml version="1.0" encoding="utf-8"?>
<RDCMan programVersion="2.7" schemaVersion="3">
<file>
<credentialsProfiles />
<properties>
<expanded>True</expanded>
<name>GuidoRDG</name>
</properties>
<server>
<properties>
<name>GuidoServer1</name>
</properties>
<logonCredentials inherit="None">
<profileName scope="Local">Custom</profileName>
<userName>guido</userName>
<password>AQAAANCMnd8BFdERjHoAwE/Cl+sBAAAAlwsu8E3r6k2QYMU+bOSQcQAAAAACAAAAAAAQZgAAAAEAACAAAACSup7VrXmiwtzgVjlAYfVEQvdhaoVIFre+X01TGKGJ9wAAAAAOgAAAAAIAACAAAAD6NB0sJvcmdqTvJ2QPOfywXWjRDnyYsoSTqRzoMGAojEAAAAD/0vgcNdQ6PQW+iOar8C83LGBlLedFVeQln2R17u93FMU58pU+ZcAiHpqgTvIYhIRaszYT+e0Xu2HSn2WzclMZQAAAAFjJBiljvZRVIEqd5vmvJke09WMSfxN52AopwOz2vxscAlxUob2kMAoKGmGKTU15iZOUV9iDoPSSPSS+70qO3Eg=</password>
<domain>DESKTOP-9GMDPL6</domain>
</logonCredentials>
</server>
</file>
<connected />
<favorites />
<recentlyUsed />
</RDCMan>
Neste XML podemos facilmente identificar a senha dentro do bloco logonCredentials
, a senha parece estar em string base64, porém ela está criptografada. Para recuperar ela usando o powershell, é muito simples, precisamos definir um objeto com a classe RDCMan.EncryptionSettings
e outro chamando o método DecryptString
da classe RDCMan.Encryption
.
$EncriptionSettings = [RDCMan.EncryptionSettings]::new()
[RDCMan.Encryption]::DecryptString($XML.RDCMan.file.server.logonCredentials.password, $EncriptionSettings)
O retorno é a senha descriptografada, que no exemplo é: PuxaVidaQueS3nh4MaisS3GuR4!!
Para navegar pelo XML apenas listei o conteudo do arquivo com Get-Content
e usei o acelerador [xml]
para converter a string em objeto. Se voce quiser basta informar a string no primeiro argumento do método, porém acabei preferindo dessa forma.
[xml]$XML = Get-Content -Path .\GuidoRDG.rdg
Esse é um método bem simples, porém dependendo do cenário pode ser muito util.
Dúvidas? Sugestões?
Até a próxima!