Witcher 3 크래시 트러블슈팅

260215-wrapup-witcher3-crash-1771384439944.webp

Context

위쳐3 실행 시 "graphics driver is out of date" 경고 + REDlauncher 크래시 반복. 듀얼 GPU 노트북(NVIDIA RTX 3050 + Intel UHD)에서 발생. 근본 원인은 교보문고 전자책 뷰어가 설치한 Fasoo DRM의 DLL 주입이었다.

Attempts

  1. NVIDIA 드라이버 업데이트 (591.86) → ❌ 경고 및 크래시 동일
  2. Windows GPU 선호도 레지스트리 설정 (NVIDIA 강제) → ❌ 효과 없음
  3. Steam 게임 파일 무결성 검증 → 파일 1개 복구됐으나 ❌ 크래시 지속
  4. REDlauncher 삭제 후 재설치 → ❌ 동일 크래시
  5. --launcher-skip Steam 시작 옵션 → ❌ 효과 없음
  6. witcher3.exe 직접 실행 (DX11) → ❌ exit code 0으로 즉시 종료
  7. 게임 완전 삭제 + 재설치 (61GB) → ❌ 크래시 지속
  8. DDU로 NVIDIA 드라이버 완전 제거 후 클린 설치 → ❌ 크래시 지속
  9. -dx11 시작 옵션 → ❌ 런처에서 크래시
  10. REDprelauncher.exe를 witcher3.exe로 교체 → ❌ Steam이 무시
  11. NVIDIA 제어판에서 프로그램별 GPU 강제 지정 → ❌ 런처는 여전히 Intel로 실행
  12. Windows 10 호환 모드 + 관리자 권한 → ❌ 효과 없음
  13. Windows Defender 제외 폴더 추가 → ❌ 효과 없음
  14. Intel UHD Graphics 드라이버 업데이트 → ✅ 런처 경고 해결, 하지만 게임 크래시는 별개
  15. Enable mods 끄기 → ❌ 효과 없음
  16. DX12 모드로 전환 → 부분적 진전 (검정 화면까지 진행 후 크래시 — GPU 타임아웃)
  17. TDR 타임아웃 증가 → 미시도 (시스템 레지스트리 변경 — 증상 우회일 뿐)
  18. Windows Update KB5077181 설치 시도 → ❌ .msu 수동 설치 실패 + Windows Update도 0x800f0983 에러. 원인: Windows 11 24H2부터 도입된 checkpoint cumulative update 의존성 문제 — 단독 .msu로는 의존성 체인 해결 불가
  19. DISM으로 KB5077181 설치 → ❌ 실패 (0x800f0983). 같은 폴더에 checkpoint + target 놓아도 CBS staging 73%에서 실패
  20. "Fix problems using Windows Update" (Settings → Recovery) → ✅ KB5077181 설치 성공 (빌드 26200.7840). 단, Windows 복구 과정에서 Intel 드라이버가 이전 버전(32.0.101.6874)으로 롤백됨
  21. 위쳐3 재테스트 → ❌ Intel 드라이버 롤백으로 런처 경고 재발 + DX12 크래시 지속
  22. Intel 드라이버 재업데이트 + DX12 재테스트 → ❌ 런처 경고는 해결됐으나 DX12 검정 화면 후 크래시, DX11 즉시 크래시. KB5077181 적용 상태에서도 동일
  23. 크래시 덤프 분석 (minidump) → ✅ 근본 원인 발견: f_sps.dll (Fasoo DRM)이 게임 프로세스에 DLL 주입 → 0xc0000005 ACCESS_VIOLATION 유발. 크래시 주소 0x61002451f_sps.dll 내부 (base 0x61000000 + offset 0x2451)
  24. 교보eBook + Fasoo DRM 삭제 → ✅ 교보eBook 삭제 → Fasoo DRM MSI 강제 삭제 (msiexec /x {EF17B119-...}) → 잔여 폴더 takeown 후 삭제 → 재부팅 → 게임 정상 실행 확인

Solution

