크롬 브라우저에서 파일 다운로드 이력을 확인하는 방법은 여러 가지가 있습니다. 브라우저 자체의 기능을 활용하거나, 로컬 저장소 파일을 분석하는 방법이 있습니다.
크롬 브라우저 내 다운로드 기록 확인
크롬 브라우저의 내장 기능을 사용하여 가장 간단하게 다운로드 이력을 확인할 수 있습니다.
방법
- 단축키 사용
- Windows/Linux:
Ctrl + J
- Mac:
Command + Option + J
- Windows/Linux:
- 설정 메뉴 접근
- 크롬 브라우저를 실행하고 우측 상단 메뉴 (⋮) 클릭 → 다운로드 메뉴를 선택합니다.
- URL 직접 입력
chrome://downloads/
크롬 주소창에 다음 URL을 입력하면 다운로드 페이지로 이동합니다.
여기서 파일명, 다운로드 경로, 다운로드 시각 등을 확인할 수 있습니다.
크롬 히스토리 및 SQLite 파일 분석
크롬은 다운로드 이력을 SQLite 데이터베이스 파일로 저장합니다.
위치
- Windows
C:\Users\<사용자명>\AppData\Local\Google\Chrome\User Data\Default\History
- Mac/Linux
~/Library/Application Support/Google/Chrome/Default/History
분석 방법
- SQLite 뷰어 설치
다운로드 이력을 보려면 SQLite 데이터베이스 뷰어를 사용해야 합니다.- 예:
DB Browser for SQLite
또는sqlite3
명령어 사용.
- 예:
- History 파일 열기
크롬 브라우저가 실행 중일 때는 해당 파일에 접근할 수 없으므로 브라우저를 종료하고 분석하세요. - SQL 명령어 예시
downloads
테이블에서 데이터를 확인합니다.SELECT target_path, total_bytes, start_time FROM downloads;
target_path
: 다운로드된 파일의 경로total_bytes
: 파일 크기start_time
: 다운로드 시작 시각
이벤트 뷰어를 통한 다운로드 이력 확인 (Windows)
Windows에서는 이벤트 뷰어를 통해 파일 생성 및 다운로드 기록을 추적할 수 있습니다.
방법
- 이벤트 뷰어 실행
- Win + R →
eventvwr
입력 후 엔터.
- Win + R →
- 로그 확인
- Windows 로그 → 보안 또는 시스템 로그 확인.
- 다운로드 시 파일 생성 이벤트 ID를 기준으로 필터링.
브라우저 확장 프로그램 사용
추가적인 기록이나 관리 기능이 필요하다면 확장 프로그램을 사용할 수 있습니다.
- 다운로드 히스토리 매니저 같은 확장 프로그램은 이력을 보다 쉽게 관리하도록 도와줍니다.
포렌식 도구 활용
보안 및 감사 목적으로 파일 다운로드 이력을 더 심층적으로 조사하려면 포렌식 도구를 사용할 수 있습니다.
- 예: Autopsy, FTK Imager 등.
이 도구들은 크롬의 캐시, SQLite 데이터베이스, 시스템 로그 등을 종합적으로 분석해 삭제된 기록까지 확인할 수 있습니다.
- 로그 관리: 다운로드 기록을 체계적으로 보관하려면 시스템 또는 브라우저 로그를 주기적으로 백업해야 합니다.
- 감사 기능: 기업 환경에서는 다운로드 모니터링 도구나 DLP (Data Loss Prevention) 솔루션을 도입하면 실시간으로 다운로드를 감시하고 기록할 수 있습니다.
위 방법 중 가장 간단한 것은 크롬 내장 다운로드 페이지 또는 SQLite 파일 분석입니다. 필요에 따라 적합한 방법을 선택해서 활용하면 됩니다. 크롬의 History
파일에서 파일 다운로드 URL과 파일 경로를 매칭하는 방법은 다음과 같습니다.
크롬은 다운로드 이력과 방문한 URL 이력을 SQLite 데이터베이스에 저장합니다. History
파일에는 downloads
테이블과 downloads_url_chains
테이블이 있으며, 두 테이블을 조인하면 어떤 URL에서 어떤 파일을 다운로드했는지 확인할 수 있습니다.
History 파일 분석을 위한 SQLite 접근
History 데이터베이스 구조
downloads
테이블: 다운로드된 파일 정보가 저장됨.id
: 고유 IDtarget_path
: 파일 저장 경로start_time
: 다운로드 시작 시간
downloads_url_chains
테이블: 다운로드 URL 정보가 저장됨.id
:downloads
테이블과 연결할 수 있는 IDchain_index
: 다운로드 관련 URL의 순서 (주로 0이 실제 다운로드 URL)url
: 파일을 다운로드한 URL
SQL 쿼리로 URL과 파일 정보 매칭하기
두 테이블을 조인하여 다운로드 URL, 파일 경로, 다운로드 시간을 추출하는 SQL 쿼리는 다음과 같습니다.
SQL 쿼리
SELECT
d.target_path AS "파일 경로",
u.url AS "다운로드 URL",
datetime((d.start_time/1000000) - 11644473600, 'unixepoch') AS "다운로드 시각"
FROM
downloads d
JOIN
downloads_url_chains u
ON
d.id = u.id
WHERE
u.chain_index = 0;
설명
d.id = u.id
로downloads
테이블과downloads_url_chains
테이블을 연결합니다.chain_index = 0
은 최종 다운로드 URL을 의미합니다.datetime()
함수는 크롬의start_time
값(Windows FILETIME 형식)을 사람이 읽을 수 있는 UTC 시간으로 변환합니다.
분석 방법
- SQLite 뷰어 사용
- DB Browser for SQLite: GUI 기반 도구로 History 파일을 열고 쿼리를 실행할 수 있습니다.
- sqlite3 명령어를 터미널에서 실행.
- SQLite3 명령어 예시 (CLI 사용 시)
이후 쿼리 입력sqlite3 "C:\Users\<사용자명>\AppData\Local\Google\Chrome\User Data\Default\History"
SELECT d.target_path, u.url, datetime((d.start_time/1000000) - 11644473600, 'unixepoch') FROM downloads d JOIN downloads_url_chains u ON d.id = u.id WHERE u.chain_index = 0;
- 결과 확인
결과에는 파일 경로, 다운로드 URL, 다운로드 시각이 출력됩니다.
결과 예시
파일 경로 | 다운로드 URL | 다운로드 시각 |
---|---|---|
C:\Downloads\example.pdf |
https://example.com/file.pdf |
2024-06-17 12:30:45 |
- 브라우저 종료 후 분석: 크롬이 실행 중일 때는
History
파일이 잠겨 있어 접근이 제한될 수 있습니다. - 백업 권장: 원본 History 파일을 백업한 후 분석하세요.
- 다운로드 기록 삭제된 경우: 삭제된 기록은 이 데이터베이스에서 확인할 수 없습니다.
이 방법을 통해 다운로드된 파일이 어떤 URL에서 받아졌는지 정확하게 확인할 수 있습니다. 필요에 따라 결과를 CSV 등으로 내보낼 수 있습니다. 크롬의 History
데이터베이스는 SQLite 형식으로 저장되며, 브라우저 사용 기록(방문 기록, 다운로드 이력 등)을 포함하고 있습니다. 주요 테이블과 각 테이블의 스키마 및 용도에 대해 자세히 설명드리겠습니다.
주요 테이블 및 스키마 설명
urls 테이블
용도: 방문한 URL과 관련된 정보를 저장합니다.
컬럼명 | 데이터 타입 | 설명 |
---|---|---|
id |
INTEGER | URL의 고유 ID (Primary Key). |
url |
TEXT | 방문한 URL. |
title |
TEXT | 페이지 제목. |
visit_count |
INTEGER | 방문 횟수. |
typed_count |
INTEGER | 사용자가 직접 URL을 입력한 횟수. |
last_visit_time |
INTEGER | 마지막 방문 시간 (FILETIME 형식). |
hidden |
INTEGER | 숨겨진 항목 여부 (1: 숨김). |
visits 테이블
용도: URL 방문과 관련된 세부 이력을 저장합니다. urls
테이블과 연결됩니다.
컬럼명 | 데이터 타입 | 설명 |
---|---|---|
id |
INTEGER | 방문 이력의 고유 ID (Primary Key). |
url |
INTEGER | 방문한 URL의 ID (urls.id 참조). |
visit_time |
INTEGER | 방문 시간 (FILETIME 형식). |
from_visit |
INTEGER | 이전 방문 ID (참조를 통해 방문 경로 확인). |
transition |
INTEGER | 방문 전환 타입 (예: 링크 클릭, 직접 입력). |
segment_id |
INTEGER | 세그먼트 ID (사용되지 않을 수 있음). |
visit_duration |
INTEGER | 페이지 체류 시간 (밀리초 단위). |
transition
값 예시
- 0: 링크 클릭을 통한 방문
- 1: 사용자가 URL 직접 입력
- 2: 북마크에서 방문
- 3: 리디렉션된 방문
downloads 테이블
용도: 파일 다운로드 이력을 저장합니다.
컬럼명 | 데이터 타입 | 설명 |
---|---|---|
id |
INTEGER | 다운로드 이력의 고유 ID. |
guid |
TEXT | 다운로드를 식별하기 위한 GUID. |
current_path |
TEXT | 현재 저장된 파일 경로. |
target_path |
TEXT | 다운로드 시 지정된 대상 파일 경로. |
start_time |
INTEGER | 다운로드 시작 시간 (FILETIME 형식). |
received_bytes |
INTEGER | 받은 바이트 수. |
total_bytes |
INTEGER | 총 파일 크기 (바이트 단위). |
downloads_url_chains 테이블
용도: 파일 다운로드와 관련된 URL 체인(이력)을 저장합니다. downloads
테이블과 연결됩니다.
컬럼명 | 데이터 타입 | 설명 |
---|---|---|
id |
INTEGER | 다운로드 ID (downloads.id 참조). |
chain_index |
INTEGER | URL 체인 순서 (0: 최종 다운로드 URL). |
url |
TEXT | 다운로드된 파일의 URL. |
keyword_search_terms 테이블
용도: 브라우저의 검색창에서 입력한 검색어를 저장합니다.
컬럼명 | 데이터 타입 | 설명 |
---|---|---|
id |
INTEGER | 검색어 이력의 고유 ID. |
keyword_id |
INTEGER | 검색 엔진의 ID. |
url_id |
INTEGER | 검색 결과 URL ID (urls.id 참조). |
term |
TEXT | 입력한 검색어. |
segments 테이블
용도: 방문 세그먼트 정보를 저장합니다. 특정 URL의 방문이 하나의 세그먼트로 그룹화됩니다.
컬럼명 | 데이터 타입 | 설명 |
---|---|---|
id |
INTEGER | 세그먼트의 고유 ID. |
name |
TEXT | 세그먼트의 이름. |
url_id |
INTEGER | 해당 세그먼트의 URL ID. |
visit_count |
INTEGER | 세그먼트에 해당하는 방문 횟수. |
History 파일 분석 시 참고 사항
- 시간 값 변환
크롬의 시간값은 Windows FILETIME 형식입니다. 이를 UTC 시간으로 변환하려면 다음 수식을 사용합니다.datetime((time_value / 1000000) - 11644473600, 'unixepoch')
- 데이터 삭제 주의
- 방문 기록 삭제 시
urls
,visits
,downloads
등의 테이블에서 관련 데이터가 삭제됩니다. - 삭제된 데이터는 복구하기 어렵기 때문에 백업 후 분석해야 합니다.
- 방문 기록 삭제 시
- 조인 분석
- 다운로드된 URL과 파일 경로 매칭:
downloads
와downloads_url_chains
테이블 조인. - 방문 기록 분석:
urls
와visits
테이블 조인.
- 다운로드된 URL과 파일 경로 매칭:
주요 테이블 간 관계
urls
↔visits
: 방문 URL과 방문 기록이 연결됩니다.downloads
↔downloads_url_chains
: 다운로드된 파일과 관련 URL이 연결됩니다.keyword_search_terms
↔urls
: 검색어와 검색 결과 URL이 연결됩니다.
이 정보는 크롬 히스토리를 분석하거나 포렌식 목적으로 사용될 수 있습니다. 필요에 따라 SQL 쿼리를 실행해 데이터를 확인하거나 CSV 등으로 내보낼 수 있습니다. 크롬 History
데이터베이스의 각 테이블별 용도는 다음과 같습니다.
1. urls 테이블
- 용도: 방문한 URL 정보 저장 (URL, 제목, 방문 횟수, 마지막 방문 시간 등).
2. visits 테이블
- 용도: URL 방문 이력 저장 (방문 시간, 이전 방문 경로, 전환 타입 등).
- 연결:
urls
테이블과url
ID로 연결됨.
3. downloads 테이블
- 용도: 파일 다운로드 이력 저장 (파일 경로, 시작 시간, 파일 크기 등).
4. downloads_url_chains 테이블
- 용도: 파일 다운로드와 관련된 URL 체인 저장 (다운로드된 파일의 URL).
5. keyword_search_terms 테이블
- 용도: 브라우저 검색창에서 입력한 검색어 이력 저장.
6. segments 테이블
- 용도: 방문한 URL들을 그룹화하여 세그먼트 단위로 저장 (세그먼트 이름, 방문 횟수 등).
이 용도에 따라 필요한 데이터를 조합해 방문 기록, 다운로드 이력 등을 분석할 수 있습니다. 여러 개의 History
SQLite 데이터베이스 파일이 있는 디렉토리에서 파일 목록을 읽고, 각 데이터베이스 파일에 대해 SQLite 쿼리를 실행한 후 결과를 취합하는 Python 코드입니다. 이 코드의 기능은 다음과 같습니다.
- 주어진 디렉토리에서 SQLite 데이터베이스 파일을 검색합니다.
- 각
History
파일에 대해 SQLite 쿼리를 실행합니다. - 결과를 취합하여 하나의 파일(CSV)로 저장합니다.
import os
import sqlite3
import pandas as pd
# 설정: 디렉토리 경로 및 쿼리
DIRECTORY_PATH = "./history_files" # History 파일들이 있는 디렉토리 경로
OUTPUT_FILE = "combined_results.csv" # 결과를 저장할 CSV 파일명
SQL_QUERY = """
SELECT
d.target_path AS '파일 경로',
u.url AS '다운로드 URL',
datetime((d.start_time/1000000) - 11644473600, 'unixepoch') AS '다운로드 시각'
FROM
downloads d
JOIN
downloads_url_chains u
ON
d.id = u.id
WHERE
u.chain_index = 0;
"""
# 데이터 수집용 리스트
combined_results = []
# 디렉토리 내 SQLite 파일 목록 확인
def get_sqlite_files(directory):
return [os.path.join(directory, f) for f in os.listdir(directory) if f.endswith(".db") or f.endswith(".sqlite") or f == "History"]
# SQLite 파일에 대해 쿼리 실행
def query_sqlite_file(file_path, query):
try:
conn = sqlite3.connect(file_path)
df = pd.read_sql_query(query, conn)
df['source_file'] = os.path.basename(file_path) # 파일명 추가
conn.close()
return df
except Exception as e:
print(f"Error reading {file_path}: {e}")
return None
# 메인 실행
def main():
# 1. SQLite 파일 목록 가져오기
sqlite_files = get_sqlite_files(DIRECTORY_PATH)
print(f"Found {len(sqlite_files)} SQLite files.")
# 2. 각 파일에 대해 쿼리 실행
for file in sqlite_files:
print(f"Processing file: {file}")
result = query_sqlite_file(file, SQL_QUERY)
if result is not None:
combined_results.append(result)
# 3. 결과 취합 및 CSV로 저장
if combined_results:
final_df = pd.concat(combined_results, ignore_index=True)
final_df.to_csv(OUTPUT_FILE, index=False, encoding='utf-8-sig')
print(f"Results saved to {OUTPUT_FILE}")
else:
print("No data to save.")
if __name__ == "__main__":
main()
- 디렉토리에서 파일 목록 가져오기
get_sqlite_files()
함수는.db
,.sqlite
, 또는History
파일만 필터링합니다.
- SQLite 쿼리 실행
query_sqlite_file()
함수는 SQLite 데이터베이스 파일에 접속하여SQL_QUERY
를 실행하고 결과를 DataFrame 형태로 반환합니다.- 결과에는 출처 파일명(
source_file
)이 추가되어, 어떤 데이터베이스에서 나온 결과인지 확인할 수 있습니다.
- 결과 취합
- 모든 파일의 쿼리 결과를 리스트에 저장한 뒤,
pandas.concat()
으로 하나의 데이터프레임으로 결합합니다.
- 모든 파일의 쿼리 결과를 리스트에 저장한 뒤,
- CSV로 저장
- 최종 결과는
combined_results.csv
라는 파일로 저장됩니다.
- 최종 결과는
실행 방법
- 위 코드를
.py
파일로 저장합니다. (예:query_history_files.py
) - Python 환경에 pandas가 설치되어 있어야 합니다.
pip install pandas
- 코드 실행
python query_history_files.py
출력 결과
- 결과는
combined_results.csv
파일로 저장됩니다. - 컬럼 예시
파일 경로 다운로드 URL 다운로드 시각 source_file C:\Downloads\example.pdf https://example.com/file.pdf 2024-06-17 12:30:45 History_PC1.db C:\Files\test.zip https://example.com/test.zip 2024-06-17 13:00:12 History_PC2.db
여러 크롬 History 파일의 다운로드 이력을 한 번에 조회하고 취합할 수 있습니다. 크롬 History
DB 파일에서 SQLite 데이터를 추출하고 이를 Google Sheets에 업데이트하는 방법은 다음과 같은 단계로 나뉩니다.
1. SQLite 데이터 추출
History
파일의 다운로드 URL과 파일 경로를 추출하는 SQL 쿼리를 사용합니다.
SQL 쿼리 예시
SELECT
d.target_path AS "파일 경로",
u.url AS "다운로드 URL",
datetime((d.start_time/1000000) - 11644473600, 'unixepoch') AS "다운로드 시각"
FROM
downloads d
JOIN
downloads_url_chains u
ON
d.id = u.id
WHERE
u.chain_index = 0;
위 쿼리는 다운로드된 파일의 경로, URL, 시간 정보를 가져옵니다.
2. Google Sheets API 설정
- Google Cloud Console에서 프로젝트 생성
- Google Cloud Console에 접속.
- 새 프로젝트를 생성한 후 Google Sheets API를 활성화합니다.
- 서비스 계정 생성
- API 및 서비스 > 사용자 인증 정보에서 서비스 계정을 생성합니다.
- 서비스 계정을 생성한 후 키를 추가하여 JSON 키 파일을 다운로드합니다.
- Google Sheets에 서비스 계정 추가
- Google Sheets를 생성한 후 공유 버튼을 눌러 서비스 계정의 이메일 주소를 추가하고 편집 권한을 부여합니다.
3. Python 코드 작성
Google Sheets API와 SQLite 처리를 위해 다음 패키지를 설치합니다.
pip install google-api-python-client google-auth-httplib2 google-auth-oauthlib pandas
Python 코드
import os
import sqlite3
import pandas as pd
from googleapiclient.discovery import build
from google.oauth2.service_account import Credentials
# 설정: SQLite 파일 경로, Google Sheets ID, 시트 이름
SQLITE_FILE_PATH = "./History" # 크롬 History 파일 경로
SPREADSHEET_ID = "your_google_sheet_id_here" # Google Sheets ID
SHEET_NAME = "Sheet1" # 업데이트할 시트 이름
# SQL 쿼리
SQL_QUERY = """
SELECT
d.target_path AS "파일 경로",
u.url AS "다운로드 URL",
datetime((d.start_time/1000000) - 11644473600, 'unixepoch') AS "다운로드 시각"
FROM
downloads d
JOIN
downloads_url_chains u
ON
d.id = u.id
WHERE
u.chain_index = 0;
"""
# Google Sheets API 초기화
def init_google_sheets():
creds = Credentials.from_service_account_file(
"path_to_your_service_account.json", # 서비스 계정 JSON 파일 경로
scopes=["https://www.googleapis.com/auth/spreadsheets"]
)
service = build("sheets", "v4", credentials=creds)
return service
# SQLite 데이터 추출
def extract_data_from_sqlite(file_path, query):
conn = sqlite3.connect(file_path)
df = pd.read_sql_query(query, conn)
conn.close()
return df
# Google Sheets에 데이터 업데이트
def update_google_sheets(service, spreadsheet_id, sheet_name, data):
# Google Sheets API로 데이터 전송 형식 준비
body = {
"values": [data.columns.tolist()] + data.values.tolist() # 컬럼명 + 데이터
}
service.spreadsheets().values().update(
spreadsheetId=spreadsheet_id,
range=f"{sheet_name}!A1", # 시작 셀
valueInputOption="RAW", # RAW 데이터로 입력
body=body
).execute()
# 메인 실행
def main():
# SQLite 데이터 추출
print("Extracting data from SQLite...")
data = extract_data_from_sqlite(SQLITE_FILE_PATH, SQL_QUERY)
# Google Sheets API 초기화
print("Initializing Google Sheets API...")
service = init_google_sheets()
# Google Sheets에 데이터 업데이트
print(f"Updating data to Google Sheets: {SPREADSHEET_ID}")
update_google_sheets(service, SPREADSHEET_ID, SHEET_NAME, data)
print("Data successfully updated.")
if __name__ == "__main__":
main()
코드 주요 설명
- SQLite 데이터 추출:
extract_data_from_sqlite()
함수는 크롬의History
DB에서 데이터를 읽고 pandas DataFrame으로 반환합니다. - Google Sheets API 초기화: 서비스 계정의 JSON 키를 사용하여 API를 인증합니다.
- Google Sheets 업데이트: DataFrame의 데이터를 Google Sheets에 업데이트합니다.
valueInputOption="RAW"
: 데이터를 원본 그대로 입력합니다.- 시작 셀은
A1
로 설정되어 있습니다.
4. 실행 방법
- 코드를
.py
파일로 저장합니다. (예:update_google_sheets.py
) - Python 파일을 실행합니다:
python update_google_sheets.py
결과
- Google Sheets에 데이터가 다음 형식으로 업데이트됩니다.
파일 경로 | 다운로드 URL | 다운로드 시각 |
---|---|---|
C:\Downloads\example.pdf | https://example.com/file.pdf | 2024-06-17 12:30:45 |
C:\Files\test.zip | https://example.com/test.zip | 2024-06-17 13:00:12 |
- 여러 DB 파일 처리
디렉토리에서 모든History
파일을 반복 처리하려면 이전 답변의 파일 목록 읽기 로직을 추가하세요. - 자동화
스크립트를cron
또는 Windows Task Scheduler에 등록하여 주기적으로 실행할 수 있습니다. - 결과 병합
여러 PC에서 가져온 데이터를 Google Sheets에 병합하려면 DataFrame을 활용해 처리 후 업데이트하면 됩니다.
댓글