본문으로 건너뛰기

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 비밀번호 복구 용도로만 사용해야 한다.
타인의 시스템에 무단으로 적용하는 것은 불법이다.