BurningTimesAi/프로젝트/수상한잡화점/개발/05_서버연동_현황_v1.md

114 lines
5.3 KiB
Markdown
Raw Normal View History

# 서버 연동 현황 분석 — 수상한 잡화점
> **작성일**: 2026-04-14
> **조사 범위**: PlayFab, Firebase, IAP, ACTk, 클라이언트-서버 권한 분배
> **목적**: C11(개발자 관점) 보안·안정성 점검
>
> ⚠️ **Critical 3건 보류 중 (2026-04-14 PD님 지시)**
> 서버 파트가 정비되기 전이므로 아래 "Critical 보안 이슈" 3건은 **일시 보류**.
> 서버팀 정식 가동 후 **반드시 재기동하여 해결**해야 하는 블로커급 이슈임을 명시.
> 메모리: `project_shop_security_pending.md`
---
## 요약
| 항목 | 상태 |
|------|------|
| **주 백엔드** | PlayFab (`Assets/Script/Server/ServerInfo.cs` 허브) |
| **Firebase** | 초기화 코드만, `google-services.json` 부재 → **비활성** |
| **전투 연산 권한** | 🔴 **100% 클라이언트** |
| **AES 키 하드코딩** | 🔴 **소스에 평문 존재** |
| **IAP 영수증 검증** | 🔴 **주석처리되어 미구현** |
| **ACTk 적용 범위** | 🟡 필드 약 10개만 `Obscured*` |
| **SpeedHack/TimeCheck Detector** | ❌ 미사용 |
| **C11 보안 판정** | 🔴 **중대 보완 필요** |
## 백엔드 구성
### PlayFab
- **허브**: `Assets/Script/Server/ServerInfo.cs` (싱글톤, `DontDestroyOnLoad`)
- **주요 기능**:
- 로그인 (디바이스 ID 기반)
- `LoginResult`, `ServerData`, `ServerTime` 관리
- **12시간마다 자동 재로그인** (세션 유지)
- `ServerClass.cs``FC_*` / `SC_*` 구조로 요청·응답 래핑
- **SOT 역할**: 플레이어 계정, 프로그레션 저장, 메일, 재시작 데이터
### Firebase
- 초기화 코드 파편만 존재
- `google-services.json` 없음 → Analytics / Crashlytics 모두 **미동작**
- Package manifest에 Firebase 선언 없음
## 🔴 Critical 보안 이슈
### 1. 전투 데미지 연산이 100% 클라이언트
- `Actor.cs`, `PCActor.cs`, `MobActor.cs`에서 HP/Shield/Buff 전부 클라 계산
- 서버는 **결과만 받음** → 클라 변조 시 서버 검증 불가
- **영향**: 랭킹·이벤트 보상 악용 가능, 출시 전 서버 재연산 구조 필수
### 2. AES 암호화 키 하드코딩
- `Assets/Script/My/CryptoUtil.cs` (추정)에 평문 키 존재
- Key: `7gT9KfL2xQ1bN4pV6sH8jD3zW0cR5mYq` (32byte)
- IV: `aB3dE6gH9jK2mP5Q` (16byte)
- IL2CPP 빌드도 메모리 덤프로 추출 가능 → 사실상 무의미
- **영향**: 데이터 변조 방어선 상실
### 3. IAP 영수증 검증 미구현
- 영수증 서버 검증 코드가 **전부 주석처리**
- 클라이언트만 IAP 성공 판단 후 재화 지급 → **결제 우회 가능**
- **영향**: 매출 직접 손실, 오픈 블로커급
## 🟡 보안 보완 현황
### ACTk (AntiCheatToolkit)
- 적용 범위: `ObscuredInt` / `ObscuredLong` 필드 약 10개
- 미사용 기능:
- `SpeedHackDetector` (시간가속 탐지)
- `TimeCheckDetector` (디바이스 시간조작 탐지)
- `WallHackDetector`
- **개선 방향**: 전투 스탯·재화·레벨 전면 `Obscured*` 적용, Detector 활성화
### 서버 권한 vs 클라이언트 권한 분배
| 영역 | 권한 | 위험도 |
|------|------|--------|
| 로그인/세션 | 서버 (PlayFab) | ✅ |
| 재화·아이템 저장 | 서버 | ✅ |
| 전투 결과 계산 | 🔴 클라이언트 | Critical |
| 스테이지 보상 지급 | 🔴 클라이언트 기반 | Critical |
| IAP 영수증 검증 | 🔴 미구현 | Critical |
| 랭킹 점수 | 🔴 클라 제출 | High |
| 시간 동기화 | 서버 시간 수신 | ✅ |
## C11 판정
| 기준 | 상태 |
|------|------|
| **자원 효율성** | 12시간 재로그인, PlayFab 배치 호출 등 적절 🟡 |
| **코드 구조 직관성** | `ServerInfo` 단일 허브로 집중됨 ✅ |
| **코드 범용성** | PlayFab 직접 의존 → 추상화 없음 🔴 (→ `04_코어_범용성_분석_v1.md` 누락 모듈과 동일, 신규 코어 `06_신규코어_설계안_v1.md`에서 해소 예정) |
| **보안 건전성** | 위 3대 Critical 이슈 🔴 |
## 개발실 조치 제안 (우선순위)
### 🔴 P0 — 소프트 론칭(2026-06~07) 전 필수
1. **IAP 서버 검증 재구현** — PlayFab ValidateXXXReceipt API 사용, 블로커 해제
2. **전투 결과 서버 재연산** — 최소한 스테이지 클리어 판정·보상 지급은 서버 검증
3. **AES 키 분리** — 런타임 유도(디바이스ID 해시 혼합) + 서버 전송 페이로드에 HMAC 서명
### 🟠 P1 — 소프트 론칭 직후
4. **ACTk 적용 확대** — 모든 재화·레벨·카드 보유 수량 `Obscured*` 전환
5. **SpeedHackDetector / TimeCheckDetector 활성화**
6. **Firebase Crashlytics 재활성화**`google-services.json` 주입, 크래시 수집 시작
### 🟡 P2 — 정식 출시 전
feat(BT·신설): 조직 전환 Phase 2-A — Skill/Framework rename + 조직명 치환 + 새 프로젝트 셋업 PD님 2026-04-21 지시 8개 중 ②③④⑤⑥⑦⑧ 구조 전환부 이행 (①③ 노하우 재정리는 Phase 2-B, 삭제는 Phase 2-C). ## 집행 내역 1. .claude/skills/너드나비스-코어룰/ → BurningTimes-코어룰/ (Move-Item, R096·R100) 2. 코어코드/NerdNavis.Framework/ → 코어코드/BT.Framework/ (Move-Item, R100·R073·R081) 3. sed 일괄 치환 201파일 (치환 순서: NerdNavis.Framework → BT.Framework **선행** → NerdNavis → BurningTimes → 너드나비스 → BurningTimes) - 제외: .git/·.live/·.bak_*·memory/org/audit_logs/ 4. paths.local.json.template: DISCORD_WEBHOOK 추가 + Unity/Framework __SET_PER_PC__ placeholder 5. paths.local.json 실파일 생성 (gitignore, 본 PC 실값: Unity E:/NerdNavis/EerieVillage + Discord 웹훅) 6. 프로젝트/EerieVillage/ 신설 (개발·기획·관리 + README: 기묘한 고을: 조선퇴마뎐, Unity 6000.3.13f1 LTS, 2D PlatformerMicrogame) 7. README.md clone URL NerdNavis_AiDev/BurningTimesAi.git 실 URL 정정 8. 대화로그 공유/대화로그/조직운영/2026-04-21.md 신설 9. PD 지시 로그 양팀 BT1·BT2 항목 등록 (진행중) ## NerdNavis 의도적 잔존 3종 (C5 정직성) - GIT_REMOTE URL: Gitea 조직 hierarchy NerdNavis_AiDev (PD 별도 결정 영역) - UNITY_PROJECT_ROOT 실값: E:/NerdNavis/EerieVillage (PD 지시 6번) - EerieVillage README "BT.Framework (구 NerdNavis.Framework 계승)" 이력 표기 ## 감사 pm-auditor 사전 감사 Critical 2건 (대화로그·PD 지시 로그 선등록) 정정 완료. 매니페스트: bt-phase2a. ## 보류 (Phase 2-B → 2-C 예정) - Phase 2-B: 전 에이전트 동원 수상한잡화점 시행착오 노하우 추출·조직 자산화 - Phase 2-C: 수상한잡화점 일괄 삭제 + memory/org feedback "수상한잡화점" → "이전 프로젝트" 추상화 + PD 지시 로그 초기화 + 조직공지 정리 + SKILL P17·P29 재해석 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-20 15:44:48 +00:00
7. **INetworkService 추상화 레이어** (BurningTimesCore 누락 모듈) → PlayFab 의존 제거
8. **세이브/로드 구조화** — PlayerPrefs → 암호화 JSON 구조로 전환
9. **서버 재연산 범위 확대** — 덱 드래프트, 가챠 없음이지만 카드 획득 검증 필요
## 기획실 연관 (선행 인수인계 대조)
- Q-P1 (터치 방어 쿨다운) / Q-P2 (몬스터 배치 비율) — **클라 전적 권한**이므로 서버는 해당 데이터 검증 불가. 기획·개발 모두 **클라 코드가 SOT**.
- Q-P3 (보스 10002 클리어 가능성) — 클라 전투 SOT 확인 → `MobActor.cs` + `table_MonsterList.json` 실제 수치로 검증 가능