Как восстановить пароли, хранящиеся в DBeaver

Для DBeaver 6.1.3+ пароли теперь хранятся в файле “json” с новым шифрованием.
Где найти файл хранящий сохраненные пароли, Вы можете узнать на страницах официальной документации.
А потом Вы можете использовать скрипт на питоне 2/3 для расшифровки и вывода результатов.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import sys
import base64
import os
import json
from Crypto.Cipher import AES

if len(sys.argv) < 2:
  filepath = os.path.expanduser("~/.local/share/DBeaverData/workspace6/General/.dbeaver/credentials-config.json")
else:
  filepath = sys.argv[1]

# Python 3
#PASSWORD_DECRYPTION_KEY = bytes([-70, -69, 74, -97, 119, 74, -72, 83, -55, 108, 45, 101, 61, -2, 84, 74])
#PASSWORD_DECRYPTION_KEY = bytes([186, 187, 74, 159, 119, 74, 184, 83, 201, 108, 45, 101, 61, 254, 84, 74])
# Python 2
PASSWORD_DECRYPTION_KEY = bytearray([186,187,74,159,119,74,184,83,201,108,45,101,61,254,84,74])

data = open(filepath, 'rb').read()

# Python 3
# decryptor = AES.new(PASSWORD_DECRYPTION_KEY, AES.MODE_CBC, data[:16])
# Python 2
decryptor = AES.new(str(PASSWORD_DECRYPTION_KEY), AES.MODE_CBC, data[:16])

# The '-8' was observed in my case, I'm not sure it will be the same in every case
# Basically this was the string '\x08\x08\x08\x08\x08\x08\x08\x08' in the decrypted output
output = decryptor.decrypt(data[16:])[:-11]

print(output)

print(json.dumps(json.loads(output), indent=4, sort_keys=True))

Вывод будет похож на что-то подобное:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
  {"mariaDB-16e4609c25e-2737c22fbf07523e":{"#connection":{"user":"root","password":"XXXXXXXXXXX"},"network/ssh_tunnel":{"user":"woreg"}},"profile:255.255.255.255":{"network/ssh_tunnel":{"user":"remo"}}}
{
    "mariaDB-16e4609c25e-2737c22fbf07523e": {
        "#connection": {
            "password": "XXXXXXXXXXXXXXX",
            "user": "root"
        },
        "network/ssh_tunnel": {
            "user": "remo"
        }
    },
    "profile:255.255.255.255": {
        "network/ssh_tunnel": {
            "user": "remo"
        }
    }
}
Scroll to top