본문 바로가기
프로그램 (PHP,Python)

크롬 브라우저에서 파일 다운로드 이력을 확인하는 방법

by 날으는물고기 2025. 2. 21.

크롬 브라우저에서 파일 다운로드 이력을 확인하는 방법

크롬 브라우저에서 파일 다운로드 이력을 확인하는 방법은 여러 가지가 있습니다. 브라우저 자체의 기능을 활용하거나, 로컬 저장소 파일을 분석하는 방법이 있습니다.

크롬 브라우저 내 다운로드 기록 확인

크롬 브라우저의 내장 기능을 사용하여 가장 간단하게 다운로드 이력을 확인할 수 있습니다.

방법

  1. 단축키 사용
    • Windows/Linux: Ctrl + J
    • Mac: Command + Option + J
  2. 설정 메뉴 접근
    • 크롬 브라우저를 실행하고 우측 상단 메뉴 (⋮) 클릭 → 다운로드 메뉴를 선택합니다.
  3. 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

분석 방법

  1. SQLite 뷰어 설치
    다운로드 이력을 보려면 SQLite 데이터베이스 뷰어를 사용해야 합니다.
    • 예: DB Browser for SQLite 또는 sqlite3 명령어 사용.
  2. History 파일 열기
    크롬 브라우저가 실행 중일 때는 해당 파일에 접근할 수 없으므로 브라우저를 종료하고 분석하세요.
  3. SQL 명령어 예시
    downloads 테이블에서 데이터를 확인합니다.
    SELECT 
        target_path, 
        total_bytes, 
        start_time 
    FROM 
        downloads;
    • target_path: 다운로드된 파일의 경로
    • total_bytes: 파일 크기
    • start_time: 다운로드 시작 시각

이벤트 뷰어를 통한 다운로드 이력 확인 (Windows)

Windows에서는 이벤트 뷰어를 통해 파일 생성 및 다운로드 기록을 추적할 수 있습니다.

방법

  1. 이벤트 뷰어 실행
    • Win + Reventvwr 입력 후 엔터.
  2. 로그 확인
    • 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: 고유 ID
    • target_path: 파일 저장 경로
    • start_time: 다운로드 시작 시간
  • downloads_url_chains 테이블: 다운로드 URL 정보가 저장됨.
    • id: downloads 테이블과 연결할 수 있는 ID
    • chain_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.iddownloads 테이블과 downloads_url_chains 테이블을 연결합니다.
  • chain_index = 0은 최종 다운로드 URL을 의미합니다.
  • datetime() 함수는 크롬의 start_time 값(Windows FILETIME 형식)을 사람이 읽을 수 있는 UTC 시간으로 변환합니다.

분석 방법

  1. SQLite 뷰어 사용
    • DB Browser for SQLite: GUI 기반 도구로 History 파일을 열고 쿼리를 실행할 수 있습니다.
    • sqlite3 명령어를 터미널에서 실행.
  2. 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;
  3. 결과 확인
    결과에는 파일 경로, 다운로드 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 파일 분석 시 참고 사항

  1. 시간 값 변환
    크롬의 시간값은 Windows FILETIME 형식입니다. 이를 UTC 시간으로 변환하려면 다음 수식을 사용합니다.
    datetime((time_value / 1000000) - 11644473600, 'unixepoch')
  2. 데이터 삭제 주의
    • 방문 기록 삭제 시 urls, visits, downloads 등의 테이블에서 관련 데이터가 삭제됩니다.
    • 삭제된 데이터는 복구하기 어렵기 때문에 백업 후 분석해야 합니다.
  3. 조인 분석
    • 다운로드된 URL과 파일 경로 매칭: downloadsdownloads_url_chains 테이블 조인.
    • 방문 기록 분석: urlsvisits 테이블 조인.

주요 테이블 간 관계

  • urlsvisits: 방문 URL과 방문 기록이 연결됩니다.
  • downloadsdownloads_url_chains: 다운로드된 파일과 관련 URL이 연결됩니다.
  • keyword_search_termsurls: 검색어와 검색 결과 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 코드입니다. 이 코드의 기능은 다음과 같습니다.

  1. 주어진 디렉토리에서 SQLite 데이터베이스 파일을 검색합니다.
  2. History 파일에 대해 SQLite 쿼리를 실행합니다.
  3. 결과를 취합하여 하나의 파일(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()
  1. 디렉토리에서 파일 목록 가져오기
    • get_sqlite_files() 함수는 .db, .sqlite, 또는 History 파일만 필터링합니다.
  2. SQLite 쿼리 실행
    • query_sqlite_file() 함수는 SQLite 데이터베이스 파일에 접속하여 SQL_QUERY를 실행하고 결과를 DataFrame 형태로 반환합니다.
    • 결과에는 출처 파일명(source_file)이 추가되어, 어떤 데이터베이스에서 나온 결과인지 확인할 수 있습니다.
  3. 결과 취합
    • 모든 파일의 쿼리 결과를 리스트에 저장한 뒤, pandas.concat()으로 하나의 데이터프레임으로 결합합니다.
  4. CSV로 저장
    • 최종 결과는 combined_results.csv라는 파일로 저장됩니다.

실행 방법

  1. 위 코드를 .py 파일로 저장합니다. (예: query_history_files.py)
  2. Python 환경에 pandas가 설치되어 있어야 합니다.
    pip install pandas
  3. 코드 실행
    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 설정

  1. Google Cloud Console에서 프로젝트 생성
    • Google Cloud Console에 접속.
    • 새 프로젝트를 생성한 후 Google Sheets API를 활성화합니다.
  2. 서비스 계정 생성
    • API 및 서비스 > 사용자 인증 정보에서 서비스 계정을 생성합니다.
    • 서비스 계정을 생성한 후 를 추가하여 JSON 키 파일을 다운로드합니다.
  3. 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()

코드 주요 설명

  1. SQLite 데이터 추출: extract_data_from_sqlite() 함수는 크롬의 History DB에서 데이터를 읽고 pandas DataFrame으로 반환합니다.
  2. Google Sheets API 초기화: 서비스 계정의 JSON 키를 사용하여 API를 인증합니다.
  3. Google Sheets 업데이트: DataFrame의 데이터를 Google Sheets에 업데이트합니다.
    • valueInputOption="RAW": 데이터를 원본 그대로 입력합니다.
    • 시작 셀은 A1로 설정되어 있습니다.

4. 실행 방법

  1. 코드를 .py 파일로 저장합니다. (예: update_google_sheets.py)
  2. 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
  1. 여러 DB 파일 처리
    디렉토리에서 모든 History 파일을 반복 처리하려면 이전 답변의 파일 목록 읽기 로직을 추가하세요.
  2. 자동화
    스크립트를 cron 또는 Windows Task Scheduler에 등록하여 주기적으로 실행할 수 있습니다.
  3. 결과 병합
    여러 PC에서 가져온 데이터를 Google Sheets에 병합하려면 DataFrame을 활용해 처리 후 업데이트하면 됩니다.
728x90

댓글