@jjlmoya/utils-games-development 1.51.0 → 1.52.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. package/package.json +1 -1
  2. package/src/category/index.ts +2 -1
  3. package/src/entries.ts +4 -1
  4. package/src/tests/locale_completeness.test.ts +2 -2
  5. package/src/tests/tool_validation.test.ts +2 -2
  6. package/src/tool/saveFileEditor/bibliography.astro +6 -0
  7. package/src/tool/saveFileEditor/bibliography.ts +12 -0
  8. package/src/tool/saveFileEditor/component.astro +351 -0
  9. package/src/tool/saveFileEditor/entry.ts +28 -0
  10. package/src/tool/saveFileEditor/game-save-file-editor.css +250 -0
  11. package/src/tool/saveFileEditor/i18n/de.ts +182 -0
  12. package/src/tool/saveFileEditor/i18n/en.ts +182 -0
  13. package/src/tool/saveFileEditor/i18n/es.ts +182 -0
  14. package/src/tool/saveFileEditor/i18n/fr.ts +182 -0
  15. package/src/tool/saveFileEditor/i18n/id.ts +182 -0
  16. package/src/tool/saveFileEditor/i18n/it.ts +182 -0
  17. package/src/tool/saveFileEditor/i18n/ja.ts +182 -0
  18. package/src/tool/saveFileEditor/i18n/ko.ts +182 -0
  19. package/src/tool/saveFileEditor/i18n/nl.ts +182 -0
  20. package/src/tool/saveFileEditor/i18n/pl.ts +182 -0
  21. package/src/tool/saveFileEditor/i18n/pt.ts +182 -0
  22. package/src/tool/saveFileEditor/i18n/ru.ts +182 -0
  23. package/src/tool/saveFileEditor/i18n/sv.ts +182 -0
  24. package/src/tool/saveFileEditor/i18n/tr.ts +182 -0
  25. package/src/tool/saveFileEditor/i18n/zh.ts +182 -0
  26. package/src/tool/saveFileEditor/index.ts +11 -0
  27. package/src/tool/saveFileEditor/logic.test.ts +69 -0
  28. package/src/tool/saveFileEditor/logic.ts +139 -0
  29. package/src/tool/saveFileEditor/seo.astro +15 -0
  30. package/src/tool/saveFileEditor/ui.ts +24 -0
  31. package/src/tools.ts +2 -0
