Initial sync: 너드나비스 조직 전체 자산 (v2 §3 인벤토리 기준)
- 루트: CLAUDE.md + pm-general 에이전트
- 공유/: PD 지시 트래킹, 일일보고, 공통_업무_규칙(C1~C15 + P1~P20 + 부록 A SOT), 조직공지, 부서간 REQ
- 개발실/: CLAUDE.md(C14-4 SOT 참조 전환), 에이전트·커맨드, 코어_설계(_skeleton 제외), 프로젝트 숙지 10종, 조직공지
- 기획실/: CLAUDE.md(C14-4 SOT 참조 전환), 에이전트·스킬모듈, 밸런싱 .md, Phase 3 HOLD 공지
- memory/org/: 사용자 메모리 6종 (외부 ~/.claude/projects/*/memory/ 사본)
- setup/: Windows·macOS 셋업 스크립트
- 제외: Unity·*.xlsm·*.sqlite·settings.local.json·data/·.cache/·_skeleton/
C14-4 참조 무결성 정리: '작업 시점별 자동 환기 메모'를 공통_업무_규칙.md 부록 A(SOT)로 단일화, 개발실/기획실 CLAUDE.md는 참조 링크로 전환.
PD 지시 #7 Phase 1 착수. push는 PAT 수신 후 실행 예정.
2026-04-14 16:40:28 +00:00
|
|
|
# 서버 연동 현황 분석 — 수상한 잡화점
|
|
|
|
|
|
|
|
|
|
> **작성일**: 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 — 정식 출시 전
|
2026-04-20 15:44:48 +00:00
|
|
|
7. **INetworkService 추상화 레이어** (BurningTimesCore 누락 모듈) → PlayFab 의존 제거
|
Initial sync: 너드나비스 조직 전체 자산 (v2 §3 인벤토리 기준)
- 루트: CLAUDE.md + pm-general 에이전트
- 공유/: PD 지시 트래킹, 일일보고, 공통_업무_규칙(C1~C15 + P1~P20 + 부록 A SOT), 조직공지, 부서간 REQ
- 개발실/: CLAUDE.md(C14-4 SOT 참조 전환), 에이전트·커맨드, 코어_설계(_skeleton 제외), 프로젝트 숙지 10종, 조직공지
- 기획실/: CLAUDE.md(C14-4 SOT 참조 전환), 에이전트·스킬모듈, 밸런싱 .md, Phase 3 HOLD 공지
- memory/org/: 사용자 메모리 6종 (외부 ~/.claude/projects/*/memory/ 사본)
- setup/: Windows·macOS 셋업 스크립트
- 제외: Unity·*.xlsm·*.sqlite·settings.local.json·data/·.cache/·_skeleton/
C14-4 참조 무결성 정리: '작업 시점별 자동 환기 메모'를 공통_업무_규칙.md 부록 A(SOT)로 단일화, 개발실/기획실 CLAUDE.md는 참조 링크로 전환.
PD 지시 #7 Phase 1 착수. push는 PAT 수신 후 실행 예정.
2026-04-14 16:40:28 +00:00
|
|
|
8. **세이브/로드 구조화** — PlayerPrefs → 암호화 JSON 구조로 전환
|
|
|
|
|
9. **서버 재연산 범위 확대** — 덱 드래프트, 가챠 없음이지만 카드 획득 검증 필요
|
|
|
|
|
|
|
|
|
|
## 기획실 연관 (선행 인수인계 대조)
|
|
|
|
|
|
|
|
|
|
- Q-P1 (터치 방어 쿨다운) / Q-P2 (몬스터 배치 비율) — **클라 전적 권한**이므로 서버는 해당 데이터 검증 불가. 기획·개발 모두 **클라 코드가 SOT**.
|
|
|
|
|
- Q-P3 (보스 10002 클리어 가능성) — 클라 전투 SOT 확인 → `MobActor.cs` + `table_MonsterList.json` 실제 수치로 검증 가능
|