web-dev-qa-db-ja.com

Googleの取得Chromeパスワード

Google Chromeパスワードを取得しているときに、すべてのパスワードが同じもの(次のようなもの)として表示されることに気づきました:Vi??M!4NNn。私がそれらを取得する方法は次のとおりです(非管理者として):

cd "users/user/library/application support/google/chrome/default"
sqlite3 "Login Data"
sqlite3> .output chrome-passwords.txt
sqlite3> select Origin_url, username_values, password_value from logins;

Rootとして実行してパスワードを取得しても、同じことがわかりますが、これは何が原因で、どうすれば正しく取得できますか?

6
CertifcateJunky

よし、それを理解して答えを投稿すると言った。

パスワードが実際のように表示されたのは、特定のキーチェーンの場所に格納されている_pbkdf2_キーで暗号化されているためです(通常は「Chrome」という名前が含まれています)。このキーを見つけるには、管理者としてコマンド_security find-generic-password -wa 'Chrome'_を実行すると、キーがプルされます。

キーを取得したら、暗号化を解除するために必要になります。

  • IVを生成します(python -c 'import sys;sys.stdout.write("20" * 16)'
  • 塩を手に入れましょう(110%の確率でsaltysalt
  • 最初の16文字を取得する_pbkdf2_hmac_を使用して、見つかったキーを暗号化し、暗号化されたキーを正規化します(python -c 'import binascii;import hashlib;key=hashlib.pbkdf2_hmac("sha1","<KEY>",b"saltysalt",1003)[:16];print binascii.hexlify(key)
  • 暗号化されたパスワードをBase64エンコードし、最初の3文字を削除します(python -c 'import base64;print base64.b64encode("ENCRYPTED_PASSWORD")[3:]'
  • 次のコマンドを使用して暗号化を復号化します:_openssl enc -base64 -d -aes-128-cbc -v <IV> '<HEX KEY>' -K '<BASE64 ENCODED PASSWORD>'_。

幸いなことに、私は同じものを返す単純なpython関数を作成しました:

_import base64
import binascii
import subprocess
from hashlib import pbkdf2_hmac


def decrypt(encrypted, key):
    iv = ''.join(('20', ) * 16)
    key = pbkdf2_hmac('sha1', key, b'saltysalt', 1003)[:16]

    hex_key = binascii.hexlify(key)
    hex_enc_password = base64.b64encode(encrypted[3:])
    try:
        decrypted = subprocess.check_output(
            "openssl enc -base64 -d "
            "-aes-128-cbc -iv '{}' -K {} <<< "
            "{} 2>/dev/null".format(iv, hex_key, hex_enc_password),
            Shell=True)
    except subprocess.CalledProcessError:
        decrypted = "n/a"

    return decrypted
_

が正常に機能するためには、これを実行しているコンピューターの管理者資格情報が必要です。

2
CertifcateJunky