→ 시드 구문 저장 안해놨고
→ 심지어 월렛 재설치를 누르면서, 여기서부터 좀 까다로워졌음. DB 덮어짐
암호화된 vault가 들어있던 chrome.storage.local(leveldb)이 빈 새 DB로 교체된 상황.
해결 방법 및 프롬프트 공유 (클로드야 고마워) ;OKX Wallet
→ 아래 방식으로 진행하면 대충 흩어진 월렛들의 시드 구문 다 뱉음
[★ 복구 시작 전에 절대 하지 말 것 — 어기면 영구 복구불가]
1. 그 디스크(보통 C:)에 파일 저장/다운로드/프로그램 설치 금지.
- 삭제된 vault 조각이 덮어써지면 끝. 작업 산출물도 다른 드라이브(USB/F:)에 써라.
2. 재부팅/종료/절전 금지. (페이지파일·여유공간 정리로 흔적 소실 가능)
3. OKX 재설치/로그인/"새 지갑 생성"/"기존 지갑 초기화" 금지. (빈 DB로 덮어씀)
4. 디스크 조각모음/최적화/cleanmgr/SSD TRIM 유발 작업 금지.
5. 복구된 시드를 온라인·클라우드·채팅·캡처로 올리지 마라. (이 채팅 포함)
6. 시간이 생명이다. 삭제 직후일수록 성공률 높다. 위 1~4 지키고 즉시 시작.
[해결 방법 — 순서대로]
1) 진단: OKX 확장ID = mcohilncbfahbmgdjkbpemcciiolgcge
vault 위치 = ...\Chrome\User Data\<Profile>\Local Extension Settings\<extID>\*.ldb/*.log
해당 프로필이 비었는지, 섀도카피/이전버전/휴지통에 없는지 확인.
2) 카빙: 관리자 권한으로 디스크 볼륨을 raw 스캔(삭제/빈 공간 포함)해서
시그니처 "vaultV2":"{\"data\":\"...\",\"iv\":..,\"salt\":..}" 블록을 전부 덤프.
(산출물은 비-C 드라이브에 저장)
3) 복호화: OKX는 browser-passworder(PBKDF2-SHA256 + AES-256-GCM)에
"randomPassword" 한 겹이 더 있다. 비번만으론 절대 안 풀린다. 공식:
randomPassword = sha256( platformOS + extensionId + cpuModelName ).hex
실제비번 = 사용자비번 + randomPassword // 문자열 이어붙임
key = PBKDF2-SHA256( 실제비번, base64decode(salt), iterations, 32 )
plaintext = AES-256-GCM( key, iv, data ) // data = ciphertext||16byte tag
- platformOS = chrome.runtime.getPlatformInfo().os (Windows="win")
- extensionId = mcohilncbfahbmgdjkbpemcciiolgcge
- cpuModelName= chrome.system.cpu.modelName ≈ 레지스트리 ProcessorNameString
- iterations = vault의 keyMetadata.params.iterations (지갑마다 다름)
=> 같은 기기라 randomPassword를 그대로 재구성 가능 → 오프라인 복호화.
4) 검증 근거(OKX background.js): 함수 gsr()=randomPassword 빌더,
Rkt(pw,salt)=PBKDF2(utf8(pw), base64(salt)), 복호화 시 Rkt(userPw+randomPassword, salt).
5) 성공 후: 시드 종이 백업 → 임포트 → 새 지갑으로 자산 이전 → 평문 산출물 안전삭제.
[필요 도구] Windows + 관리자 PowerShell + Node.js.
[핵심 제약] 반드시 "그 지갑을 만든 그 컴퓨터"에서. (CPU 모델명 달라지면 복호화 불가)