OpenVPN에 저장된 비밀번호 복구

OpenVPN에 저장된 비밀번호 복구

사용자 노트북을 변경하고 있는데 OpenVPN GUI에 사용자 이름과 비밀번호를 저장했습니다. 당연히 그들은 얼마 전에 비밀번호를 입력하고 "비밀번호 저장"을 클릭했기 때문에 자신의 비밀번호를 모릅니다. VPN 계정을 재설정하지 않고도 새 노트북으로 마이그레이션할 수 있도록 이러한 세부 정보를 복구할 수 있는 방법이 있습니까? (이렇게 하는 것이 훨씬 더 어렵습니다!)

두 노트북 모두 Windows 10입니다.

.ovpn, p12및 파일을 복사했지만 .keyGUI에는 여전히 사용자 이름과 비밀번호를 묻는 메시지가 표시됩니다. 구성 디렉터리(프로그램 파일 아래 OpenVPN 아래)에는 비밀번호 텍스트 파일이 없습니다.

저도 레지스트리를 검색해봤는데 정보가 없네요.

편집하다: 분명히 말하면 실제로 비밀번호를 "복구"할 필요는 없습니다. 예를 들어 레지스트리 키로 암호화되어 있으면 괜찮습니다. 이전 노트북에서 키를 내보내고 새 노트북으로 가져올 수 있습니다. laptop1에서 laptop2로 세부 정보를 복사하는 방법을 찾아야 합니다.

답변1

OpenVPN GUI에 따라소스 코드, 저장된 비밀번호는 레지스트리 아래에 저장됩니다 HKCU\Software\OpenVPN-GUI\configs.

답변2

이 링크의 Powershell 스크립트가 비밀번호를 가져옵니다. OpenVPN 비밀번호 복구

내 컴퓨터의 레지스트리 이름이 약간 다릅니다. 내 버전:

$keys = Get-ChildItem "HKCU:\Software\OpenVPN-GUI\configs"
$items = $keys | ForEach-Object {Get-ItemProperty $_.PsPath}

foreach ($item in $items)
{
  $encryptedbytes=$item.'auth-data'
  $entropy=$item.'entropy'
  $entropy=$entropy[0..(($entropy.Length)-2)]

  $decryptedbytes = [System.Security.Cryptography.ProtectedData]::Unprotect(
    $encryptedBytes, 
    $entropy, 
    [System.Security.Cryptography.DataProtectionScope]::CurrentUser)
 
  Write-Host ([System.Text.Encoding]::Unicode.GetString($decryptedbytes))
}

Add-Type -AssemblyName System.Security작동하려면 Powershell에서 실행해야 할 수도 있습니다 .

편집: Windows 10, OpenVPN v11.9,$encryptedbytes=$item.'key-data'

답변3

회사 openVPN 구성을 사용하여 Windows 10에서 Windows 11 작업 공간으로 마이그레이션한 후에도 동일한 문제가 발생합니다. 이 스레드의 스크립트는 나에게 도움이 되지 않았습니다. 그리고 나는 내 것을 만들었습니다. 이것이 다른 사람에게 도움이 될 수 있습니다... Get-ItemPropertyValue의 레지스트리 경로를 저장된 경로로 바꾸고 파워 셸 창에서 이 스크립트를 실행하세요... Windows 10x64, OpenVPN 2.4.9에서 작업

$keyBinEncrupted = Get-ItemPropertyValue 'HKCU:\SOFTWARE\OpenVPN-GUI\configs\corpnet' 'key-data'
$entropyBin = Get-ItemPropertyValue 'HKCU:\SOFTWARE\OpenVPN-GUI\configs\corpnet' 'entropy'
$entropyBin = $entropyBin[0..(($entropyBin.Length)-2)]

$keyBinDecrupted = [System.Security.Cryptography.ProtectedData]::Unprotect(
    $keyBinEncrupted,
    $entropyBin,
    [System.Security.Cryptography.DataProtectionScope]::CurrentUser)

Write-Host ([System.Text.Encoding]::Unicode.GetString($keyBinDecrupted))

답변4

Alex의 답변에 추가:

필요한 경우 다음 두 줄을 추가하여 사용자 이름을 쉽게 추출할 수도 있습니다.

$username=$encryptedbytes=$item.'username'
Write-Host ([System.Text.Encoding]::Unicode.GetString($username))

또한 PowerShell 구성에 따라 스크립트가 작동하기 전에 먼저 다음 두 명령을 실행해야 할 수도 있습니다(스크립트를 허용하고 암호 해독 프로세스에 필요한 보안 유형을 활성화하려면).

set-executionpolicy remotesigned 
Add-Type -AssemblyName System.Security

관련 정보