세 가지 별개 문제가 있었음:

  1. 런처 경고/크래시 → ✅ Intel UHD 드라이버 업데이트로 해결
  2. 게임 자체 크래시 (ACCESS_VIOLATION) → ✅ Fasoo DRM의 DLL 주입이 근본 원인. 크래시 덤프 분석으로 f_sps.dll(Fasoo DRM)이 게임 프로세스 내에서 0xc0000005를 일으키는 것 확인. KB5077181(Windows Update)은 별개 이슈였음 — GPU 타임아웃 자체는 Fasoo DRM이 게임의 GPU 초기화를 방해하여 발생한 2차 증상으로 추정
  3. KB5077181 설치 실패 → ✅ Settings → Recovery → "Fix problems using Windows Update"로 해결

Fasoo DRM 상세 분석

260215-wrapup-witcher3-crash-1771384214459.webp

Fasoo DRM이란

Fasoo는 한국의 문서보안(DRM) 전문 기업. 주로 기업/기관에서 문서 유출을 방지하기 위해 사용하지만, 교보문고 전자책 뷰어에도 DRM 클라이언트가 번들로 포함되어 있다. 이 시스템에는 교보eBook 설치 시 함께 설치됨.

설치 경로 및 시점

프로그램 설치일 경로
Fasoo DRM Client for Kyobo Book Wix 2025-10-14 C:\Program Files\Fasoo DRM\ + C:\Program Files (x86)\Fasoo DRM\
교보eBook 2026-02-07 InstallShield 기반 설치

Fasoo DRM은 교보eBook 데스크톱 앱(e서재) 설치 시 번들로 함께 설치된다 (직접 재설치해서 확인). 웹 "바로보기"는 브라우저 기반이라 Fasoo DRM을 설치하지 않음. 2025-10-14 설치는 이전에 e서재를 설치했던 것으로 추정 (정확한 경위 불명).

DLL 주입 메커니즘

Fasoo DRM의 f_sps.dll(1.9MB)이 시스템의 모든 프로세스에 주입되는 과정:

  1. Windows 부팅 시 Fasoo Process Service (f_LPS.exe)와 Fasoo Logsvc (f_logsvc.exe)가 자동 시작 (StartMode: Auto)
  2. f_LPS.exe가 시스템의 프로세스들을 모니터링하며, 새로 실행되는 프로세스에 f_sps.dll을 주입
  3. 주입 방식: AppInit_DLLs 레지스트리는 사용하지 않음 (확인 결과 비활성). Windows API(CreateRemoteThread 등)를 통한 런타임 프로세스 인젝션으로 추정
  4. 주입된 DLL은 화면 캡처, 클립보드 복사, 파일 접근 등을 감시하여 전자책 콘텐츠의 무단 복제를 차단

왜 게임이 크래시되는가

  • f_sps.dll은 프로세스가 게임인지 전자책 뷰어인지 구분하지 않고 모든 프로세스에 주입됨
  • 위쳐3는 GPU 메모리를 대량 할당하고, 렌더링 파이프라인에서 메모리를 집중적으로 읽고 씀
  • Fasoo DLL이 이 과정에서 게임 프로세스와 충돌하여 ACCESS_VIOLATION (0xc0000005) 발생 (정확한 충돌 메커니즘은 불명 — DLL 내부 코드에서 잘못된 메모리 접근이 일어난 것만 확인)
  • DX11에서는 즉시 크래시, DX12에서는 GPU 초기화 단계까지 진행 후 검정 화면 → 크래시 (GPU 타임아웃으로 오인하기 쉬운 증상)

크래시 덤프 분석 방법

위쳐3 크래시 리포트 경로: %LOCALAPPDATA%\REDEngine\ReportQueue\Witcher3_YYYYMMDD_HHmmssSSS\

각 리포트 폴더에는 다음 파일이 포함됨:

파일 내용
Witcher3.dmp Windows minidump — 크래시 시점의 스레드, 모듈, 예외 정보 포함
sysinfo.json 시스템 정보 (CPU, GPU, 드라이버 버전, RAM, 디스크)
version.txt 게임 빌드 번호
integrity.json 파일 체크섬

