IT/web

[chrome][onetab] 플러그인 업데이트로 재설치 후 이전 기록 안보일 때 목록이라도 건지는 방법...

심량 2022. 1. 3. 10:30

기록용으로 남깁니다.

Google chrome 브라우저에서 플러그인 업데이트가 떠 있길래 실행했는데 onetab 이 업그레이드 된 후 기존 내용이 다 날라가고 안보입니다..

이래저래 복구할 수 있는 방법 없을까 찾아봤는데 잘 안되었습니다..

어찌어찌 검색으로 찾다보니 C:\Users\my_loginid\Chrome\User Data\Default\Local Extension Settings\chphlpgkkbolifaimnlloiipkdnihall 라는 폴더를 알게 되었습니다.

그 안에 2MB 짜리 ldb 가 여러개 있더라구요. 열어봤더니 url 일부가 있었습니다!!
하나님께 감사드리며 이제 이 파일을 복구해보려고 시도를 했는데 안됩니다..
그래 목록이라도 추출해보자 했는데 안됩니다..

찾아보니 Google 에서 만든 leveldb 라는 파일이고 약간의 압축도 되는 것으로 보입니다..

c#, python 등 여러 버전으로 된 소스로 ldb 파일을 열어보려고 했는데 파일을 읽지 못하거나 실행이 안되거나 의존하는 google 라이브러리가 설치가 안됩니다..

google 라이브러리를 사용하지 않는 버전을 찾아보다가 오아시스를 한 개 발견했습니다 >,.<

다만, 잘 실행이 안되서 WSL을 사용해서 윈도우 환경이 아닌 리눅스 환경에서 접근했습니다. 필요 패키지 등 문제 없이 설치됩니다.

그리고 이 파일로 실행하면 제가 원하는 내용(사이트 제목과 url)만 나오는게 아니라 leveldb 전체 내용이 복잡한(리스트와 딕셔너리 조합체..) 형태로 나옵니다. 이를 제가 원하는 형태만 나오도록 수정한 버전입니다.

https://gist.github.com/simryang/4b6fdb45ea86f1913c2e027d511d75cd

#!/usr/bin/env python
# linux environment is recommended. not tested on other environment. tested on Ubuntu 20.04
# python3 leveldb_dump_joseph.py '/mnt/d/Users/USERID/Chrome/User Data/Default/Local Extension Settings/chphlpgkkbolifaimnlloiipkdnihall' > result.csv
# result is tab seperated values(TSV). save result to *.csv and import on new excel documents with 'tab' seperator
# original code from https://gist.github.com/dexX7/cbd16b05f1f3870b7afc
# I made this code from original for recovering OneTab bookmarks
import binascii
import sys
import json
import yaml
import pprint
# pip3 install leveldb
import leveldb
def b2x(b):
"""Convert bytes to a hex string"""
if sys.version > '3':
return binascii.hexlify(b).decode('utf8')
else:
return binascii.hexlify(b)
def db_count(filepath):
"""Prints number of records in LevelDB database"""
db = leveldb.LevelDB(filepath)
count = 1
for k in db.RangeIter(None, None, False):
count += 1
print(count)
def db_dump(filepath, to_hex=0):
"""Prints records of LevelDB database"""
db = leveldb.LevelDB(filepath)
for k, v in db.RangeIter(None, None):
if to_hex:
k = b2x(k)
v = b2x(v)
if k.decode() != 'state':
continue
# print("key=", k.decode())
# print("value=", json.loads(v.decode()))
# print(v.decode())
decoded = v.decode()
tmp = json.loads(decoded)
tmp3 = json.loads(tmp)
return tmp3
# print(yaml.dump(temp, default_flow_style=False))
# print(json.loads(v.decode()))
# return json.loads(v.decode())
# print('%s %s\n' % (k, v,))
if __name__ == '__main__':
if len(sys.argv) == 1:
print('Dumps or counts content of one or more LevelDB databases.')
print('Binary entries can be converted to hex.\n')
print('Usage:')
print(' python %s [--count] [--binary] path1 [path2, path3, ...]\n' % (sys.argv[0],))
print('Examples:')
print(' python %s ~/.bitcoin/testnet3/MP_spinfo/' % (sys.argv[0],))
print(' python %s --count ~/.bitcoin/testnet3/MP_txlist/' % (sys.argv[0],))
print(' python %s --binary ~/.bitcoin/testnet3/chainstate/' % (sys.argv[0],))
count = 0
to_hex = 0
for arg in sys.argv[1:]:
if '--count' in arg:
count = 1
continue
if '--binary' in arg:
to_hex = 1
continue
if count:
db_count(arg)
else:
# db_dump(arg, to_hex)
ret = db_dump(arg, to_hex)
tablist = ret["tabGroups"]
csv_list = []
for tabnode in tablist:
inner = tabnode['tabsMeta']
for node in inner:
csv_list.append(f"{node['title']}\t{node['url']}")
csv_list.sort()
for line in csv_list:
print(line)

 

# leveldb 설치
pip3 install leveldb

# ldb 파일이 위치한 경로가 너무 길기 때문에 링크로 축약하기
ln -s '/mnt/d/Users/USERID/Chrome/User Data/Default/Local Extension Settings/chphlpgkkbolifaimnlloiipkdnihall' onetab

# 실행
python3 leveldb_dump_joseph.py onetab > result.csv

# 결과 확인
excel 에서 새 문서를 만든 뒤 데이터>>외부 데이터 가져오기>>텍스트 에서 생성한 csv 를 선택하고 구분자를 탭(tab)으로 지정해주면 잘 열립니다.
텍스트 파일이기 때문에 텍스트 편집기로 확인하셔도 됩니다.

# 결론
onetab 저장 목록 복원 실패
onetab 의 ldb 파일에서 웹페이지 title과 url 추출은 성공