20 KiB
원작 Wild Survival 가챠(뽑기) 재화·확률 재추출 원본 SOT v1
작성: 개발팀장 2026-08-22 · 근거: 원작 APK(
com.and.wild.sur.victoryv862)drawtype·drawlib·item·shop·pricetable·heroconst재복호화 실측 트리거: PD 직접 지시(2026-08-22) — "기존 원작의 로직을 살펴보고 동일하게 맞춰. 인게임 내 뽑기는 일반 골드를 쓰며 특정 시점에만 유료 재화를 쓰는 구조야. 제대로 실측해서 구현해야 해." 관계: 메타아키텍처 재설계 v1 §1-4·§10 기각안9·M-2가 **"가챠 소비 재화 = 원작 근거 부재(🔴), PD 이관"**으로 남긴 블로커를 재추출로 해소. 매핑v1 §2-6은 weight·천장만 다뤘고drawtype의 소비 재화(drawitem/drawitem2)를 추출하지 않았다 — 본 문서가 가챠 소비 재화 트랙에 한해 매핑v1보다 상위 SOT.2026-08-22_원작배율/장비/스테이지_재추출_원본_v1.md와 동일 파이프라인·동일 known-plaintext 키 유도. 표기 규칙(C5·C44): 🟢확정(원작데이터 직접 실측) · 🟡추정(형태·정황 근거) · 🔴미확정. 원작 데이터는 참고 수치만 기재 — 원본 파일·복호화본·XOR 키 레포 미커밋(§9).
0. 결론 요약 — ★ PD 힌트 데이터 정합 판정
| PD 힌트 명제 | 재추출 판정 | 근거 |
|---|---|---|
| "인게임 내 뽑기는 일반 골드를 쓰며" | 🟢 LITERAL 불일치 — 원작 draw는 골드 미사용 | 전 draw 계열 8테이블(drawtype·optionaldraw·slotmachine·cycledraw*) 비용 필드 전수 스캔 결과 골드(db_1001) 사용 0건. 원작 뽑기의 "일반/획득" 재화는 소환권(召唤卷 dj_7001/dj_7002)·보물열쇠(dj_7011) — 획득형 티켓이다(§3). 골드(db_1001 金条)는 히어로 레벨업 소프트 재화이며 뽑기에 안 쓰인다(§2). |
| "특정 시점에만 유료 재화를 쓰는 구조" | 🟢 구조 정합 (재화 종류만 상이) | 원작 draw는 이원 결제: drawitem(획득 티켓, 1차) OR drawitem2(젬 hb_2001, 대체). 티켓 소진 시 젬으로 결제 = "특정 시점 유료"의 데이터 구현(§3-2). 추가로 일일 무료 뽑기(isfree=1) 3종 존재(§3-3). 단 유료재화는 **젬(hb_2001, 준프리미엄)**이며, 순수 실화폐 전용 재화(点券 hb_1001) 사용 draw는 0건. |
| "제대로 실측" | 🟢 재복호화 재현 성공 | config 번들 203 TextAsset 재복호(valid JSON 187/무효16 = 이전 재추출 정확 일치). drawtype 전 행·drawlib 2485행·item 240행 실측(§1). |
총평 (정직): PD 힌트의 구조(획득 재화로 일반 뽑기 + 프리미엄 재화로 특정 시점)는 원작과 정확히 일치한다 — 이원 결제 + 일일 무료가 그 구현이다. 다만 원작의 "일반 획득 재화"는 **골드가 아니라 소환권(티켓)**이고, "특정 시점 유료 재화"는 **젬(hb_2001)**이다. GodDem은 소환권 개념이 없고 골드(GOLD_ID=201)가 유일 획득 재화이므로, 원작 소환권 → GodDem 골드 매핑을 채택하면 PD 표현("골드로 일반 뽑기")이 포트에서 literally 성립하며 동시에 원작 구조에 충실하다(§7). 즉 PD 지시는 원작 구조 그대로이며, 재화 이름만 GodDem 경제(골드 단일)에 맞춰 번역하면 된다. 메타아키텍처 §10의 🔴(가챠 재화 근거 부재)는 본 재추출로 데이터 해소된다.
1. 재복호화 결과 (재현 성공)
| 항목 | 값 |
|---|---|
| 원작 APK | C:\Users\sw\Downloads\Wild+Survival+-+Idle+Defense_862_APKPure\UnityDataAssetPack.apk (236MB) |
| config 번들 | assets/yoo/DefaultPackage/60f4b8a79e0efed6b5ada257fb5d9ea8.bundle (config TextAsset 203종) |
| 암호 방식 | TextAsset 내용에 22바이트 반복 XOR (자산마다 위치 0 리셋) |
| 키 유도 | 빈도분석(각 mod-22 위치별 printable/JSON 문자 최대화) — 이전 재추출과 동일 결과. 🚫 키 평문 미보존(scratchpad 한정·runtime 유도·작업 후 정리, 디스크 미기록) |
| 검증 | valid JSON 187 / 무효 16 = 매핑v1·이전 재추출과 정확 일치(강력 검증). drawtype 등 무효 16종은 중국어 GBK·제어문자 포함 — 라인 기반 관용 파서(latin-1 무손실)로 숫자/ASCII 필드 정상 추출 |
| 가챠 핵심 테이블 | drawtype(전 행)·drawlib(2485)·drawshow(258)·herodraw(111)·item(240)·shop(1441)·pricetable(12)·slotmachine(type1/lib8/progress100)·optionaldraw(39)·cycledraw계열 |
재현 방법(요약, 키 비공개): ① zipfile로 APK에서 config 번들 추출 → UnityPy(1.25.3) 로드 ② TextAsset raw bytes 획득 ③ 22주기 XOR 키 빈도분석 유도 ④ XOR 복호 → JSON 파싱. libil2cpp 네이티브 리버싱 불요.
2. 재화 정체 확정 (아이콘 + pricetable + shop 3중 교차) 🟢
item.csv의 code 필드가 보상/비용 토큰({code}_{amount})의 매핑 키다. 아이콘명(개발자 병음 명명)·실화폐 상품·상점 용도로 3중 교차 확정.
| code (토큰) | icon (병음/한자) | 의미 | maintype | 실화폐 | 역할 |
|---|---|---|---|---|---|
db_1001 |
icon_cg_jintiao (金条) |
골드(금괴) | 2 (db) | X | 히어로 레벨업 소프트 재화(§2-2) |
dj_1001 |
icon_cg_yingxiongjingyanshu (英雄经验书) |
영웅 경험서 | 5 (dj) | X | 히어로 레벨업 EXP 재료 |
hb_2001 |
icon_cg_shanzuan (闪钻) |
젬/다이아 | 1 (hb) | O | 프리미엄 — 실화폐 $29.99=800젬(상품 gems800)·뽑기 대체재화·리셋비용 |
hb_1001 |
icon_cg_dianquan (点券) |
点券 바우처 | 1 (hb) | 🟡 | 고volume 상점 재화(상점 비용 851건, sl_장비·sk_스킬 구매) |
dj_7001 |
icon_cg_zhaohuanjuan (召唤卷) |
기본 소환권 (q4) | 5 (dj) | X | 히어로 뽑기 티켓 |
dj_7002 |
icon_cg_zhaohuanjuan_03 (召唤卷) |
고급 소환권 (q5) | 5 (dj) | X | 히어로 뽑기 티켓(프리미엄 배너) |
dj_7003 |
icon_cg_zhaohuanjuan_02 (召唤卷) |
소환권 변형 (q6) | 5 (dj) | X | 히어로 뽑기 티켓 |
dj_7011 |
icon_cg_choujiang_baowu_yaoshi (抽奖宝物钥匙) |
보물 열쇠 (q4) | 5 (dj) | X | 장비 뽑기 티켓 |
2-1. ★ 골드 정체 정정 (스테이지 doc 오류 시정)
2026-08-22_원작스테이지_재추출_원본_v1.md§4-2는dj_1001을 "골드"로 라벨했으나, 아이콘명(yingxiongjingyanshu英雄经验书)·hero_level비용 실측 결과 **dj_1001= 영웅 경험서(EXP 재료)**다. 진짜 골드는db_1001(金条, iconjintiao) 이다.- 근거(§2-2):
hero_level레벨업 비용 =dj_1001_5; db_1001_10;(경험서 5 + 골드 10). 원작은 히어로 육성에 경험서(dj_1001) + 골드(db_1001) 2단 소비 — 메타아키텍처 §1-1이 이미 인지한 "골드→경험서 2단 경제". - 이 정정은 스테이지 트랙 결론(유한 설계 등)에 영향 없음(재화 라벨만 시정). wildernesspk 보상
dj_1001도 "경험서"로 재해석해야 정확.
2-2. hero_level 비용 실측 (골드 식별 근거) 🟢
레벨1: dj_1001_5; db_1001_10;
레벨2: dj_1001_22; db_1001_42;
레벨3: dj_1001_54; db_1001_99;
레벨4: dj_1001_104;db_1001_184;
heroconst: reset_cost = hb_2001_200(리셋=200젬) · drug_reset_cost = dj_3001_1 · hero_sys_unlock_level=3.
3. ★ 뽑기 소비 재화 구조 (PD 지시 핵심) — drawtype 전수 실측 🟢
drawtype 스키마(22열): id, drawtype, drawname, groupid, selecttype, selectcnt, category, drawnum, maxnum, isfree, displaytype, drawitem, drawitem2, libid1, libid2need, libid2, libid3need, libid3, libid4need, libid4, freetype, intervaltime.
drawitem= 1차 비용(획득 티켓) ·drawitem2= 대체 비용(젬) ·isfree/freetype/intervaltime/maxnum= 무료 뽑기 게이트 ·libidNneed/libidN= 천장 라이브러리 교체(§5).
3-1. 뽑기별 비용 (활성 행 전수)
| drawtype | 종류(category) | drawnum | drawitem (티켓 1차) | drawitem2 (젬 대체) | 무료 |
|---|---|---|---|---|---|
| 1701 | 히어로 단차(1) | 1 | dj_7001_1 (기본소환권 1) |
hb_2001_20 (20젬) |
- |
| 102 | 히어로 단차(1) | 1 | dj_7002_1 (고급소환권 1) |
hb_2001_20 |
- |
| 7 · 18 · 29 | 히어로 100차(3) | 100 | dj_7002_100 (고급 100) |
hb_2001_1800 |
- |
| 1301 | 열쇠 단차(1) | 1 | dj_7011_1 (보물열쇠 1) |
hb_2001_20 |
- |
| 217 | 열쇠 100차(3) | 100 | dj_7011_100 |
hb_2001_1800 |
- |
| 214 | 장비 단차(1) | 1 | hb_2001_20 (젬 전용) |
— | - |
| 212 | 장비 10차(2) | 10 | hb_2001_200 (젬 전용) |
— | - |
| 209 | 장비 100차(3) | 100 | hb_2001_1800 (젬 전용) |
— | - |
| 206 | 장비 무료(0) | 1 | — | — | isfree=1·freetype=1·max=5·300초 쿨 |
| 1402 | 히어로 무료(0) | 1 | — | — | isfree=1·max=1·300초 쿨 |
| 5101 | 히어로 무료(0) | 1 | — | — | isfree=1·max=1 |
sparse 행(drawtype 1·3·11·14·22·25·104·1201·1601·5401)은 배너 헤더/템플릿 행(id+drawtype+drawname만)으로 비용 데이터 없음.
3-2. ★ 이원 결제 = "특정 시점 유료" 구현 🟢
히어로/열쇠 뽑기(102·1701·7·1301·217…)는 drawitem(획득 티켓)을 1차 소비, 티켓 없으면 drawitem2(젬)로 결제한다. 즉:
- 일반(획득) 재화 = 소환권/열쇠 — 플레이·상점·이벤트로 획득.
- 특정 시점 유료 = 젬(hb_2001) — 티켓 소진 후 계속 뽑을 때.
- 환율: 단차 1티켓 ≈ 20젬, 100차 100티켓 ≈ 1800젬(10% 할인, 100×20=2000→1800).
이것이 PD가 말한 **"일반 재화로 뽑되 특정 시점에만 유료 재화"**의 정확한 데이터 구조다 — 다만 원작의 "일반 재화"가 골드가 아니라 티켓일 뿐.
3-3. 무료 뽑기 (특정 시점 무과금 창구) 🟢
- 장비 무료(206): 하루 5회, 300초 쿨다운.
- 히어로 무료(1402·5101): 1회, 300초 쿨.
- 무료 뽑기도 천장 라이브러리(libidNneed) 보유 → 무료분에도 등급 보정 적용.
3-4. 티켓 획득처 (shop) — 골드로는 못 산다 🟢
소환권(dj_7001)은 상점에서:
hb_2001(젬) 20/1개 · 190/10개 · 1800/100개 (shop 3002~3004)db(이벤트·아레나 토큰) — db_2001_20, db_2003_30, db_2008_10 등- 골드(
db_1001)로 소환권 구매 = 0건. 상점 비용 재화 분포: hb_1001(点券) 851 · hb_2001(젬) 314 · db토큰 175 · sl 80 · dj 20 — 골드는 상점 주력 재화가 아니다(원작은 젬/点券 중심 경제).
4. 가중추첨 (drawlib) 🟢
- 2485행 / 192 고유 pool =
(drawtype, libid)조합. 스키마id, drawtype, libid, position, itemid, weight, israre, sendmsg. - weight/10000 basis point: 192 pool 중 102개 정확 합 10000. 나머지는 8374(34)·9999(9)·9900(6)·9500(4) 등 비정규화(원작도 미통일 — 매핑v1 §2-6 재확인). 실 확률 =
weight / 활성 라이브러리 실합. - 히어로 뽑기 결과물 =
dj_5XXX히어로 조각(등급 인코딩: 51XX=q1 … 56XX=q6). 장비 뽑기 =sl_XXXX(장비) +dj_6XXX(재료) +dj_1001(경험서) +dj_19001등. - israre 플래그로 rare(고등급) 표식. 표시 확률은
drawshow(등급 티어별 아이템 목록)·cycledrawshow(showrate 명시, 0.005~0.12) 별도 보유.
히어로 단차(drawtype 102) 일반 pool(libid1) 실측 — 16 pos, 실합 9500:
q1 조각 4종 × 1125 (11.842%) | q2 조각 4종 × 625 (6.579%)
q3 조각 4종 × 375 (3.947%) | q4 조각 4종 × 250 (2.632%) ← rare(q5+) 없음
5. 천장 = 라이브러리 교체 (drawtype libidNneed → drawlib libid) 🟢
매핑v1 §2-6의 "라이브러리 교체 천장"을 소프트/하드 2단으로 완전 규명. drawtype이 libid2need/libid3need 카운트에 도달하면 활성 pool을 교체.
5-1. 히어로 단차(drawtype 102) 3단 라이브러리 실측 ★
| 라이브러리 | 발동 | pos·실합 | 구성 |
|---|---|---|---|
| libid1 (일반) | 1~9회 | 16·9500 | q1~q4만 (rare 0%) |
| libid2 (소프트천장) | 10회차 (libid2need=9) | 23·7747 | q1~q4 + q5 4종(1.291%) + q6 3종(0.426%) — rare 등장 개시 |
| libid3 (하드천장) | 30회차 (libid3need=29) | 7·499 | q5 4종(20.04%) + q6 3종(6.613%)만 = rare 100% 확정 |
→ 10회에 고등급 확률 개방, 30회에 고등급 확정. 일반 pool은 저등급만, 천장 pool은 일반 아이템 weight를 0으로 죽여 고등급 확정.
5-2. 뽑기별 천장 스케줄
| drawtype | libid2need(소프트) | libid3need(하드) | 비고 |
|---|---|---|---|
| 히어로 102·1701·7·18·29 | 9 (10회) | 29 (30회) | 히어로 표준 |
| 열쇠 1301 | 3 (4회) | 39 (40회) | 짧은 소프트천장 |
| 열쇠 217 | 4 (5회) | 39 (40회) | |
| 장비 209·214·206 | 61 (62회) | 99 (100회) | 장비는 장주기 |
| 장비 212(10차) | 61 | 99 | libid2·3=1 (교체 없음, 확률 고정형) |
| 히어로무료 1402 | 13 | 39 |
libid4need = 999전 행 = 미사용 4번째 슬롯(매핑v1 §2-6 재확인).- 라이브러리 교체 = 확률 보정 코드가 아니라 테이블 스왑 → 기획자가 코드 없이 천장 튜닝 가능.
6. 가격·경제 환산 🟢
- 1젬(hb_2001) = $29.99 / 800 = $0.0375 (pricetable id 40001, 상품
gems800). 매핑v1 §2-9 "$29.99→800젬" 정확 재확인. - 히어로 단차 = 20젬 = $0.75 (또는 소환권 1).
- 히어로 100차 = 1800젬 = $67.5 (또는 소환권 100) — 단차 대비 10% 할인.
- 장비 단/10/100차 = 20 / 200 / 1800젬 (10차는 무할인, 100차만 10% 할인).
- pricetable 12행 = 실화폐 상품(gems800·premium·piggy·pack 등). 실화폐가 직접 지급하는 뽑기 재화는 젬(hb_2001)뿐 — 소환권은 실화폐 직접 판매 없음(젬/토큰 경유).
7. GodDem 이식 관점 (balance-designer P3-B3 인계) — ★ PD 힌트의 포트 실현
7-1. 재화 매핑 권고 (PD "골드 일반 + 특정시점 유료"의 포트 실현)
| 원작 | 역할 | GodDem 매핑 권고 | 결과 |
|---|---|---|---|
소환권(dj_7001/7002)·열쇠(dj_7011) |
일반(획득) 뽑기 재화 | 골드(GOLD_ID=201) 직접 소비 |
PD "일반 골드로 뽑기"가 literally 성립 |
젬(hb_2001) |
특정 시점 유료·티켓 대체 | 프리미엄 재화(젬) — 미보유 시 신규 도입 or 기존 프리미엄 화폐 | PD "특정 시점 유료" 성립 |
| 일일 무료(206·1402·5101) | 무과금 창구 | 일일 무료 뽑기 N회 (쿨다운) | 원작 구조 계승 |
- GodDem은 소환권 개념이 없고 골드가 유일 획득 재화 → 원작 티켓 = GodDem 골드로 번역하면 원작 이원 결제(획득재화 1차 + 젬 대체)가 골드 1차 + 젬 대체로 그대로 이식된다.
- 메타아키텍처 §1-1(B1)·§1-3(B2)이 이미
GOLD_ID=201직접 소비를 디폴트로 권고 — 가챠도 동일 재화축이면 SurvivalMeta 재화 시스템(CurrencyManager) 확장 없이 골드 소비 경로 재사용 가능.
7-2. 확률·천장 이식 (구조 그대로)
- 가중추첨:
drawlibper-pool weight → GodDemSurvivalMetaGachaPool.csv(메타아키텍처 §5 명명). 전 풀 합 10000 basis point 강제(메타아키텍처 §1-4 채택 원칙과 정합). - 천장: 라이브러리 교체 2단(소프트/하드) →
SurvivalMetaGachaPity.csv. GodDem 규모에 맞춰 히어로 표준(소프트 10·하드 30) 또는 열쇠형(소프트 4·하드 40) 중 선택. 라이브러리 스왑 = 확률코드 없이 테이블 3개로 구현. - 등급 확정: 하드천장 pool = 저등급 weight 0 → 고등급 100% (drawtype 102 libid3 실측 모델).
7-3. B4 스킬마스터리 연계
- 원작 히어로 뽑기 결과물은
dj_5XXX히어로 조각(수집형). GodDem은 히어로 1명 구조이므로 가챠 결과물 = 장비/옵션(메타아키텍처 §1-4: hit/stun/retaliate/combo 4종 옵션 공급)로 이식됨이 이미 확정. - 가챠(B3)와 스킬 언락(B4
SurvivalMetaSkillUnlock/마스터리)은 별개 재화·별개 창구여야 함(원작도 뽑기 재화 ≠ 스킬트리 재화). 가챠=골드/젬, 스킬마스터리=별도 획득 재화 유지 권고.
8. 실측 검증 요약 (C5·C23·C44 — 정직 보고)
| 검증 항목 | 결과 | 근거 |
|---|---|---|
| config 번들 재복호화 | 🟢 성공 | valid 187/무효16 = 이전 재추출 정확 일치 |
| drawtype 소비 재화 추출 | 🟢 완료 | 이원 결제(티켓+젬) 전 행 실측 — 매핑v1 미추출분 신규 확보 |
| 골드(db_1001) draw 비용 사용 | 🟢 0건 확정 | 8 draw테이블 × 6 비용필드 전수 스캔 |
| 点券(hb_1001) draw 비용 사용 | 🟢 0건 확정 | 동일 스캔 — 순수 실화폐재화 draw 없음 |
| 재화 정체(젬/골드/경험서/소환권) | 🟢 확정 | icon 병음 + pricetable(gems800) + shop 용도 3중 교차 |
| dj_1001 골드→경험서 정정 | 🟢 확정 | hero_level 비용 dj_1001+db_1001 실측 |
| 천장 라이브러리 3단(소프트10·하드30) | 🟢 확정 | drawtype 102 libid1/2/3 pool 실측(rare 0%→등장→100%) |
| 가중치 basis point | 🟢 확정 | 192 pool 합 분포(102개 10000·나머지 비정규화) |
| 가격($0.0375/젬·단차20·100차1800) | 🟢 확정 | pricetable + drawtype 실측 |
8-1. 재추출 실패·부분 확정·한계 (정직 고지)
- 아이템명 영어/한글 미해석: config 번들의
A80_Language는 ES/PT/TH만 보유(EN 없음)하고 아이템명(nameid 23xxx)은 본 번들에 부재(별도 localization 번들 추정). 재화 정체는 아이콘 병음명 + 실화폐 상품ID + 상점 용도로 확정했으며 명시적 번역 스트링은 미확보 — 단 3중 교차로 오판 여지 실질 없음. - 소비 로직 명령어 미확증:
drawitem1차 /drawitem2대체의 소비 우선순위는 데이터 구조·통상 관행상 "티켓 우선, 없으면 젬"으로 해석되나, il2cpp Beebyte 난독화로 소비 코드 명령어 확증은 차단(이전 재추출과 동일 한계). 데이터 구조(2필드 병존)는 🟢 확정. - sparse drawtype 행: 10개 행이 id+drawtype+drawname만 보유(배너 헤더/템플릿 추정) — 비용 데이터 없어 §3 표에서 제외. 활성 뽑기 13종은 전수 확보.
- 점券(hb_1001) 성격: 상점 851건 사용·대량 단위(10만 단위)로 "고volume 획득형" 정황이나 실화폐 직접 지급 여부는 pricetable 12행에 없어 🟡. 단 draw 비용 미사용은 🟢 확정이라 가챠 결론에 무영향.
9. 저작권·키 취급 (PD 방침 준수)
- 원작 데이터는 참고 수치만 본 문서에 기재. 원본 파일·복호화본·추출 스크립트는 scratchpad 한정(
C:\Users\…\Temp\claude\…\scratchpad, 레포 외부) — 작업 완료 후 정리. - 22바이트 XOR 키는 runtime 빈도분석 유도만 — 디스크·본 문서·조직 기록에 평문 미기록.
- 레포 커밋 금지 확인: 복호화 원본은 Temp 하위(레포 외부)라 자동 미커밋. GodDem 레포(
E:\NerdNavis\GodDem) 수정 0건(데이터 추출만·Unity MCP 불요). 본 문서(참고 수치 전용)만 BurningTimes 레포 산출. - 재해독 필요 시 원작 APK에서 §1 방법으로 재추출(빈도분석 키 유도 결정·재현 가능).
10. 변경 이력
| 일시 | 작성 | 변경 |
|---|---|---|
| 2026-08-22 | 개발팀장 | v1 신규 — PD 지시(원작 가챠 재화 재추출) 대응. drawtype 이원결제·천장 라이브러리 3단·재화 정체(골드=db_1001 정정)·PD 힌트 정합 판정. 메타아키텍처 §10 🔴(가챠 재화 근거 부재) 데이터 해소. balance-designer P3-B3 인계용. |