minidump 파일은 바이너리 형식이지만, Python struct 모듈로 직접 파싱 가능:

  1. MINIDUMP_HEADER (offset 0): 시그니처(MDMP), 스트림 수, 스트림 디렉토리 위치
  2. ExceptionStream (type 6): 예외 코드(0xc0000005), 크래시 주소(0x61002451), 스레드 ID
  3. ModuleListStream (type 4): 로드된 모든 DLL/EXE의 base address + size → 크래시 주소가 어느 모듈 범위에 속하는지 대조하면 크래시 원인 모듈 특정 가능

이 분석으로 152개 로드된 모듈 중 크래시 주소가 f_sps.dll (base 0x61000000, size 1,941,504 bytes) 범위 내에 있음을 확인.

재현 테스트 (2026-02-18)

Fasoo DRM 설치 경로 확인을 위해 교보eBook을 재설치 → Fasoo DRM Client 번들 설치 확인 → 위쳐3 실행 → 동일 크래시 재현.

크래시 리포트: Witcher3_20260218_031259804

항목
Exception Code 0xc0000005 (ACCESS_VIOLATION)
Crash Address 0x61002451
Crash Module Base 0x61000000
Module Size 1,941,504 bytes (1.9 MB)
Module File Version 1.0.2.8
Module Product Version 3.61.2.8
Module Timestamp 2024-02-28
로드된 모듈 수 156개