@@ -0,0 +1,182 @@
1
+ import type { ToolLocaleContent } from '../../../types';
2
+ import type { SaveFileEditorUI } from '../ui';
3
+ import { bibliographyEntries } from '../bibliography';
4
+
5
+ export const content: ToolLocaleContent<SaveFileEditorUI> = {
6
+ slug: 'editor-salvataggio-gioco',
7
+ title: 'Editor e Offuscatore Salvataggi Gioco',
8
+ description: 'Decodifica, ispeziona, modifica i payload JSON e ricifra i salvataggi di gioco utilizzando Base64, maschere XOR o testo in chiaro 100% localmente nel tuo browser.',
9
+ ui: {
10
+ title: 'Editor e Offuscatore Salvataggi Gioco',
11
+ subtitle: 'Ispeziona, modifica e cifra i file di salvataggio locali in sicurezza senza inviare dati al server',
12
+ dropSaveFile: 'Trascina e rilascia il file di salvataggio qui',
13
+ orSelectFile: 'o clicca per selezionare un file locale',
14
+ encryptionMethod: 'Formato di Cifratura',
15
+ methodBase64: 'Codifica Base64',
16
+ methodXor: 'Maschera XOR + Base64',
17
+ methodRaw: 'JSON in Chiaro / Non Cifrato',
18
+ xorKeyLabel: 'Chiave Segreta XOR',
19
+ xorKeyPlaceholder: 'es. MiaChiaveSegreta2026',
20
+ jsonRawTitle: 'Payload JSON Decodificato (Editor Live)',
21
+ encodeAndDownload: 'Cifra e Scarica File',
22
+ copyEncoded: 'Copia Testo Cifrato',
23
+ copiedNotice: 'Copiato negli Appunti!',
24
+ decodedKeysCount: 'Parametri Totali',
25
+ dataSize: 'Dimensione Payload',
26
+ detectedFormat: 'Formato Rilevato',
27
+ exportPreviewLabel: 'Anteprima Output Cifrato',
28
+ decodePanelTitle: 'Decodifica ed Editor JSON Live',
29
+ exportPanelTitle: 'Payload Cifrato di Uscita',
30
+ decodeError: 'Impossibile decodificare il file di salvataggio',
31
+ bytesUnit: 'B',
32
+ },
33
+ seo: [
34
+ {
35
+ type: 'title',
36
+ level: 2,
37
+ text: 'Sicurezza e Protocolli di Offuscamento nei Salvataggi',
38
+ },
39
+ {
40
+ type: 'paragraph',
41
+ html: 'I videogiochi serializzano lo stato di avanzamento del giocatore in formati di archiviazione persistenti per conservare inventari, livelli sbloccati e attributi tra le varie sessioni di gioco. Per evitare modifiche dirette tramite semplici editor di testo, gli studi offuscano i salvataggi con schemi di codifica binaria come Base64 o maschere bit a bit XOR abbinate a una chiave segreta. Durante i test di controllo qualità QA e il debug delle operazioni live, i team di sviluppo necessitano della capacità immediata di ispezionare le strutture JSON grezze, forzare stati limite e ricifrare i dati modificati senza dover ricompilare i file eseguibili del gioco.',
42
+ },
43
+ {
44
+ type: 'stats',
45
+ columns: 4,
46
+ items: [
47
+ { label: 'Privacy Elaborazione', value: '100% Locale' },
48
+ { label: 'Decodificatori Supportati', value: 'Base64 / XOR / JSON' },
49
+ { label: 'Latenza Decodifica', value: '0 ms' },
50
+ { label: 'Rischio Fughe Dati', value: 'Zero' },
51
+ ],
52
+ },
53
+ {
54
+ type: 'title',
55
+ level: 2,
56
+ text: 'Confronto Schemi di Offuscamento',
57
+ },
58
+ {
59
+ type: 'comparative',
60
+ columns: 3,
61
+ items: [
62
+ {
63
+ title: 'Codifica Base64',
64
+ description: 'Conversione rapida che impedisce modifiche veloci senza offrire sicurezza crittografica vera.',
65
+ },
66
+ {
67
+ title: 'Maschera XOR + Base64',
68
+ description: 'Pratica standard nello sviluppo indie. Miscela i byte con una chiave segreta contro i cheat engine.',
69
+ },
70
+ {
71
+ title: 'Payload JSON in Chiaro',
72
+ description: 'Salvataggio leggibile non cifrato. Ideale per prototipi e build di debug interne.',
73
+ },
74
+ ],
75
+ },
76
+ {
77
+ type: 'title',
78
+ level: 2,
79
+ text: 'Pratiche di Test QA per i Salvataggi',
80
+ },
81
+ {
82
+ type: 'tip',
83
+ title: 'Best Practice di Sicurezza nei Salvataggi durante QA',
84
+ html: 'Mantieni chiavi di debug separate per le build interne. Usa ispettori locali per testare valori limite senza ricompilare il codice di gioco.',
85
+ },
86
+ {
87
+ type: 'title',
88
+ level: 2,
89
+ text: 'Guida ai Parametri dello Stato di Gioco',
90
+ },
91
+ {
92
+ type: 'table',
93
+ headers: ['Tipo Dato', 'Formato Consigliato', 'Caso d Uso', 'Offuscamento'],
94
+ rows: [
95
+ ['Numeri Interi', 'Intero 32-bit', 'Monete, Livello, XP, Munizioni', 'Maschera XOR'],
96
+ ['Flag Booleani', 'Boolean Standard', 'Tutorial Completato, Boss Sconfitto', 'Base64 / XOR'],
97
+ ['Oggetti Annidati', 'Gerarchia JSON', 'Inventario, Abilità', 'Base64'],
98
+ ['Timestamp', 'ISO 8601 UTC', 'Accesso Giornaliero, Salvataggio', 'Maschera XOR'],
99
+ ],
100
+ },
101
+ {
102
+ type: 'title',
103
+ level: 2,
104
+ text: 'Reverse Engineering e Anti Manomissione',
105
+ },
106
+ {
107
+ type: 'paragraph',
108
+ html: 'Sebbene l offuscamento client eviti manomissioni occasionali, XOR e Base64 non sono veri algoritmi crittografici. Strumenti di analisi memoria come RenderDoc o x64dbg possono ispezionare le routine di generazione chiavi nei file compilati. Per titoli competitivi le firme HMAC o verifiche server sono fondamentali.',
109
+ },
110
+ ],
111
+ faqTitle: 'Domande Frequenti',
112
+ faq: [
113
+ {
114
+ question: 'I miei file vengono caricati su un server remoto?',
115
+ answer: 'No. Tutto il processo avviene al 100% nel tuo browser.',
116
+ },
117
+ {
118
+ question: 'Come funziona l offuscamento XOR in Unity o Godot?',
119
+ answer: 'L offuscamento XOR applica un operazione bit a bit sui byte UTF-8 contro una chiave segreta.',
120
+ },
121
+ ],
122
+ howTo: [
123
+ {
124
+ name: 'Carica File',
125
+ text: 'Carica il tuo file di salvataggio cifrato.',
126
+ },
127
+ {
128
+ name: 'Seleziona Chiave',
129
+ text: 'Scegli il metodo e inserisci la chiave segreta.',
130
+ },
131
+ {
132
+ name: 'Modifica JSON',
133
+ text: 'Modifica i valori nell editor live.',
134
+ },
135
+ {
136
+ name: 'Esporta e Scarica',
137
+ text: 'Scarica il file modificato pronto per i test.',
138
+ },
139
+ ],
140
+ schemas: [
141
+ {
142
+ '@context': 'https://schema.org',
143
+ '@type': 'SoftwareApplication',
144
+ name: 'Editor Salvataggio Gioco',
145
+ applicationCategory: 'DeveloperApplication',
146
+ operatingSystem: 'Any',
147
+ offers: {
148
+ '@type': 'Offer',
149
+ price: '0',
150
+ priceCurrency: 'EUR',
151
+ },
152
+ },
153
+ {
154
+ '@context': 'https://schema.org',
155
+ '@type': 'FAQPage',
156
+ mainEntity: [
157
+ {
158
+ '@type': 'Question',
159
+ name: 'I miei file vengono caricati su un server remoto?',
160
+ acceptedAnswer: {
161
+ '@type': 'Answer',
162
+ text: 'No. Tutto il processo avviene al 100% nel tuo browser.',
163
+ },
164
+ },
165
+ ],
166
+ },
167
+ {
168
+ '@context': 'https://schema.org',
169
+ '@type': 'HowTo',
170
+ name: 'Come Modificare Salvataggi di Gioco',
171
+ step: [
172
+ {
173
+ '@type': 'HowToStep',
174
+ name: 'Carica File',
175
+ text: 'Carica il tuo file di salvataggio cifrato.',
176
+ },
177
+ ],
178
+ },
179
+ ],
180
+ bibliographyTitle: 'Riferimenti e Letture Aggiuntive',
181
+ bibliography: bibliographyEntries,
182
+ };
@@ -0,0 +1,182 @@
1
+ import type { ToolLocaleContent } from '../../../types';
2
+ import type { SaveFileEditorUI } from '../ui';
3
+ import { bibliographyEntries } from '../bibliography';
4
+
5
+ export const content: ToolLocaleContent<SaveFileEditorUI> = {
6
+ slug: 'game-save-file-editor',
7
+ title: 'ゲームセーブファイル難読化およびエディタ',
8
+ description: 'ブラウザ内で完全ローカルにBase64、XORマスク、またはプレーンテキストを使用してゲームセーブデータを複合、検査、編集、再暗号化します。',
9
+ ui: {
10
+ title: 'ゲームセーブデータ難読化およびエディタ',
11
+ subtitle: 'サーバーへデータを送信せず安全にローカルセーブデータを検証、編集、暗号化',
12
+ dropSaveFile: 'ここにセーブファイルをドラッグアンドドロップ',
13
+ orSelectFile: 'またはクリックしてローカルファイルを選択',
14
+ encryptionMethod: '暗号化形式',
15
+ methodBase64: 'Base64エンコード',
16
+ methodXor: 'XORマスク + Base64',
17
+ methodRaw: 'プレーンJSON / 非暗号化',
18
+ xorKeyLabel: 'XORシークレットキー',
19
+ xorKeyPlaceholder: '例: MySecretGameKey2026',
20
+ jsonRawTitle: 'デコード済みJSONペイロード(ライブエディタ)',
21
+ encodeAndDownload: '暗号化してファイルをダウンロード',
22
+ copyEncoded: '暗号化テキストをコピー',
23
+ copiedNotice: 'クリップボードにコピーしました!',
24
+ decodedKeysCount: '総パラメータ数',
25
+ dataSize: 'ペイロードサイズ',
26
+ detectedFormat: '検出された形式',
27
+ exportPreviewLabel: '暗号化出力プレビュー',
28
+ decodePanelTitle: 'デコードおよびライブJSONエディタ',
29
+ exportPanelTitle: '再暗号化出力ペイロード',
30
+ decodeError: 'セーブファイルのデコードに失敗しました',
31
+ bytesUnit: 'バイト',
32
+ },
33
+ seo: [
34
+ {
35
+ type: 'title',
36
+ level: 2,
37
+ text: 'ゲームセーブファイルのセキュリティと難読化プロトコル',
38
+ },
39
+ {
40
+ type: 'paragraph',
41
+ html: 'ゲーム開発において、プレイヤーの進行状況やインベントリ数、解放されたステージ、キャラクター属性などのゲーム状態は、永続的なストレージ形式にシリアライズされて保存されます。一般的なテキストエディタによる不正な改ざんを防ぐため、開発スタジオはBase64エンコードや特定のシークレットキーを使用したビット演算XORマスクを用いてセーブデータを難読化します。内部QAテストや運用中のデバッグ作業において、開発チームはバイナリを再コンパイルすることなく、生のJSON構造を検査し、境界値をテストし、変更されたデータを迅速に再暗号化するツールを必要とします。',
42
+ },
43
+ {
44
+ type: 'stats',
45
+ columns: 4,
46
+ items: [
47
+ { label: 'クライアント処理プライバシー', value: '100% ローカル' },
48
+ { label: '対応デコーダー', value: 'Base64 / XOR / JSON' },
49
+ { label: 'デコードレイテンシ', value: '0 ms' },
50
+ { label: 'データ漏洩リスク', value: 'ゼロ' },
51
+ ],
52
+ },
53
+ {
54
+ type: 'title',
55
+ level: 2,
56
+ text: '難読化スキームの比較',
57
+ },
58
+ {
59
+ type: 'comparative',
60
+ columns: 3,
61
+ items: [
62
+ {
63
+ title: 'Base64エンコード',
64
+ description: 'メモ帳での直接編集を防ぐ軽量な文字列変換ですが、暗号的なセキュリティは提供しません。',
65
+ },
66
+ {
67
+ title: 'XORマスク + Base64',
68
+ description: 'インディーゲーム開発の標準的な手法。シークレットキーとバイト列を演算しメモリ改ざんを防ぎます。',
69
+ },
70
+ {
71
+ title: 'プレーンJSONペイロード',
72
+ description: '非暗号化の読解可能な状態。初期プロトタイピングやデバッグビルドに最適です。',
73
+ },
74
+ ],
75
+ },
76
+ {
77
+ type: 'title',
78
+ level: 2,
79
+ text: 'セーブ状態検証のためのQAテスト手法',
80
+ },
81
+ {
82
+ type: 'tip',
83
+ title: 'QAにおけるセーブセキュリティのベストプラクティス',
84
+ html: '内部ビルドと本番ビルドで常に異なるデバッグキーを使用してください。限界値のバグを検証する際はローカルツリーエディタを活用し、再コンパイルなしでテストを行ってください。',
85
+ },
86
+ {
87
+ type: 'title',
88
+ level: 2,
89
+ text: 'ゲーム状態パラメータガイドライン表',
90
+ },
91
+ {
92
+ type: 'table',
93
+ headers: ['データ型', '推奨形式', '一般的な用途', '難読化層'],
94
+ rows: [
95
+ ['数値整数', '32ビット整数', 'コイン、レベル、経験値、弾薬', 'XORマスク'],
96
+ ['ブーリアンフラグ', '標準ブーリアン', 'チュートリアル完了、ボス撃破', 'Base64 / XOR'],
97
+ ['ネストされたオブジェクト', 'JSON階層', 'インベントリ、スキルツリー', 'Base64エンコード'],
98
+ ['タイムスタンプ文字列', 'ISO 8601 UTC', 'デイリーログイン、保存日時', 'XORマスク'],
99
+ ],
100
+ },
101
+ {
102
+ type: 'title',
103
+ level: 2,
104
+ text: 'リバースエンジニアリングと不正改ざん対策の考慮事項',
105
+ },
106
+ {
107
+ type: 'paragraph',
108
+ html: 'クライアント側での難読化は一般的なユーザーによる改ざんを抑止しますが、XOR演算やBase64は完全な暗号化アルゴリズムではありません。RenderDocやx64dbgなどのデバッグツールを使用すると、コンパイルされたアセンブリから生成ルーチンを解析される可能性があります。競争的なマルチプレイヤーゲームでは、サーバー側での検証やHMAC署名によるハッシュ検証を併用することが推奨されます。',
109
+ },
110
+ ],
111
+ faqTitle: 'よくある質問',
112
+ faq: [
113
+ {
114
+ question: 'セーブファイルが外部サーバーにアップロードされることはありますか?',
115
+ answer: 'いいえ。すべてのデコード、JSON編集、再暗号化処理は100%お使いのWebブラウザのJavaScriptエンジン内でローカルに実行されます。',
116
+ },
117
+ {
118
+ question: 'UnityやGodotなどのゲームエンジンでXOR難読化はどのように機能しますか?',
119
+ answer: 'シリアライズされたJSON文字列のUTF-8バイト列に対して、指定されたシークレットキーの各文字とビット演算XORを実行し、その結果をBase64化します。',
120
+ },
121
+ ],
122
+ howTo: [
123
+ {
124
+ name: 'セーブファイルの読み込みまたは貼り付け',
125
+ text: '暗号化されたセーブファイルをアップロードするか、サンプルプリセットを選択します。',
126
+ },
127
+ {
128
+ name: 'デコード方法とキーの選択',
129
+ text: 'Base64またはXORマスクを選択し、ゲームのシークレットキーを入力してデコードします。',
130
+ },
131
+ {
132
+ name: 'JSON状態の編集',
133
+ text: 'ライブエディタを使用してレベル、所持金、アイテム、ゲームフラグを自由に編集します。',
134
+ },
135
+ {
136
+ name: '暗号化とエクスポート',
137
+ text: '出力形式を選択し、テスト用に更新されたセーブファイルをダウンロードします。',
138
+ },
139
+ ],
140
+ schemas: [
141
+ {
142
+ '@context': 'https://schema.org',
143
+ '@type': 'SoftwareApplication',
144
+ name: 'ゲームセーブファイルエディタ',
145
+ applicationCategory: 'DeveloperApplication',
146
+ operatingSystem: 'Any',
147
+ offers: {
148
+ '@type': 'Offer',
149
+ price: '0',
150
+ priceCurrency: 'JPY',
151
+ },
152
+ },
153
+ {
154
+ '@context': 'https://schema.org',
155
+ '@type': 'FAQPage',
156
+ mainEntity: [
157
+ {
158
+ '@type': 'Question',
159
+ name: 'セーブファイルが外部サーバーにアップロードされることはありますか?',
160
+ acceptedAnswer: {
161
+ '@type': 'Answer',
162
+ text: 'いいえ。すべての処理は100%ブラウザ内で完了します。',
163
+ },
164
+ },
165
+ ],
166
+ },
167
+ {
168
+ '@context': 'https://schema.org',
169
+ '@type': 'HowTo',
170
+ name: '暗号化されたゲームセーブファイルを編集する方法',
171
+ step: [
172
+ {
173
+ '@type': 'HowToStep',
174
+ name: 'セーブファイルの読み込み',
175
+ text: '暗号化されたセーブファイルをアップロードします。',
176
+ },
177
+ ],
178
+ },
179
+ ],
180
+ bibliographyTitle: '参考文献および関連資料',
181
+ bibliography: bibliographyEntries,
182
+ };
@@ -0,0 +1,182 @@
1
+ import type { ToolLocaleContent } from '../../../types';
2
+ import type { SaveFileEditorUI } from '../ui';
3
+ import { bibliographyEntries } from '../bibliography';
4
+
5
+ export const content: ToolLocaleContent<SaveFileEditorUI> = {
6
+ slug: 'game-save-file-editor',
7
+ title: '게임 저장 파일 난독화 및 에디터',
8
+ description: '브라우저 내에서 100% 로컬로 Base64, XOR 마스킹 또는 일반 텍스트를 사용하여 게임 저장 데이터를 복호화, 검사, 수정 및 재암호화합니다.',
9
+ ui: {
10
+ title: '게임 저장 데이터 난독화 및 에디터',
11
+ subtitle: '서버 전송 없이 안전하게 로컬 저장 데이터 상태를 검사, 수정 및 암호화',
12
+ dropSaveFile: '여기에 저장 파일을 드래그 앤 드롭하세요',
13
+ orSelectFile: '또는 클릭하여 로컬 파일 선택',
14
+ encryptionMethod: '암호화 형식',
15
+ methodBase64: 'Base64 인코딩',
16
+ methodXor: 'XOR 마스크 + Base64',
17
+ methodRaw: '일반 JSON / 비암호화',
18
+ xorKeyLabel: 'XOR 비밀키',
19
+ xorKeyPlaceholder: '예: MySecretGameKey2026',
20
+ jsonRawTitle: '디코딩된 JSON 페이로드 (라이브 에디터)',
21
+ encodeAndDownload: '암호화 및 파일 다운로드',
22
+ copyEncoded: '암호화된 텍스트 복사',
23
+ copiedNotice: '클립보드에 복사되었습니다!',
24
+ decodedKeysCount: '총 매개변수',
25
+ dataSize: '페이로드 크기',
26
+ detectedFormat: '감지된 형식',
27
+ exportPreviewLabel: '암호화 출력 미리보기',
28
+ decodePanelTitle: '디코드 및 라이브 JSON 에디터',
29
+ exportPanelTitle: '재암호화된 출력 페이로드',
30
+ decodeError: '저장 파일 디코딩에 실패했습니다',
31
+ bytesUnit: '바이트',
32
+ },
33
+ seo: [
34
+ {
35
+ type: 'title',
36
+ level: 2,
37
+ text: '게임 저장 파일 보안 및 난독화 프로토콜',
38
+ },
39
+ {
40
+ type: 'paragraph',
41
+ html: '게임 개발 과정에서 플레이어의 진행 상황, 인벤토리, 해금된 스테이지, 캐릭터 능력치 등은 지속성 저장소에 직렬화되어 저장됩니다. 일반 텍스트 에디터를 통한 무단 수정을 방지하기 위해, 개발 스튜디오는 Base64 인코딩이나 특정 비밀키를 사용한 비트 XOR 마스킹 기법으로 저장 데이터를 난독화합니다. 품질 보증 QA 테스트 및 라이브 운영 디버깅 시, 개발 팀은 게임 바이너리를 재컴파일하지 않고도 원시 JSON 구조를 즉시 검사하고 엣지 케이스 상태를 설정하며 수정된 데이터를 재암호화할 수 있는 전용 도구가 필요합니다.',
42
+ },
43
+ {
44
+ type: 'stats',
45
+ columns: 4,
46
+ items: [
47
+ { label: '클라이언트 처리 개인정보 보호', value: '100% 로컬' },
48
+ { label: '지원되는 디코더', value: 'Base64 / XOR / JSON' },
49
+ { label: '디코딩 지연 시간', value: '0 ms' },
50
+ { label: '데이터 유출 위험', value: '0%' },
51
+ ],
52
+ },
53
+ {
54
+ type: 'title',
55
+ level: 2,
56
+ text: '난독화 기법 비교',
57
+ },
58
+ {
59
+ type: 'comparative',
60
+ columns: 3,
61
+ items: [
62
+ {
63
+ title: 'Base64 인코딩',
64
+ description: '메모장에서의 단순 텍스트 수정을 방지하는 경량 변환 방식이지만 암호학적 보안성은 제공하지 않습니다.',
65
+ },
66
+ {
67
+ title: 'XOR 마스킹 + Base64',
68
+ description: '인디 게임 개발의 표준적 방식. 비밀키와 비트 연산을 조합하여 치트 엔진이나 메모리 변조를 방지합니다.',
69
+ },
70
+ {
71
+ title: '일반 JSON 페이로드',
72
+ description: '암호화되지 않은 읽기 가능한 상태. 초기 프로토타이핑 및 디버그 빌드에 적합합니다.',
73
+ },
74
+ ],
75
+ },
76
+ {
77
+ type: 'title',
78
+ level: 2,
79
+ text: '저장 상태 검증을 위한 QA 테스트 관행',
80
+ },
81
+ {
82
+ type: 'tip',
83
+ title: 'QA 과정에서의 저장 파일 보안 모범 사례',
84
+ html: '내부 빌드와 프로덕션 빌드에서 항상 서로 다른 디버그 키를 사용하세요. 경계 조건 버그를 확인할 때 로컬 트리 에디터를 사용하면 재컴파일 없이 빠르게 테스트할 수 있습니다.',
85
+ },
86
+ {
87
+ type: 'title',
88
+ level: 2,
89
+ text: '게임 상태 매개변수 가이드라인 표',
90
+ },
91
+ {
92
+ type: 'table',
93
+ headers: ['데이터 유형', '권장 형식', '일반적인 사용 사례', '난독화 레이어'],
94
+ rows: [
95
+ ['숫자 정수', '32비트 정수', '골드, 레벨, 경험치, 탄약', 'XOR 마스킹'],
96
+ ['불리언 플래그', '표준 불리언', '튜토리얼 완료, 보스 처치', 'Base64 / XOR'],
97
+ ['중첩된 객체', 'JSON 계층 구조', '플레이어 인벤토리, 스킬 트리', 'Base64 인코딩'],
98
+ ['타임스탬프 문자열', 'ISO 8601 UTC', '일일 출석, 저장 시간', 'XOR 마스킹'],
99
+ ],
100
+ },
101
+ {
102
+ type: 'title',
103
+ level: 2,
104
+ text: '역공학 및 변조 방지 고려 사항',
105
+ },
106
+ {
107
+ type: 'paragraph',
108
+ html: '클라이언트 측 난독화는 일반 사용자의 저장 파일 수정을 방지하지만, XOR 연산과 Base64는 완벽한 암호화 알고리즘이 아닙니다. RenderDoc이나 x64dbg 같은 디버깅 도구를 사용하면 컴파일된 어셈블리에서 키 생성 루틴을 직접 분석할 수 있습니다. 멀티플레이어 게임의 경우 서버 측 검증이나 HMAC 서명 검증을 결합하는 것이 필수적입니다.',
109
+ },
110
+ ],
111
+ faqTitle: '자주 묻는 질문',
112
+ faq: [
113
+ {
114
+ question: '제 게임 저장 파일이 원격 서버로 업로드되나요?',
115
+ answer: '아니요. 모든 디코딩, JSON 트리 편집, 재암호화 작업은 100% 사용자의 웹 브라우저 JavaScript 엔진 내에서만 실행됩니다.',
116
+ },
117
+ {
118
+ question: 'Unity나 Godot 같은 게임 엔진에서 XOR 난독화는 어떻게 작동하나요?',
119
+ answer: '직렬화된 JSON 문자열의 UTF-8 바이트에 대해 지정된 비밀키 문자열과 비트 XOR 연산을 수행한 후 결과를 Base64로 인코딩합니다.',
120
+ },
121
+ ],
122
+ howTo: [
123
+ {
124
+ name: '저장 파일 불러오기 또는 붙여넣기',
125
+ text: '암호화된 저장 파일을 업로드하거나 예시 템플릿을 선택합니다.',
126
+ },
127
+ {
128
+ name: '디코딩 방식 및 키 선택',
129
+ text: 'Base64 또는 XOR 마스킹을 선택하고 비밀키를 입력한 후 디코딩을 클릭합니다.',
130
+ },
131
+ {
132
+ name: 'JSON 상태 수정',
133
+ text: '라이브 에디터를 통해 레벨, 골드, 아이템, 게임 플래그 값을 원하는 대로 수정합니다.',
134
+ },
135
+ {
136
+ name: '암호화 및 내보내기',
137
+ text: '출력 형식을 지정하고 게임 테스트에 사용할 저장 파일을 다운로드합니다.',
138
+ },
139
+ ],
140
+ schemas: [
141
+ {
142
+ '@context': 'https://schema.org',
143
+ '@type': 'SoftwareApplication',
144
+ name: '게임 저장 파일 에디터',
145
+ applicationCategory: 'DeveloperApplication',
146
+ operatingSystem: 'Any',
147
+ offers: {
148
+ '@type': 'Offer',
149
+ price: '0',
150
+ priceCurrency: 'KRW',
151
+ },
152
+ },
153
+ {
154
+ '@context': 'https://schema.org',
155
+ '@type': 'FAQPage',
156
+ mainEntity: [
157
+ {
158
+ '@type': 'Question',
159
+ name: '제 게임 저장 파일이 원격 서버로 업로드되나요?',
160
+ acceptedAnswer: {
161
+ '@type': 'Answer',
162
+ text: '아니요. 모든 처리 과정은 100% 브라우저 내부에서만 수행됩니다.',
163
+ },
164
+ },
165
+ ],
166
+ },
167
+ {
168
+ '@context': 'https://schema.org',
169
+ '@type': 'HowTo',
170
+ name: '암호화된 게임 저장 파일을 수정하는 방법',
171
+ step: [
172
+ {
173
+ '@type': 'HowToStep',
174
+ name: '저장 파일 불러오기',
175
+ text: '암호화된 저장 파일을 업로드합니다.',
176
+ },
177
+ ],
178
+ },
179
+ ],
180
+ bibliographyTitle: '참고 문헌 및 관련 자료',
181
+ bibliography: bibliographyEntries,
182
+ };