12 KiB
원작 Wild Survival 배율 트랙 재추출 원본 SOT v1
작성: 개발팀장 2026-08-22 · 근거: 원작 APK(
com.and.wild.sur.victoryv862)heroskillattr재복호화 실측 트리거: plan-auditor 검증 — 현 GodDem 배율값(0.05~0.30)의 원작 정합 근거 미확정 + 배율 트랙 계열 템플릿 공유 의심 PD 지시: "재추출로 전체 원작 정합" (2026-08-22 직접 승인) 관계:2026-08-20_원작밸런스_해독_매핑_v1.md(이하 매핑 v1) §2-4heroskillattr절의 원본 재확정 + 오류 3건 정정. 본 문서가 배율 트랙에 한해 매핑 v1보다 상위 SOT.
0. 결론 요약 (배율 트랙)
| 질문 | 확정 결과 |
|---|---|
| 현 GodDem 0.05~0.30의 원작 출처? | attack_add prefix-10 · quality 1~6 = 0.05 / 0.07 / 0.10 / 0.15 / 0.20 / 0.30. 최하위 티어 밴드의 6등급 수열. |
| attack_add 단위 (1.0 = ?) | 배율 소수(fraction). 0.05 = +5%, 1.0 = +100%, 5.0 = +500%. 데이터 내부 정합성으로 확정(§4). il2cpp 직접 코드 확인은 Beebyte 난독화로 차단(정직 고지). |
| 계열 템플릿 공유? | 확정. 배율계 attack_add·attack_speed_add·hurt_add·lucky_multiple·lucky_multiple_res 5종이 동일 C-템플릿을 복사 사용. 확률계 10종은 별도 B-템플릿 공유. (task 가설 "최소 3종"보다 많음) |
| 매핑 v1 "순수 선형" 주장 | 부분 오류. prefix-10 C-템플릿은 가속 곡선(선형 아님). "1.0/2.0/…/5.0 선형"은 **별도 계열(prefix-65)**로, 현 GodDem이 쓰는 prefix-10과 혼동됨. |
| hero_level power 0.22L²+0.26L | 재확인 일치 (L50=563·L100=2226·L150=4989). |
| 전투 4:1 | A80ChampMatchConfig dam>0 12행 전부 hp/dam = 정확히 4.0 재확인. (hero_level엔 hp 컬럼 없음 — HP는 constitution 파생. "4:1"은 이 전투테이블 소속) |
몬스터 monsterteam[10001~10052] |
부재 재확인 (전체 2938 번들 257 TextAsset 전수). monsterteamattr(10행 감쇠계수)만 존재. |
1. 재복호화 결과 (재현 성공)
| 항목 | 값 |
|---|---|
| 원작 APK | C:\Users\sw\Downloads\Wild+Survival+-+Idle+Defense_862_APKPure\ (XAPK split: base + UnityDataAssetPack.apk + config.arm64_v8a.apk) |
| 밸런스 저장소 | UnityDataAssetPack.apk 내 YooAsset DefaultPackage — 표준 UnityFS 번들(2022.3.62f3), 파일 자체는 미암호화 |
| config 번들 | 60f4b8a79e0efed6b5ada257fb5d9ea8.bundle — config TextAsset 203종 집중 (동일 키) |
| 암호 방식 | TextAsset 내용에 22바이트 반복 XOR (매핑 v1 주기 22 검증됨 — 자기상관 피크 0.146@22) |
| 키 | 🚫 미보존. 빈도분석(비출력문자 최소화 + JSON 카이제곱)으로 재유도했으나 조직 기록·본 문서에 평문 미기재. scratchpad 한정, 작업 후 정리. |
| 평문 | CRLF pretty-print JSON {\r\n "data": [ … ]}. (선두 40바이트 공통 헤더 = {"data":[{"id":" 접두부. 매핑 v1의 compact JSON 표기는 근사) |
| 산출 | 203종 복호화 · 유효 JSON 187 / 무효 16 (매핑 v1 "엄격 유효 187"과 정확 일치. 무효 16 = item·drawtype·A80_Language 등 문자열 내 제어문자·중국어 GBK) |
재현 방법(요약, 키 비공개): ① UnityPy로 config 번들 로드 → TextAsset 암호문 획득 ② 주기 22 확정(자기상관) ③ 컬럼별 XOR 키를 "비출력문자 최소 + JSON 빈도 최대"로 재유도 ④ 전량 복호화. libil2cpp 네이티브 리버싱 불요 (매핑 v1과 동일 경로).
2. heroskillattr 구조 (배율 트랙 원본)
스키마: id, nameid, icon, attr, quality, attr_val — 1011행.
id 체계: [tier prefix 2자리][effect code 3자리][01][quality 1자리] (매핑 v1 확인).
- 예:
10017011= prefix10+ effcode017(attack_add) +01+ quality1→attr_val = 0.050 - effect code = 어느 스탯인가 / tier prefix = 강도 밴드 / quality(1~6) = 밴드 내 하위 등급
2-1. effect code → attr 카탈로그 (27코드)
| effcode | attr | effcode | attr | effcode | attr |
|---|---|---|---|---|---|
| 006 | lucky_rate | 016 | hp_add | 030/031 | suck_ratio / _res |
| 007 | lucky_rate_res | 017 | attack_add | 032/033 | retaliate_rate / _res |
| 008 | lucky_multiple | 018 | defense_add | 034/035 | combo_rate / _res |
| 009 | lucky_multiple_res | 019 | attack_speed_add | 036 | penetrate_ratio |
| 010 | hp | 026 | hurt_add | 037 | ele_penetrate_ratio |
| 014 | hit_rate | 027 | hurt_reduce | 038 | ele_hurt_add |
| 015 | dodge_rate | 028/029 | stun_rate / _res | 302/402/502 | hurt_add (별도 템플릿) |
2-2. 템플릿 공유 (계열 복사 — 확정)
prefix-10 기준 동일 수열을 여러 attr이 공유:
| 템플릿 | prefix-10 수열 (quality 1~6) | 공유 attr 수 | 공유 attr |
|---|---|---|---|
| C (배율계) | 0.05 / 0.07 / 0.10 / 0.15 / 0.20 / 0.30 |
5 | attack_add · attack_speed_add · hurt_add · lucky_multiple · lucky_multiple_res |
| B (확률계 ×2등비) | 50 / 100 / 200 / 400 / 800 / 1600 |
10 | hit_rate · dodge_rate · stun_rate(+res) · suck_ratio(+res) · retaliate_rate(+res) · combo_rate(+res) |
| P (관통계) | 0.01 / 0.02 / 0.03 / 0.04 / 0.05 / 0.06 |
2 | lucky_rate · penetrate_ratio |
| 독립 hp_add | 0.10 / 0.20 / 0.30 / 0.40 / 0.50 / 0.60 (선형 +0.1) |
1 | hp_add |
| 독립 defense_add | 0.02 / 0.04 / 0.06 / 0.08 / 0.10 / 0.12 |
1 | defense_add |
| 독립 hurt_reduce | 0.02 / 0.04 / 0.06 / 0.08 / 0.10 / 0.15 |
1 | hurt_reduce |
| 독립 hp | 120 / 360 / 720 / 1200 / 1800 / 2400 |
1 | hp (정액) |
task 의심 검증 결과: "공속·피해증가·치명타피해 등 최소 3개 트랙이 같은 수열 복사" → 사실. 실제 5종(attack_add 포함)이 C-템플릿을 글자 그대로 공유. 별도 값이 아니라 동일 상수 블록이다.
2-3. attack_add 전체 티어 사다리 (effect 017)
| prefix | quality 1~6 수열 | 성격 |
|---|---|---|
| 10 | 0.05 / 0.07 / 0.10 / 0.15 / 0.20 / 0.30 |
← 현 GodDem 출처 (C-템플릿 최하위) |
| 11 | 0.07 / 0.09 / 0.12 / 0.18 / 0.25 / 0.40 |
C-템플릿, q1 base +0.02 |
| 12 | 0.09 / 0.11 / 0.14 / 0.21 / 0.30 / 0.50 |
|
| 13 | 0.11 / 0.13 / 0.16 / 0.24 / 0.35 / 0.60 |
|
| 14 | 0.13 / 0.15 / 0.18 / 0.27 / 0.40 / 0.70 |
|
| 15 | 0.15 / 0.17 / 0.20 / 0.30 / 0.45 / 0.80 |
|
| 16 | 0.17 / 0.19 / 0.22 / 0.33 / 0.50 / 0.90 |
C-템플릿 최상위 |
| 62 | 0.40 / 0.80 |
고티어 선형 (별도, 장비옵션 풀 미사용) |
| 63 | 0.60 / 1.20 / 1.80 |
고티어 선형 |
| 64 | 0.80 / 1.60 / 2.40 / 3.20 |
고티어 선형 |
| 65 | 1.00 / 2.00 / 3.00 / 4.00 / 5.00 |
← 매핑 v1이 "순수 선형"으로 인용한 계열 |
C-템플릿(prefix 10~16) 밴드 규칙: q1 base가 prefix당 +0.02 등차(0.05→0.07→…→0.17). 밴드 내부(quality 1→6) 곡선은 가속: prefix-10 차분 = +0.02, +0.03, +0.05, +0.05, +0.10 (선형 아님).
3. 실사용 범위 (balance-designer 참고)
heroequipmentskill(장비 옵션 드로우풀, 1430행)이 heroskillattr id 882/1011 참조 (매핑 v1 §2-5 "882종" 일치).
- 실사용 attr 21종, 전부 prefix 10~16 밴드만 사용. 고티어 prefix(50~55·62~65)는 정의만 되고 장비옵션 풀엔 미사용.
- 실사용 배율계(C-템플릿) = attack_add · attack_speed_add · hurt_add · lucky_multiple(+res). 즉 5종이 같은 값으로 4~5개 옵션 슬롯을 채운다.
매핑 v1 §2-4 "실사용 87엔트리 = 6종" 주석과의 차이: 본 재추출의 882/21종은 장비옵션 드로우풀(heroequipmentskill) 기준. 매핑 v1의 "87/6종"은 다른 참조 경로(히어로 기본 스킬 kit 추정) 기준으로 보이며, 두 usage scope가 매핑 v1에서 혼재. balance-designer는 어느 시스템을 이식하는지에 따라 참조 scope를 명시할 것.
4. 단위 확정 — attack_add 1.0 = +100% (배율 소수)
4-1. 결론
attr_val은 배율 소수(fraction). 표시상 ×100 → %. 0.05 = +5%, 1.0 = +100%, prefix-65 q5 5.0 = +500%.
4-2. 근거 (데이터 내부 정합성 — 결정적)
- lucky_rate = 치명타 확률, prefix-10 =
0.01~0.06. 확률은 정의상 [0,1]. 0.01로 저장(정수 1,2,3이 아님) → 저장 소수가 곧 비율. (0.01 = 1% 치명타) - penetrate_ratio(0~1 비율)가 lucky_rate와 동일 P-템플릿 → 소수=비율 확정.
- hurt_reduce = 피해 감소,
0.02~0.15. 감소율은 ≤1.0.15 = 15%감소. 소수=비율. - lucky_multiple(치명타 피해 배율)이 attack_add와 동일 C-템플릿. 배율계가 확률계와 같은 소수 스케일 → attack_add도 동일 단위.
- GodDem 소비 모델과 정합(매핑 v1 §3-1):
최종값 = (Init + Additional) × (1 + Multiplier) + Static._add계는Multiplier슬롯 →0.05 → ×1.05 = +5%. 이식 대상 코드가 이미 소수 배율로 소비.
4-3. 한계 (정직 고지)
- il2cpp 네이티브 코드 직접 확인 = 불가. 원작은 Beebyte Obfuscator + 네이티브 컴파일(global-metadata에
Beebyte.Obfuscator|RenameAttribute·$__Stripped…다수 실측). attr 문자열(attack_add등)이 metadata에 count 0 — 소비 코드가 난독화되어 "이 값에 ×0.01 하는가/(1+x) 하는가"의 명령어 수준 확증은 차단. (매핑 v1이 네이티브 리버싱을 안 한 이유와 동일) - 따라서 단위는 §4-2 정합성으로 확정하며, 명령어 수준 물증은 없음. 배율계 전체가 확률계와 같은 소수 스케일이라는 점에서 오판 여지는 실질적으로 없음.
5. 매핑 v1 정정 사항 (배율 트랙 한정)
| 매핑 v1 §2-4 기술 | 정정 |
|---|---|
| "레벨당 수치는 22시리즈 전부 순수 선형. 예: attack_add 1.0/2.0/3.0/4.0/5.0" | ① heroskillattr에 level 축 없음 — 수열은 quality(등급) 축. ② "1.0~5.0"은 prefix-65 별도 계열이며 이건 실제 선형. ③ 현 GodDem이 쓰는 prefix-10 C-템플릿(0.05~0.30)은 가속 곡선(선형 아님). 두 계열이 혼동됨. |
| "attack_add 0.05 등차 +0.02" (§4 표) | q1~q3 실제 = 0.05 / 0.07 / 0.10 (q3는 0.10, +0.02 외삽한 0.09 아님). 등차 아님·가속. |
| hp_add 곡선 | prefix-10 hp_add = 0.1/0.2/…/0.6 선형 +0.1 (맞음). 단 attack_add와 다른 템플릿 — "배율계는 다 같은 곡선"이 아님. |
6. 저작권·키 취급 (PD 방침 준수)
- 원작 데이터는 참고 수치만 본 문서에 기재. 아트·텍스트·원본 파일·복호화본 레포 미커밋.
.gitignorescratchpad/·wild/·*.apk등재 확인. - 22바이트 XOR 키는 작업용 임시 재유도만 — 본 문서·조직 기록에 평문 미기재. scratchpad 복호화본·키 스크립트는 작업 완료 후 정리.
- 재해독 필요 시 원작 APK에서 §1 방법으로 재추출(키 재유도 결정적·재현 가능).
7. balance-designer 인계 노트
- 배율 재산정 근거 수열: C-템플릿(§2-2·2-3), P-템플릿, 독립 hp_add/defense_add/hurt_reduce가 원본. 현 GodDem 0.05~0.30 = attack_add prefix-10 그대로.
- 단위 = 소수 배율(§4).
(1+Multiplier)소비. 등급 3단 설계 시 prefix-10 q1~q3 =0.05/0.07/0.10을 그대로 쓰거나, 밴드(prefix)로 티어를 표현. - 템플릿 공유는 원작 의도적 설계(옵션 다양성은 effect 종류로, 강도는 공용 밴드로). 우리 배율 트랙이 여러 스탯에 같은 수열을 써도 원작 정합. 단 우리 스케일(1캐릭·20레벨·매판 리셋)에는 매핑 v1 §4(d)대로 곡선 형태만 이식·절대값 재조정 권고.
- 곡선 형태 주의: 배율계(C)는 가속, hp_add·penetrate는 선형, 확률계(B)는 ×2 등비 — 스탯마다 다르다. 일괄 선형 가정 금지.