크래시 모듈 = f_sps.dll 확정 근거 (모듈 이름은 덤프 파일 범위 밖이라 직접 읽을 수 없었으나, 메타데이터로 특정):

  1. Base Address 일치: 덤프 속 크래시 모듈 base 0x61000000 = 이전 크래시(#23)와 동일
  2. Size 일치: 덤프 속 1,941,504 bytes ≈ 시스템의 f_sps.dll (64bit: 1,927,616 bytes, 32bit: 1,882,048 bytes)
  3. Timestamp 일치: 덤프 속 2024-02-28 21:57:38 = 시스템의 f_sps.dll LastWriteTime 2024-02-29 (UTC 시간대 차이)
  4. Version: File Version 1.0.2.8, Product Version 3.61.2.8 — Fasoo DRM 제품 버전 체계
  5. 크래시 오프셋 동일: 0x2451 — 이전 크래시와 정확히 같은 코드 위치에서 충돌

해결

교보eBook과 Fasoo DRM Client 두 프로그램 모두 삭제. 전자책은 모바일(태블릿/폰)에서 읽으면 됨.

참고 소스:

NVIDIA / Windows Update:

Fasoo DRM:

nProtect GameGuard (전역 DLL 주입 근거):

Minidump 포맷:

Insights

  • 크래시 덤프(minidump)를 먼저 분석할 것: 22번의 시행착오 끝에 .dmp 파일의 ExceptionStream + ModuleList를 파싱하여 크래시 모듈(f_sps.dll)을 10분 만에 특정. Python struct 모듈로 MINIDUMP_HEADER를 직접 파싱 가능. 드라이버/Windows Update 같은 외부 요인을 의심하기 전에, 크래시 보고서가 있으면 그것부터 읽어야 했음
  • 한국산 DRM/보안 소프트웨어의 공격적 DLL 주입: Fasoo DRM이나 nProtect GameGuard처럼 시스템의 모든 프로세스에 DLL을 주입하는 한국산 소프트웨어가 있음. 이것이 게임과 충돌하면 ACCESS_VIOLATION(0xc0000005)을 일으킴. 증상이 GPU 드라이버 문제와 동일하게 보여서 오진하기 쉬움. 게임 크래시 시 minidump의 크래시 모듈부터 확인하면 서드파티 DLL 주입 여부를 즉시 판별 가능
  • 부수적으로 설치되는 소프트웨어 주의: 교보문고 전자책 하나 읽으려고 설치한 DRM이 시스템 전체에 영향. 한국 사이트에서 ActiveX/프로그램 설치를 요구할 때 어떤 서비스가 함께 설치되는지 주의 필요
  • 첫 번째 에러 메시지를 무시하지 말 것: "Intel 드라이버 업데이트하라"는 게임의 원래 안내가 정확한 진단이었음. "게임이니까 NVIDIA 문제겠지"라는 가정이 12번의 삽질을 만듦
  • 듀얼 GPU 노트북의 함정: 게임 런처 같은 일반 앱은 NVIDIA가 아닌 Intel 내장 GPU로 실행됨. NVIDIA 드라이버를 아무리 바꿔도 런처 크래시는 해결 불가
  • REDlauncher = Chromium 기반: GPU 가속 UI를 사용하므로 그래픽 드라이버 영향을 직접 받음
  • Event Viewer 크래시 로그 활용: Faulting application name으로 실제 크래시 주체(REDlauncher vs witcher3)를 구분할 수 있었음
  • DDU (Display Driver Uninstaller): 드라이버 클린 설치 시 유용한 도구. Safe Mode 진입은 사용자가 수동으로 선택해야 하지만, 드라이버 제거 후 자동 재부팅("Clean and restart")을 지원
  • Windows Update .msu 수동 설치 실패 시: Windows 11 24H2부터 checkpoint cumulative update 방식 도입. 단독 .msu는 의존성 해결 불가. 공식 권장 방법은 같은 폴더에 checkpoint + target .msu를 놓고 DISM /Online /Add-Package로 설치하는 것이지만, 본 사례에서는 CBS staging 73%에서 실패(Step 19). 최종적으로 Settings → Recovery → "Fix problems using Windows Update"로 해결됨. checkpoint 의존성 전용 에러코드는 0x800f0838이며, 본 사례에서 발생한 0x800f0983은 일반적인 CBS(Component-Based Servicing) 에러
  • DISM (Deployment Image Servicing and Management): Windows 이미지(설치/업데이트/드라이버)를 관리하는 CLI 도구. Windows Update가 실패할 때 수동으로 패키지를 설치하거나 시스템 이미지를 복구하는 데 사용. 관리자 권한 PowerShell에서 실행 필요

Postmortem: 왜 22번이나 걸렸는가

타임라인 — 더 빨리 발견할 수 있었던 시점들

시점 일어난 일 놓친 것
#1 (첫 크래시) 크래시 리포트 폴더 생성됨 (ReportQueue/) .dmp 파일이 존재했으나 sysinfo.json만 읽음. minidump를 파싱했으면 즉시 f_sps.dll 발견
#7 (게임 완전 재설치) 61GB 재설치 후에도 크래시 게임 파일 문제가 아님이 확정됨. 이 시점에서 "게임 외부 요인"으로 시선을 돌렸어야 함
#8 (DDU 클린 설치) NVIDIA 드라이버 완전 제거 후 클린 설치해도 크래시 드라이버 문제가 아닐 가능성이 높아짐. 그런데도 계속 드라이버 쪽을 팜
#14 (Intel 드라이버) Intel 업데이트로 런처 경고는 해결 런처 문제 ≠ 게임 크래시가 확인된 시점. 두 문제를 분리해서 게임 크래시만 집중 분석했어야 함
#16 (DX12 부분 진전) 검정 화면까지 진행 후 크래시 GPU 타임아웃으로 해석했으나, 실제로는 Fasoo DLL이 GPU 초기화 과정에서 충돌한 것. 이때 .dmp를 봤으면 발견 가능
#18~20 (KB5077181) Windows Update에 6시간+ 소모 웹 검색에서 "KB5074109이 NVIDIA 크래시 유발"을 발견하고, 이것이 우리 문제라고 확신함. 확증 편향
#22 (모든 것 적용 후) KB5077181 + Intel 드라이버 + DDU 전부 적용해도 크래시 드라이버/OS 가설이 완전히 기각된 시점. 드디어 .dmp 파일을 분석
#23 (덤프 분석) 10분 만에 f_sps.dll 특정

근본 원인 분석 (5 Whys)

왜 22번이나 시도한 뒤에야 덤프를 분석했는가?

  1. 진단 전에 해결을 시도했다 — 크래시의 원인 모듈을 특정하기 전에, "아마 드라이버 문제겠지"라는 가정으로 바로 해결책을 적용하기 시작함. 의사가 검사 없이 처방한 격
  2. .dmp 파일을 읽을 수 없다고 가정했다 — minidump = WinDbg 같은 전문 도구가 필요하다는 선입견. 실제로는 Python struct로 핵심 정보(ExceptionStream + ModuleList)를 파싱하는 데 10분이면 충분
  3. 증상이 GPU 드라이버 문제와 동일했다 — 검정 화면 → 크래시, TDR 타임아웃, 0xc0000005. 이 증상 패턴은 GPU 드라이버 문제에서 흔히 보이므로, "드라이버 문제"라는 가설에 확신을 가짐
  4. 웹 검색이 확증 편향을 강화했다 — KB5074109 NVIDIA 크래시 이슈를 발견한 뒤, 우리 문제도 같은 원인이라고 확신. 6시간을 KB5077181 설치에 소모
  5. 서드파티 DLL 주입이라는 가능성을 고려하지 않았다 — "교보문고 전자책 DRM이 게임을 크래시시킬 수 있다"는 생각 자체를 하지 못함. 게임과 전혀 관련 없어 보이는 소프트웨어가 원인이라는 발상의 전환이 없었음

인지 편향 분석

편향 발현 결과
Anchoring (닻 내림) 첫 에러 "graphics driver out of date"에 고착 22번의 시도가 전부 드라이버/OS 프레임 안에서만 이루어짐
Confirmation bias (확증) "KB5074109이 NVIDIA 크래시 유발" 기사 발견 → 우리 문제라 확신 KB5077181 설치에 6시간+ 소모. 가설을 반증할 크래시 덤프 분석은 건너뜀
Einstellung effect (고착) "크래시 → 드라이버 업데이트"라는 익숙한 패턴에 고착 같은 카테고리(드라이버, OS 업데이트)의 시도만 반복. 전혀 다른 접근을 22번째까지 시도하지 않음
Availability heuristic (가용성) "게임 크래시 = GPU 문제"는 가장 흔하고 떠올리기 쉬운 원인 "전자책 DRM이 게임을 죽인다"는 비흔한 원인을 고려 대상에서 배제
Sunk cost (매몰 비용) 드라이버 쪽에 이미 많은 시간 투자 "여기서 조금만 더" 반복. 방향 전환 타이밍을 계속 놓침
Tool bias (도구) .dmp = WinDbg 전용이라는 선입견 Python으로 10분 만에 파싱 가능했는데, 시도 자체를 안 함

앞으로의 원칙

게임/앱 크래시 트러블슈팅 프로토콜:

  1. 1단계: 진단 (해결 시도 전에 반드시)
    • 크래시 덤프(.dmp)가 있으면 즉시 파싱 → 크래시 모듈 특정
    • Event Viewer에서 Faulting module name 확인
    • 로드된 모듈 중 서드파티 DLL 존재 여부 확인
  2. 2단계: 가설 수립
    • 크래시 모듈이 게임 자체인지, 드라이버인지, 서드파티인지에 따라 방향 결정
    • 서드파티 DLL이 발견되면 → 해당 소프트웨어 비활성화 후 테스트
  3. 3단계: 해결 시도
    • 한 번에 하나씩 변경, 각 시도 후 테스트
    • 3회 연속 실패 시 → 1단계로 돌아가 진단 재검토

Cleanup Checklist

  • [x] 호환 모드 + 관리자 권한 레지스트리 제거 (REDlauncher, witcher3.exe x2)
  • [x] Steam 시작 옵션 비어있는지 확인
  • [x] REDprelauncher.exe 원복 (완료)
  • [x] Windows Defender 제외 폴더 원복 (완료)
  • [x] 교보eBook 삭제 (Settings → Apps)
  • [x] Fasoo DRM Client for Kyobo Book Wix 삭제 (MSI 강제 삭제 — UninstallString 미등록)
  • [x] C:\Program Files\Fasoo DRM\ 폴더 삭제 (takeown 후 삭제)
  • [x] C:\Program Files (x86)\Fasoo DRM\ 폴더 삭제 (takeown 후 삭제)
  • [x] Fasoo 서비스 완전 제거 확인
  • [x] 위쳐3 정상 실행 최종 테스트 ✅

유지해도 좋은 것:

  • NVIDIA 드라이버 591.86 (DDU 클린 설치) — 최신 상태
  • Intel UHD 드라이버 32.0.101.7084 — 런처 경고 해결
  • KB5077181 (빌드 26200.7840) — NVIDIA GPU 버그 패치
  • NVIDIA 제어판 위쳐3 → 고성능 GPU 설정 — 게임 성능에 도움
  • GPU 선호도 레지스트리 — 무해