DBeaver 저장 비밀번호 평문으로 꺼내기
DBeaver는 DB 접속 비밀번호를 로컬에 AES 암호화해서 저장한다. 키를 알고 있으면 복호화 가능하다.
필요한 것
- Python 3
- pycryptodome 패키지
pip3 install pycryptodome
스크립트
~/Library/DBeaverData/workspace6경로에 파일을 넣고 실행
#!/usr/bin/env python3
# NOTE : pip3 install pycryptodome
import sys
import base64
import os
import json
from Crypto.Cipher import AES
import glob
config_file_paths = glob.glob('./**/.dbeaver/credentials-config.json', recursive=True)
for filepath in config_file_paths:
print(filepath)
# AES 복호화 키 (DBeaver 하드코딩 키)
PASSWORD_DECRYPTION_KEY = bytes([186, 187, 74, 159, 119, 74, 184, 83, 201, 108, 45, 101, 61, 254, 84, 74])
data = open(filepath, 'rb').read()
# CBC 모드 복호화: 앞 16바이트 = IV
decryptor = AES.new(PASSWORD_DECRYPTION_KEY, AES.MODE_CBC, data[:16])
padded_output = decryptor.decrypt(data[16:])
output = padded_output.rstrip(padded_output[-1:])
try:
print(json.dumps(json.loads(output), indent=4, sort_keys=True))
except:
print(output)
작동 원리
DBeaver는 credentials-config.json에 연결 정보를 저장하는데, AES-CBC 방식으로 암호화한다.
- 암호화 키: 소스코드에 하드코딩된 16바이트 고정 키
- IV (초기화 벡터): 파일 앞 16바이트
- 복호화: 키 + IV로 나머지 바이트를 AES-CBC 복호화
키가 하드코딩되어 있어서 DBeaver 설치본이면 어디서든 복호화 가능하다.
주의
이 스크립트는 자신의 DBeaver 비밀번호 복구 용도로만 사용해야 한다.
타인의 시스템에 무단으로 적용하는 것은 불법이다.