我有一个用于打开和解密 Google Chrome cookie 的工作脚本,如下所示:
decrypted = win32crypt.CryptUnprotectData(enctypted_cookie_value, None, None, None, 0)
Run Code Online (Sandbox Code Playgroud)
似乎在更新 80 之后它不再是一个有效的解决方案。
根据这篇博客文章https://blog.nirsoft.net/2020/02/19/tools-update-new-encryption-chrome-chromium-version-80/似乎我需要对本地状态文件中的 encrypted_key 进行 CryptUnprotectData ,而不是使用解密密钥以某种方式解密cookie。
对于第一部分,我得到了我的 encrypted_key
path = r'%LocalAppData%\Google\Chrome\User Data\Local State'
path = os.path.expandvars(path)
with open(path, 'r') as file:
encrypted_key = json.loads(file.read())['os_crypt']['encrypted_key']
encrypted_key = bytearray(encrypted_key, 'utf-8')
Run Code Online (Sandbox Code Playgroud)
然后我试图解密它
解密密钥 = win32crypt.CryptUnprotectData(加密密钥,无,无,无,0)
并得到了例外:
pywintypes.error: (13, 'CryptProtectData', 'The data is invalid.')
Run Code Online (Sandbox Code Playgroud)
我不知道如何修复它
同样对于加密的第二部分,我似乎应该使用 pycryptodome,类似于以下代码段:
cipher = AES.new(encrypted_key, AES.MODE_GCM, nonce=nonce)
plaintext = cipher.decrypt(data)
Run Code Online (Sandbox Code Playgroud)
但我不知道我应该在哪里获得 nonce 值
有人可以解释一下,如何正确解密 Chrome cookie?
在使用rubylearning教程学习ruby时,我不得不“使用别名”部分。我不明白使用别名之间的区别是什么,例如:
def oldmtd
"old method"
end
alias newmtd oldmtd
def oldmtd
"old improved method"
end
puts oldmtd
puts newmtd
Run Code Online (Sandbox Code Playgroud)
带输出
old improved method
old method
Run Code Online (Sandbox Code Playgroud)
并为此函数分配一个新变量,例如:
def oldmtd
"old method"
end
newmtd = oldmtd
def oldmtd
"old improved method"
end
puts oldmtd
puts newmtd
Run Code Online (Sandbox Code Playgroud)
具有相同的输出:
old improved method
old method
Run Code Online (Sandbox Code Playgroud)
请告诉我实际区别是什么,何时使用“别名”是正确的?