使用 Python 在 Windows DPAPI 中解密安全字符串

Decrypt Secure Strings in Windows DPAPI using Python

提问人:user19736286 提问时间:10/19/2022 最后编辑:user19736286 更新时间:10/19/2022 访问量:598

问:

给定一个 Windows DPAPI 文件,其值存储为安全字符串 如何在 Python 中解密这些值?安全字符串是使用 PowerShell 创建的,如下所示。

$global:Credentials.AuthToken = Read-Host -AsSecureString -Prompt "Auth-Token:"

这些值使用 DPAPI 存储在 Windows 10 或类似计算机上。

Python Windows PowerShell DPAPI

评论


答:

1赞 user19736286 10/19/2022 #1

使用 Python,从 DPAPI 文件中提取安全字符串,并将其提供给下面的函数。安全字符串将存储为 base64 编码值。

注意:读取 PowerShell 创建的 DPAPI 文件时,请确保使用“utf-16-le”编码。

import codecs
import win32crypt
import base64
        
def decrypt(b64string):

   b64decodedstring = base64.b64decode(b64string)

   clear = win32crypt.CryptUnprotectData(b64decodedstring, None, None, None, 0)

   return clear[1].decode("utf-16-le")

对于 Windows 中的安全字符串,该值以 base64 编码的十六进制形式存储在磁盘上。因此,像这样提取明文值,通过函数运行它两次,并在两者之间将十六进制值编码回 base64。

decrypt(codecs.encode(codecs.decode(decrypt(ValueExtractedFromDPAPIGoesHere), 'hex'), 'base64').decode())

注意:您需要以您尝试从其 DPAPI 访问安全字符串的用户身份运行 Python。