@jjlmoya/utils-games-development 1.50.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.
- package/package.json +1 -1
- package/src/category/index.ts +3 -1
- package/src/entries.ts +8 -1
- package/src/tests/locale_completeness.test.ts +2 -2
- package/src/tests/tool_validation.test.ts +2 -2
- package/src/tool/audioLoopPointFinder/audio-loop-point-finder.css +322 -0
- package/src/tool/audioLoopPointFinder/audio-player.ts +84 -0
- package/src/tool/audioLoopPointFinder/bibliography.astro +6 -0
- package/src/tool/audioLoopPointFinder/bibliography.ts +16 -0
- package/src/tool/audioLoopPointFinder/client.ts +262 -0
- package/src/tool/audioLoopPointFinder/component.astro +147 -0
- package/src/tool/audioLoopPointFinder/dom-utils.ts +55 -0
- package/src/tool/audioLoopPointFinder/entry.ts +27 -0
- package/src/tool/audioLoopPointFinder/i18n/de.ts +211 -0
- package/src/tool/audioLoopPointFinder/i18n/en.ts +211 -0
- package/src/tool/audioLoopPointFinder/i18n/es.ts +211 -0
- package/src/tool/audioLoopPointFinder/i18n/fr.ts +211 -0
- package/src/tool/audioLoopPointFinder/i18n/id.ts +211 -0
- package/src/tool/audioLoopPointFinder/i18n/it.ts +211 -0
- package/src/tool/audioLoopPointFinder/i18n/ja.ts +211 -0
- package/src/tool/audioLoopPointFinder/i18n/ko.ts +211 -0
- package/src/tool/audioLoopPointFinder/i18n/nl.ts +211 -0
- package/src/tool/audioLoopPointFinder/i18n/pl.ts +211 -0
- package/src/tool/audioLoopPointFinder/i18n/pt.ts +211 -0
- package/src/tool/audioLoopPointFinder/i18n/ru.ts +211 -0
- package/src/tool/audioLoopPointFinder/i18n/sv.ts +211 -0
- package/src/tool/audioLoopPointFinder/i18n/tr.ts +211 -0
- package/src/tool/audioLoopPointFinder/i18n/zh.ts +211 -0
- package/src/tool/audioLoopPointFinder/index.ts +11 -0
- package/src/tool/audioLoopPointFinder/logic.test.ts +72 -0
- package/src/tool/audioLoopPointFinder/logic.ts +214 -0
- package/src/tool/audioLoopPointFinder/metadata-parser.ts +94 -0
- package/src/tool/audioLoopPointFinder/seo.astro +15 -0
- package/src/tool/audioLoopPointFinder/ui.ts +42 -0
- package/src/tool/audioLoopPointFinder/waveform-renderer.ts +53 -0
- package/src/tool/saveFileEditor/bibliography.astro +6 -0
- package/src/tool/saveFileEditor/bibliography.ts +12 -0
- package/src/tool/saveFileEditor/component.astro +351 -0
- package/src/tool/saveFileEditor/entry.ts +28 -0
- package/src/tool/saveFileEditor/game-save-file-editor.css +250 -0
- package/src/tool/saveFileEditor/i18n/de.ts +182 -0
- package/src/tool/saveFileEditor/i18n/en.ts +182 -0
- package/src/tool/saveFileEditor/i18n/es.ts +182 -0
- package/src/tool/saveFileEditor/i18n/fr.ts +182 -0
- package/src/tool/saveFileEditor/i18n/id.ts +182 -0
- package/src/tool/saveFileEditor/i18n/it.ts +182 -0
- package/src/tool/saveFileEditor/i18n/ja.ts +182 -0
- package/src/tool/saveFileEditor/i18n/ko.ts +182 -0
- package/src/tool/saveFileEditor/i18n/nl.ts +182 -0
- package/src/tool/saveFileEditor/i18n/pl.ts +182 -0
- package/src/tool/saveFileEditor/i18n/pt.ts +182 -0
- package/src/tool/saveFileEditor/i18n/ru.ts +182 -0
- package/src/tool/saveFileEditor/i18n/sv.ts +182 -0
- package/src/tool/saveFileEditor/i18n/tr.ts +182 -0
- package/src/tool/saveFileEditor/i18n/zh.ts +182 -0
- package/src/tool/saveFileEditor/index.ts +11 -0
- package/src/tool/saveFileEditor/logic.test.ts +69 -0
- package/src/tool/saveFileEditor/logic.ts +139 -0
- package/src/tool/saveFileEditor/seo.astro +15 -0
- package/src/tool/saveFileEditor/ui.ts +24 -0
- package/src/tools.ts +5 -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: 'editeur-fichier-sauvegarde-jeu',
|
|
7
|
+
title: 'Éditeur et Obfuscateur de Sauvegarde de Jeu',
|
|
8
|
+
description: 'Décryptez, inspectez, modifiez les payloads JSON et ré-encryptez les sauvegardes de jeu en utilisant Base64, masques XOR ou texte brut 100% localement dans votre navigateur.',
|
|
9
|
+
ui: {
|
|
10
|
+
title: 'Éditeur et Obfuscateur de Sauvegarde de Jeu',
|
|
11
|
+
subtitle: 'Inspectez, modifiez et chiffrez les fichiers de sauvegarde locaux en toute sécurité sans fuites de serveur',
|
|
12
|
+
dropSaveFile: 'Glissez-déposez le fichier de sauvegarde ici',
|
|
13
|
+
orSelectFile: 'ou cliquez pour parcourir un fichier local',
|
|
14
|
+
encryptionMethod: 'Format de Chiffrement',
|
|
15
|
+
methodBase64: 'Encodage Base64',
|
|
16
|
+
methodXor: 'Masque XOR + Base64',
|
|
17
|
+
methodRaw: 'JSON Brut / Non Chiffré',
|
|
18
|
+
xorKeyLabel: 'Clé Secrète XOR',
|
|
19
|
+
xorKeyPlaceholder: 'ex. MaCléSecrète2026',
|
|
20
|
+
jsonRawTitle: 'Payload JSON Décodé (Éditeur en Direct)',
|
|
21
|
+
encodeAndDownload: 'Chiffrer et Télécharger le Fichier',
|
|
22
|
+
copyEncoded: 'Copier le Texte Chiffré',
|
|
23
|
+
copiedNotice: 'Copié dans le Presse-papier !',
|
|
24
|
+
decodedKeysCount: 'Paramètres Totaux',
|
|
25
|
+
dataSize: 'Taille du Payload',
|
|
26
|
+
detectedFormat: 'Format Détecté',
|
|
27
|
+
exportPreviewLabel: 'Aperçu de la Sortie Chiffrée',
|
|
28
|
+
decodePanelTitle: 'Décodage et Éditeur JSON en Direct',
|
|
29
|
+
exportPanelTitle: 'Payload de Sortie Ré Encrypté',
|
|
30
|
+
decodeError: 'Échec du décodage du fichier de sauvegarde',
|
|
31
|
+
bytesUnit: 'Octets',
|
|
32
|
+
},
|
|
33
|
+
seo: [
|
|
34
|
+
{
|
|
35
|
+
type: 'title',
|
|
36
|
+
level: 2,
|
|
37
|
+
text: 'Sécurité et Protocoles d Obfuscation des Sauvegardes de Jeu',
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
type: 'paragraph',
|
|
41
|
+
html: 'Les jeux vidéo sérialisent l état de progression des joueurs dans des formats de stockage persistant afin de conserver l inventaire, les niveaux débloqués et les attributs du personnage au fil des sessions. Pour éviter toute altération directe dans des éditeurs de texte par les utilisateurs, les studios obfusquent les sauvegardes avec des schémas d encodage binaire comme Base64 ou des masques XOR bit à bit associées à une clé secrète. Lors des tests d assurance qualité QA et du débogage d opérations en direct, les équipes de développement ont besoin d un accès immédiat pour inspecter les structures JSON brutes, forcer des états limites et ré-encoder les données modifiées sans recompiler les exécutables.',
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
type: 'stats',
|
|
45
|
+
columns: 4,
|
|
46
|
+
items: [
|
|
47
|
+
{ label: 'Confidentialité Traitement', value: '100% Local' },
|
|
48
|
+
{ label: 'Décodeurs Supportés', value: 'Base64 / XOR / JSON' },
|
|
49
|
+
{ label: 'Latence de Décodage', value: '0 ms' },
|
|
50
|
+
{ label: 'Risque de Fuite', value: 'Zéro' },
|
|
51
|
+
],
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
type: 'title',
|
|
55
|
+
level: 2,
|
|
56
|
+
text: 'Comparaison des Schémas d Obfuscation',
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
type: 'comparative',
|
|
60
|
+
columns: 3,
|
|
61
|
+
items: [
|
|
62
|
+
{
|
|
63
|
+
title: 'Encodage Base64',
|
|
64
|
+
description: 'Conversion rapide empêchant les modifications basiques au bloc-notes sans offrir de sécurité cryptographique réelle.',
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
title: 'Masquage XOR + Base64',
|
|
68
|
+
description: 'Pratique courante dans le développement indie. Mélange les octets avec une clé secrète contre les éditeurs de mémoire.',
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
title: 'Payload JSON Brut',
|
|
72
|
+
description: 'Sauvegarde lisible non chiffrée. Idéal pour le prototypage initial et les builds de débogage internes.',
|
|
73
|
+
},
|
|
74
|
+
],
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
type: 'title',
|
|
78
|
+
level: 2,
|
|
79
|
+
text: 'Pratiques de Tests QA pour la Vérification d État',
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
type: 'tip',
|
|
83
|
+
title: 'Bonnes Pratiques de Sécurité des Sauvegardes en QA',
|
|
84
|
+
html: 'Conservez toujours des clés de débogage séparées pour les builds internes. Utilisez des inspecteurs locaux pour forcer les limites d inventaire sans recompiler le code du jeu.',
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
type: 'title',
|
|
88
|
+
level: 2,
|
|
89
|
+
text: 'Guide des Paramètres d État du Jeu',
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
type: 'table',
|
|
93
|
+
headers: ['Type de Données', 'Format Recommandé', 'Cas d Usage', 'Couche d Obfuscation'],
|
|
94
|
+
rows: [
|
|
95
|
+
['Entiers Numériques', 'Entier 32 bits', 'Pièces, Niveau, XP, Munitions', 'Masqué XOR'],
|
|
96
|
+
['Drapeaux Booléens', 'Booléen Standard', 'Tutoriel Terminé, Boss Vaincu', 'Base64 / XOR'],
|
|
97
|
+
['Objets Imbriqués', 'Hiérarchie JSON', 'Inventaire, Compétences', 'Encodé Base64'],
|
|
98
|
+
['Horodatages', 'ISO 8601 UTC', 'Récompense Quotidienne', 'Masqué XOR'],
|
|
99
|
+
],
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
type: 'title',
|
|
103
|
+
level: 2,
|
|
104
|
+
text: 'Considérations d Ingestion Inverse et Anti Altération',
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
type: 'paragraph',
|
|
108
|
+
html: 'Bien que l obfuscation côté client empêche les modifications occasionnelles, XOR et Base64 ne sont pas de vrais algorithmes cryptographiques. Des outils d analyse de mémoire comme RenderDoc ou x64dbg peuvent inspecter les routines de génération de clés dans les assemblages compilés. Pour les titres compétitifs, la validation serveur ou les signatures HMAC sont indispensables pour détecter toute altération.',
|
|
109
|
+
},
|
|
110
|
+
],
|
|
111
|
+
faqTitle: 'Foire Aux Questions',
|
|
112
|
+
faq: [
|
|
113
|
+
{
|
|
114
|
+
question: 'Mes fichiers de sauvegarde sont-ils envoyés à un serveur ?',
|
|
115
|
+
answer: 'Non. Tout le traitement se déroule à 100% localement dans votre navigateur web.',
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
question: 'Comment fonctionne l obfuscation XOR dans Unity ou Godot ?',
|
|
119
|
+
answer: 'L obfuscation XOR applique une opération bit à bit sur les octets UTF-8 de la chaîne JSON contre une clé secrète.',
|
|
120
|
+
},
|
|
121
|
+
],
|
|
122
|
+
howTo: [
|
|
123
|
+
{
|
|
124
|
+
name: 'Charger un Fichier',
|
|
125
|
+
text: 'Téléversez votre fichier de sauvegarde chiffré.',
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
name: 'Sélectionner la Clé',
|
|
129
|
+
text: 'Sélectionnez Base64 ou XOR et entrez la clé secrète.',
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
name: 'Éditer le JSON',
|
|
133
|
+
text: 'Modifiez les valeurs directement dans l éditeur en direct.',
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
name: 'Exporter et Télécharger',
|
|
137
|
+
text: 'Téléchargez le nouveau fichier pour vos tests.',
|
|
138
|
+
},
|
|
139
|
+
],
|
|
140
|
+
schemas: [
|
|
141
|
+
{
|
|
142
|
+
'@context': 'https://schema.org',
|
|
143
|
+
'@type': 'SoftwareApplication',
|
|
144
|
+
name: 'Éditeur de Sauvegarde de Jeu',
|
|
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: 'Mes fichiers de sauvegarde sont-ils envoyés à un serveur ?',
|
|
160
|
+
acceptedAnswer: {
|
|
161
|
+
'@type': 'Answer',
|
|
162
|
+
text: 'Non. Tout le traitement se déroule à 100% localement.',
|
|
163
|
+
},
|
|
164
|
+
},
|
|
165
|
+
],
|
|
166
|
+
},
|
|
167
|
+
{
|
|
168
|
+
'@context': 'https://schema.org',
|
|
169
|
+
'@type': 'HowTo',
|
|
170
|
+
name: 'Comment Éditer des Sauvegardes de Jeu',
|
|
171
|
+
step: [
|
|
172
|
+
{
|
|
173
|
+
'@type': 'HowToStep',
|
|
174
|
+
name: 'Charger un Fichier',
|
|
175
|
+
text: 'Téléversez votre fichier de sauvegarde.',
|
|
176
|
+
},
|
|
177
|
+
],
|
|
178
|
+
},
|
|
179
|
+
],
|
|
180
|
+
bibliographyTitle: 'Références et Lectures Complémentaires',
|
|
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: 'editor-file-simpan-game',
|
|
7
|
+
title: 'Editor dan Obfuskator File Simpan Game',
|
|
8
|
+
description: 'Dekripsi, inspeksi, edit payload JSON, dan enkripsi ulang file simpanan game menggunakan Base64, XOR masking, atau teks polos 100% lokal di browser Anda.',
|
|
9
|
+
ui: {
|
|
10
|
+
title: 'Editor & Obfuskator Simpanan Game',
|
|
11
|
+
subtitle: 'Inspeksi, modifikasi, dan enkripsi file status simpanan lokal secara aman tanpa kebocoran server',
|
|
12
|
+
dropSaveFile: 'Tarik & lepas file simpanan game di sini',
|
|
13
|
+
orSelectFile: 'atau klik untuk menelusuri file lokal',
|
|
14
|
+
encryptionMethod: 'Format Enkripsi',
|
|
15
|
+
methodBase64: 'Pengodean Base64',
|
|
16
|
+
methodXor: 'Masking XOR + Base64',
|
|
17
|
+
methodRaw: 'JSON Polos / Tanpa Enkripsi',
|
|
18
|
+
xorKeyLabel: 'Kunci Rahasia XOR',
|
|
19
|
+
xorKeyPlaceholder: 'mis. KunciRahasiaGameSaya2026',
|
|
20
|
+
jsonRawTitle: 'Payload JSON Terdekode (Editor Langsung)',
|
|
21
|
+
encodeAndDownload: 'Enkripsi & Unduh File Simpanan',
|
|
22
|
+
copyEncoded: 'Salin Teks Terenkripsi',
|
|
23
|
+
copiedNotice: 'Tersalin ke Papan Klip!',
|
|
24
|
+
decodedKeysCount: 'Total Parameter',
|
|
25
|
+
dataSize: 'Ukuran Payload',
|
|
26
|
+
detectedFormat: 'Format Terdeteksi',
|
|
27
|
+
exportPreviewLabel: 'Pratinjau Hasil Terenkripsi',
|
|
28
|
+
decodePanelTitle: 'Dekode dan Editor JSON Langsung',
|
|
29
|
+
exportPanelTitle: 'Payload Hasil Enkripsi Ulang',
|
|
30
|
+
decodeError: 'Gagal mendekode file simpanan game',
|
|
31
|
+
bytesUnit: 'B',
|
|
32
|
+
},
|
|
33
|
+
seo: [
|
|
34
|
+
{
|
|
35
|
+
type: 'title',
|
|
36
|
+
level: 2,
|
|
37
|
+
text: 'Keamanan dan Protokol Obfuskasi File Simpan Game',
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
type: 'paragraph',
|
|
41
|
+
html: 'Game komputer dan seluler secara rutin menyerialisasikan status kemajuan pemain ke dalam format penyimpanan persisten untuk mempertahankan jumlah inventaris, tahapan yang terbuka, atribut pemain, dan bendera narasi di seluruh sesi permainan. Untuk mencegah manipulasi langsung oleh pengguna akhir melalui editor teks biasa, studio game mengobfuskasikan file simpanan menggunakan skema pengodean biner seperti Base64 atau masking bitwise XOR terhadap kunci string rahasia. Selama pengujian kontrol kualitas QA internal dan debug operasi langsung, tim pengembang memerlukan kemampuan instan untuk memeriksa struktur JSON mentah, memaksakan status uji batas, dan mengenkripsi ulang payload yang dimodifikasi untuk penyebaran tanpa perlu mengompilasi ulang biner game.',
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
type: 'stats',
|
|
45
|
+
columns: 4,
|
|
46
|
+
items: [
|
|
47
|
+
{ label: 'Privasi Pemrosesan Klien', value: '100% Lokal' },
|
|
48
|
+
{ label: 'Dekoder Ditingkatkan', value: 'Base64 / XOR / JSON' },
|
|
49
|
+
{ label: 'Latensi Dekode', value: '0 ms' },
|
|
50
|
+
{ label: 'Risiko Kebocoran Data', value: 'Nol' },
|
|
51
|
+
],
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
type: 'title',
|
|
55
|
+
level: 2,
|
|
56
|
+
text: 'Perbandingan Skema Obfuskasi',
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
type: 'comparative',
|
|
60
|
+
columns: 3,
|
|
61
|
+
items: [
|
|
62
|
+
{
|
|
63
|
+
title: 'Pengodean Base64',
|
|
64
|
+
description: 'Konversi teks cepat yang mencegah pengeditan teks kasual di notepad biasa tanpa menawarkan keamanan kriptografi nyata.',
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
title: 'Masking XOR + Base64',
|
|
68
|
+
description: 'Praktik standar dalam pengembangan game indie. Menggabungkan byte teks dengan kunci rahasia khusus untuk mencegah editor memori.',
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
title: 'Payload JSON Polos',
|
|
72
|
+
description: 'Status simpanan terbaca tanpa enkripsi. Ideal untuk pembuatan prototipe awal dan iterasi tim internal.',
|
|
73
|
+
},
|
|
74
|
+
],
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
type: 'title',
|
|
78
|
+
level: 2,
|
|
79
|
+
text: 'Praktik Pengujian QA untuk Verifikasi Status',
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
type: 'tip',
|
|
83
|
+
title: 'Praktik Terbaik Keamanan Simpanan selama QA',
|
|
84
|
+
html: 'Selalu pertahankan kunci debug terpisah untuk build internal dan build produksi. Saat memverifikasi bug batas, gunakan inspektur lokal untuk memaksakan batas inventaris dan statistik tanpa mengompilasi ulang kode game.',
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
type: 'title',
|
|
88
|
+
level: 2,
|
|
89
|
+
text: 'Tabel Panduan Parameter Status Game',
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
type: 'table',
|
|
93
|
+
headers: ['Tipe Data', 'Format Direkomendasikan', 'Kasus Penggunaan Umum', 'Lapisan Obfuskasi'],
|
|
94
|
+
rows: [
|
|
95
|
+
['Integer Numerik', 'Integer 32-bit', 'Koin, Level, XP, Amunisi', 'Termasker XOR'],
|
|
96
|
+
['Bendera Boolean', 'Boolean Standar', 'Tutorial Selesai, Bos Kalahkan', 'Base64 / XOR'],
|
|
97
|
+
['Objek Bersarang', 'Hierarki JSON', 'Inventaris Pemain, Pohon Keterampilan', 'Terkode Base64'],
|
|
98
|
+
['String Cap Waktu', 'ISO 8601 UTC', 'Login Harian, Cap Waktu Simpan', 'Termasker XOR'],
|
|
99
|
+
],
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
type: 'title',
|
|
103
|
+
level: 2,
|
|
104
|
+
text: 'Pertimbangan Rekayasa Balik dan Anti Tamper',
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
type: 'paragraph',
|
|
108
|
+
html: 'Meskipun obfuskasi di sisi klien mencegah pemain kasual mengubah file simpanan di editor teks standar, masking XOR dan pengodean Base64 bukanlah algoritma kriptografi sejati. Pemindai memori dan alat rekayasa balik seperti RenderDoc atau x64dbg dapat memeriksa rutinitas pembuatan kunci secara langsung dalam rakitan game terkompilasi. Untuk judul multi-pemain kompetitif, validasi server otoritatif atau tanda tangan HMAC kriptografi sangat penting.',
|
|
109
|
+
},
|
|
110
|
+
],
|
|
111
|
+
faqTitle: 'Pertanyaan yang Sering Diajukan',
|
|
112
|
+
faq: [
|
|
113
|
+
{
|
|
114
|
+
question: 'Apakah file simpanan game saya diunggah ke server jarak jauh?',
|
|
115
|
+
answer: 'Tidak. Semua proses dekode, penyuntingan pohon JSON, dan enkripsi ulang terjadi 100% di dalam mesin JavaScript browser web Anda.',
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
question: 'Bagaimana cara kerja obfuskasi kunci XOR di mesin game seperti Unity atau Godot?',
|
|
119
|
+
answer: 'Obfuskasi XOR mengiterasi byte UTF-8 dari string JSON yang diserialkan, menerapkan operasi XOR bitwise terhadap karakter kunci rahasia.',
|
|
120
|
+
},
|
|
121
|
+
],
|
|
122
|
+
howTo: [
|
|
123
|
+
{
|
|
124
|
+
name: 'Muat atau Tempel File Simpanan',
|
|
125
|
+
text: 'Unggah file simpanan terenkripsi Anda atau tarik ke area pengunggahan.',
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
name: 'Pilih Metode Dekode dan Kunci',
|
|
129
|
+
text: 'Pilih Base64 atau XOR Masking lalu masukkan kunci rahasia game.',
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
name: 'Edit Status JSON',
|
|
133
|
+
text: 'Gunakan editor langsung untuk menyesuaikan level, emas, inventaris, atau bendera game.',
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
name: 'Enkripsi dan Ekspor',
|
|
137
|
+
text: 'Unduh file simpanan terenkripsi baru yang siap untuk pengujian game.',
|
|
138
|
+
},
|
|
139
|
+
],
|
|
140
|
+
schemas: [
|
|
141
|
+
{
|
|
142
|
+
'@context': 'https://schema.org',
|
|
143
|
+
'@type': 'SoftwareApplication',
|
|
144
|
+
name: 'Editor File Simpan Game',
|
|
145
|
+
applicationCategory: 'DeveloperApplication',
|
|
146
|
+
operatingSystem: 'Any',
|
|
147
|
+
offers: {
|
|
148
|
+
'@type': 'Offer',
|
|
149
|
+
price: '0',
|
|
150
|
+
priceCurrency: 'USD',
|
|
151
|
+
},
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
'@context': 'https://schema.org',
|
|
155
|
+
'@type': 'FAQPage',
|
|
156
|
+
mainEntity: [
|
|
157
|
+
{
|
|
158
|
+
'@type': 'Question',
|
|
159
|
+
name: 'Apakah file simpanan game saya diunggah ke server jarak jauh?',
|
|
160
|
+
acceptedAnswer: {
|
|
161
|
+
'@type': 'Answer',
|
|
162
|
+
text: 'Tidak. Semua proses dekode dan penyuntingan terjadi 100% di dalam browser Anda.',
|
|
163
|
+
},
|
|
164
|
+
},
|
|
165
|
+
],
|
|
166
|
+
},
|
|
167
|
+
{
|
|
168
|
+
'@context': 'https://schema.org',
|
|
169
|
+
'@type': 'HowTo',
|
|
170
|
+
name: 'Cara Mengedit File Simpan Game Terenkripsi',
|
|
171
|
+
step: [
|
|
172
|
+
{
|
|
173
|
+
'@type': 'HowToStep',
|
|
174
|
+
name: 'Muat atau Tempel File Simpanan',
|
|
175
|
+
text: 'Unggah file simpanan terenkripsi Anda.',
|
|
176
|
+
},
|
|
177
|
+
],
|
|
178
|
+
},
|
|
179
|
+
],
|
|
180
|
+
bibliographyTitle: 'Referensi dan Bacaan Lebih Lanjut',
|
|
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: '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
|
+
};
|