@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: 'edytor-plikow-zapisu-gier',
|
|
7
|
+
title: 'Edytor i Ofuskator Plików Zapisu Gier',
|
|
8
|
+
description: 'Odszyfruj, sprawdzaj, edytuj dane JSON i ponownie szyfruj pliki zapisu stanu gry przy użyciu Base64, maskowania XOR lub czystego tekstu 100% lokalnie w przeglądarce.',
|
|
9
|
+
ui: {
|
|
10
|
+
title: 'Edytor i Ofuskator Zapisu Stanu Gry',
|
|
11
|
+
subtitle: 'Bezpiecznie sprawdzaj, modyfikuj i szyfruj lokalne pliki zapisu bez przesyłania danych na serwer',
|
|
12
|
+
dropSaveFile: 'Przeciągnij i upuść plik zapisu gry tutaj',
|
|
13
|
+
orSelectFile: 'lub kliknij, aby wybrać plik z dysku',
|
|
14
|
+
encryptionMethod: 'Format Szyfrowania',
|
|
15
|
+
methodBase64: 'Kodowanie Base64',
|
|
16
|
+
methodXor: 'Maska XOR + Base64',
|
|
17
|
+
methodRaw: 'Czysty JSON / Nieszyfrowany',
|
|
18
|
+
xorKeyLabel: 'Tajny Klucz XOR',
|
|
19
|
+
xorKeyPlaceholder: 'np. MojTajnyKluczGry2026',
|
|
20
|
+
jsonRawTitle: 'Odszyfrowane Dane JSON (Edytor Na Żywo)',
|
|
21
|
+
encodeAndDownload: 'Zaszyfruj i Pobierz Plik Zapisu',
|
|
22
|
+
copyEncoded: 'Kopiuj Zaszyfrowany Tekst',
|
|
23
|
+
copiedNotice: 'Skopiowano do Schowka!',
|
|
24
|
+
decodedKeysCount: 'Liczba Parametrów',
|
|
25
|
+
dataSize: 'Rozmiar Danych',
|
|
26
|
+
detectedFormat: 'Wykryty Format',
|
|
27
|
+
exportPreviewLabel: 'Podgląd Zaszyfrowanego Wyjścia',
|
|
28
|
+
decodePanelTitle: 'Odszyfrowywanie i Edytor JSON Na Żywo',
|
|
29
|
+
exportPanelTitle: 'Zaszyfrowane Dane Wyjściowe',
|
|
30
|
+
decodeError: 'Nie udało się odszyfrować pliku zapisu gry',
|
|
31
|
+
bytesUnit: 'B',
|
|
32
|
+
},
|
|
33
|
+
seo: [
|
|
34
|
+
{
|
|
35
|
+
type: 'title',
|
|
36
|
+
level: 2,
|
|
37
|
+
text: 'Bezpieczeństwo i Protokoły Ofuskacji Plików Zapisu Gier',
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
type: 'paragraph',
|
|
41
|
+
html: 'Gry komputerowe i mobilne regularnie szeregują stan postępu gracza w trwałych formatach pamięci masowej, aby zachować stan ekwipunku, odblokowane poziomy, atrybuty postaci oraz flagi fabularne między sesjami rozgrywki. Aby zapobiec bezpośrednim modyfikacjom dokonywanym przez użytkowników w prostych edytorach tekstu, studia deweloperskie stosują ofuskację plików zapisu za pomocą schematów kodowania binarnego, takich jak Base64, lub bitowego maskowania XOR przy użyciu tajnego klucza. Podczas wewnętrznych testów kontroli jakości QA i debugowania, zespoły programistów potrzebują natychmiastowej możliwości inspekcji struktur JSON, testowania wartości brzegowych i ponownego szyfrowania danych bez konieczności ponownej kompilacji całej gry.',
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
type: 'stats',
|
|
45
|
+
columns: 4,
|
|
46
|
+
items: [
|
|
47
|
+
{ label: 'Prywatność Przetwarzania', value: '100% Lokalnie' },
|
|
48
|
+
{ label: 'Obsługiwane Dekodery', value: 'Base64 / XOR / JSON' },
|
|
49
|
+
{ label: 'Opóźnienie Dekodowania', value: '0 ms' },
|
|
50
|
+
{ label: 'Ryzyko Wycieku Danych', value: 'Zero' },
|
|
51
|
+
],
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
type: 'title',
|
|
55
|
+
level: 2,
|
|
56
|
+
text: 'Porównanie Schematów Ofuskacji',
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
type: 'comparative',
|
|
60
|
+
columns: 3,
|
|
61
|
+
items: [
|
|
62
|
+
{
|
|
63
|
+
title: 'Kodowanie Base64',
|
|
64
|
+
description: 'Szybka konwersja tekstu zapobiegająca przypadkowej edycji w notatniku, lecz niezapewniająca bezpieczeństwa kryptograficznego.',
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
title: 'Maskowanie XOR + Base64',
|
|
68
|
+
description: 'Standardowa praktyka w grach niezależnych. Łączy bajty tekstu z tajnym kluczem w celu ochrony przed edytorami pamięci.',
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
title: 'Czysty JSON',
|
|
72
|
+
description: 'Czytelny plik zapisu bez szyfrowania. Idealny do wczesnego prototypowania oraz wewnętrznych testów zespołu.',
|
|
73
|
+
},
|
|
74
|
+
],
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
type: 'title',
|
|
78
|
+
level: 2,
|
|
79
|
+
text: 'Praktyki Testowania QA do Weryfikacji Stanu Gry',
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
type: 'tip',
|
|
83
|
+
title: 'Najlepsze Praktyki Bezpieczeństwa Zapisów w QA',
|
|
84
|
+
html: 'Zawsze utrzymuj osobne klucze debugowania dla wersji wewnętrznych i produkcyjnych. Podczas weryfikacji błędów używaj lokalnych edytorów, aby wymusić wartości graniczne ekwipunku bez kompilowania kodu gry.',
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
type: 'title',
|
|
88
|
+
level: 2,
|
|
89
|
+
text: 'Tabela Wytycznych dla Parametrów Stanu Gry',
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
type: 'table',
|
|
93
|
+
headers: ['Typ Danych', 'Zalecany Format', 'Częste Zastosowanie', 'Warstwa Ofuskacji'],
|
|
94
|
+
rows: [
|
|
95
|
+
['Liczby Całkowite', '32-bitowy Integer', 'Monety, Poziom, XP, Amunicja', 'Maska XOR'],
|
|
96
|
+
['Flagi Logiczne', 'Standardowy Boolean', 'Samouczek Ukończony, Boss Pokonany', 'Base64 / XOR'],
|
|
97
|
+
['Obiekty Zagnieżdżone', 'Hierarchia JSON', 'Ekwipunek Gracza, Drzewo Umiejętności', 'Kodowanie Base64'],
|
|
98
|
+
['Znaczniki Czasu', 'ISO 8601 UTC', 'Codzienny Logowanie, Czas Zapisu', 'Maska XOR'],
|
|
99
|
+
],
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
type: 'title',
|
|
103
|
+
level: 2,
|
|
104
|
+
text: 'Inżynieria Wsteczna i Ochrona Przed Modyfikacją',
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
type: 'paragraph',
|
|
108
|
+
html: 'Choć ofuskacja po stronie klienta zapobiega edycji plików przez niedoświadczonych graczy, maskowanie XOR i Base64 nie są pełnymi algorytmami kryptograficznymi. Narzędzia do analizy pamięci, takie jak RenderDoc czy x64dbg, mogą odczytać procedury generowania kluczy bezpośrednio z zebranych plików wykonywalnych. W grach wieloosobowych niezbędna jest weryfikacja po stronie serwera lub stosowanie podpisów kryptograficznych HMAC.',
|
|
109
|
+
},
|
|
110
|
+
],
|
|
111
|
+
faqTitle: 'Często Zadawane Pytania',
|
|
112
|
+
faq: [
|
|
113
|
+
{
|
|
114
|
+
question: 'Czy moje pliki zapisu gry są przesyłane na zewnętrzny serwer?',
|
|
115
|
+
answer: 'Nie. Cały proces dekodowania, edycji drzewa JSON i ponownego szyfrowania odbywa się w 100% wewnątrz Twojej przeglądarki internetowej.',
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
question: 'Jak działa ofuskacja kluczem XOR w silnikach takich jak Unity lub Godot?',
|
|
119
|
+
answer: 'Ofuskacja XOR wykonuje operację bitową XOR na bajtach UTF-8 ciągu JSON przy użyciu znaków tajnego klucza, a następnie przekształca wynik do formatu Base64.',
|
|
120
|
+
},
|
|
121
|
+
],
|
|
122
|
+
howTo: [
|
|
123
|
+
{
|
|
124
|
+
name: 'Wczytaj lub Wklej Plik Zapisu',
|
|
125
|
+
text: 'Prześlij swój zaszyfrowany plik zapisu stanu gry lub przeciągnij go do strefy zrzutu.',
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
name: 'Wybierz Metodę Dekodowania i Klucz',
|
|
129
|
+
text: 'Wybierz Base64 lub Maskowanie XOR i wprowadź tajny klucz gry.',
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
name: 'Edytuj Stan JSON',
|
|
133
|
+
text: 'Zmieniaj poziomy, złoto, przedmioty w ekwipunku oraz flagi gry bezpośrednio w edytorze na żywo.',
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
name: 'Zaszyfruj i Eksportuj',
|
|
137
|
+
text: 'Pobierz zmodyfikowany plik zapisu przygotowany do testów w grze.',
|
|
138
|
+
},
|
|
139
|
+
],
|
|
140
|
+
schemas: [
|
|
141
|
+
{
|
|
142
|
+
'@context': 'https://schema.org',
|
|
143
|
+
'@type': 'SoftwareApplication',
|
|
144
|
+
name: 'Edytor Plików Zapisu Gier',
|
|
145
|
+
applicationCategory: 'DeveloperApplication',
|
|
146
|
+
operatingSystem: 'Any',
|
|
147
|
+
offers: {
|
|
148
|
+
'@type': 'Offer',
|
|
149
|
+
price: '0',
|
|
150
|
+
priceCurrency: 'PLN',
|
|
151
|
+
},
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
'@context': 'https://schema.org',
|
|
155
|
+
'@type': 'FAQPage',
|
|
156
|
+
mainEntity: [
|
|
157
|
+
{
|
|
158
|
+
'@type': 'Question',
|
|
159
|
+
name: 'Czy moje pliki zapisu gry są przesyłane na zewnętrzny serwer?',
|
|
160
|
+
acceptedAnswer: {
|
|
161
|
+
'@type': 'Answer',
|
|
162
|
+
text: 'Nie. Całe przetwarzanie odbywa się w 100% lokalnie w przeglądarce.',
|
|
163
|
+
},
|
|
164
|
+
},
|
|
165
|
+
],
|
|
166
|
+
},
|
|
167
|
+
{
|
|
168
|
+
'@context': 'https://schema.org',
|
|
169
|
+
'@type': 'HowTo',
|
|
170
|
+
name: 'Jak Edytować Zaszyfrowane Pliki Zapisu Gier',
|
|
171
|
+
step: [
|
|
172
|
+
{
|
|
173
|
+
'@type': 'HowToStep',
|
|
174
|
+
name: 'Wczytaj Plik Zapisu',
|
|
175
|
+
text: 'Prześlij zaszyfrowany plik zapisu.',
|
|
176
|
+
},
|
|
177
|
+
],
|
|
178
|
+
},
|
|
179
|
+
],
|
|
180
|
+
bibliographyTitle: 'Referencje i Dalsza Lektura',
|
|
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-salvamento-jogo',
|
|
7
|
+
title: 'Editor e Ofuscador de Save de Jogo',
|
|
8
|
+
description: 'Descriptografe, inspecione, edite payloads JSON e criptografe arquivos de save de jogos usando Base64, máscara XOR ou texto simples 100% localmente no navegador.',
|
|
9
|
+
ui: {
|
|
10
|
+
title: 'Editor e Ofuscador de Save de Jogo',
|
|
11
|
+
subtitle: 'Inspecione, modifique e criptografe arquivos de save locais com segurança e sem envio a servidores',
|
|
12
|
+
dropSaveFile: 'Arraste e solte o arquivo de save aqui',
|
|
13
|
+
orSelectFile: 'ou clique para selecionar um arquivo local',
|
|
14
|
+
encryptionMethod: 'Formato de Criptografia',
|
|
15
|
+
methodBase64: 'Codificação Base64',
|
|
16
|
+
methodXor: 'Máscara XOR + Base64',
|
|
17
|
+
methodRaw: 'JSON Simples / Não Criptografado',
|
|
18
|
+
xorKeyLabel: 'Chave Secreta XOR',
|
|
19
|
+
xorKeyPlaceholder: 'ex. MinhaChaveSecreta2026',
|
|
20
|
+
jsonRawTitle: 'Payload JSON Decodificado (Editor em Tempo Real)',
|
|
21
|
+
encodeAndDownload: 'Criptografar e Baixar Arquivo',
|
|
22
|
+
copyEncoded: 'Copiar Texto Criptografado',
|
|
23
|
+
copiedNotice: 'Copiado para a Área de Transferência!',
|
|
24
|
+
decodedKeysCount: 'Total de Parâmetros',
|
|
25
|
+
dataSize: 'Tamanho do Payload',
|
|
26
|
+
detectedFormat: 'Formato Detectado',
|
|
27
|
+
exportPreviewLabel: 'Pré-visualização da Saída Criptografada',
|
|
28
|
+
decodePanelTitle: 'Decodificação e Editor JSON em Tempo Real',
|
|
29
|
+
exportPanelTitle: 'Payload de Saída Re Criptografado',
|
|
30
|
+
decodeError: 'Falha ao decodificar o arquivo de save',
|
|
31
|
+
bytesUnit: 'B',
|
|
32
|
+
},
|
|
33
|
+
seo: [
|
|
34
|
+
{
|
|
35
|
+
type: 'title',
|
|
36
|
+
level: 2,
|
|
37
|
+
text: 'Segurança e Protocolos de Ofuscação em Saves de Jogos',
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
type: 'paragraph',
|
|
41
|
+
html: 'Os videogames serializam o progresso do jogador em formatos de armazenamento persistentes para manter inventários, níveis desbloqueados e atributos ao longo das sessões. Para evitar modificações diretas em editores de texto por parte dos usuários, os estúdios ofuscam arquivos de save com esquemas de codificação binária como Base64 ou máscaras XOR bit a bit combinadas com uma chave secreta. Durante os testes de controle de qualidade QA e depuração de operações ao vivo, as equipes de desenvolvimento precisam da capacidade imediata de inspecionar estruturas JSON brutas, forçar estados limite de teste e re-criptografar os dados modificados para implantação sem a necessidade de recompilar executáveis.',
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
type: 'stats',
|
|
45
|
+
columns: 4,
|
|
46
|
+
items: [
|
|
47
|
+
{ label: 'Privacidade de Processamento', value: '100% Local' },
|
|
48
|
+
{ label: 'Decodificadores Suportados', value: 'Base64 / XOR / JSON' },
|
|
49
|
+
{ label: 'Latência', value: '0 ms' },
|
|
50
|
+
{ label: 'Risco de Vazamento', value: 'Zero' },
|
|
51
|
+
],
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
type: 'title',
|
|
55
|
+
level: 2,
|
|
56
|
+
text: 'Comparação de Esquemas de Ofuscação',
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
type: 'comparative',
|
|
60
|
+
columns: 3,
|
|
61
|
+
items: [
|
|
62
|
+
{
|
|
63
|
+
title: 'Codificação Base64',
|
|
64
|
+
description: 'Conversão rápida para evitar edições simples sem oferecer segurança criptográfica real.',
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
title: 'Máscara XOR + Base64',
|
|
68
|
+
description: 'Prática comum no desenvolvimento indie. Mistura bytes com uma chave secreta contra editores de memória.',
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
title: 'Payload JSON Simples',
|
|
72
|
+
description: 'Save legível sem criptografia. Ideal para prototipagem e builds de depuração.',
|
|
73
|
+
},
|
|
74
|
+
],
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
type: 'title',
|
|
78
|
+
level: 2,
|
|
79
|
+
text: 'Práticas de Teste de QA para Saves',
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
type: 'tip',
|
|
83
|
+
title: 'Melhores Práticas em Testes de QA',
|
|
84
|
+
html: 'Mantenha chaves de depuração separadas para builds internas. Use inspetores locais para testar limites sem recompilar o código do jogo.',
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
type: 'title',
|
|
88
|
+
level: 2,
|
|
89
|
+
text: 'Diretrizes de Parâmetros do Jogo',
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
type: 'table',
|
|
93
|
+
headers: ['Tipo de Dado', 'Formato Recomendado', 'Caso de Uso', 'Camada de Ofuscação'],
|
|
94
|
+
rows: [
|
|
95
|
+
['Inteiros Numéricos', 'Inteiro 32-bit', 'Moedas, Nível, XP, Munição', 'Máscara XOR'],
|
|
96
|
+
['Flags Booleanas', 'Booleano Padrão', 'Tutorial Concluído, Chefe Derrotado', 'Base64 / XOR'],
|
|
97
|
+
['Objetos Aninhados', 'Hierarquia JSON', 'Inventário, Habilidades', 'Base64'],
|
|
98
|
+
['Timestamps', 'ISO 8601 UTC', 'Login Diário, Timestamp de Save', 'Máscara XOR'],
|
|
99
|
+
],
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
type: 'title',
|
|
103
|
+
level: 2,
|
|
104
|
+
text: 'Engenharia Reversa e Anti Adulteração',
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
type: 'paragraph',
|
|
108
|
+
html: 'Embora a ofuscação no cliente evite edições casuais, XOR e Base64 não são criptografia forte. Ferramentas de análise de memória como RenderDoc ou x64dbg podem inspecionar rotinas de geração de chaves em código compilado. Para jogos competitivos, assinaturas HMAC ou validações no servidor são necessárias para detectar alterações.',
|
|
109
|
+
},
|
|
110
|
+
],
|
|
111
|
+
faqTitle: 'Perguntas Frequentes',
|
|
112
|
+
faq: [
|
|
113
|
+
{
|
|
114
|
+
question: 'Meus arquivos são enviados para algum servidor?',
|
|
115
|
+
answer: 'Não. Todo o processo acontece 100% no seu navegador.',
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
question: 'Como funciona a ofuscação XOR no Unity ou Godot?',
|
|
119
|
+
answer: 'A ofuscação XOR aplica operações bit a bit nos bytes da string JSON usando uma chave secreta.',
|
|
120
|
+
},
|
|
121
|
+
],
|
|
122
|
+
howTo: [
|
|
123
|
+
{
|
|
124
|
+
name: 'Carregar Arquivo',
|
|
125
|
+
text: 'Envie seu arquivo de save criptografado.',
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
name: 'Selecionar Método',
|
|
129
|
+
text: 'Escolha o formato e digite a chave secreta.',
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
name: 'Editar JSON',
|
|
133
|
+
text: 'Modifique os valores no editor em tempo real.',
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
name: 'Exportar e Baixar',
|
|
137
|
+
text: 'Baixe o novo arquivo modificado para testar.',
|
|
138
|
+
},
|
|
139
|
+
],
|
|
140
|
+
schemas: [
|
|
141
|
+
{
|
|
142
|
+
'@context': 'https://schema.org',
|
|
143
|
+
'@type': 'SoftwareApplication',
|
|
144
|
+
name: 'Editor de Save de Jogo',
|
|
145
|
+
applicationCategory: 'DeveloperApplication',
|
|
146
|
+
operatingSystem: 'Any',
|
|
147
|
+
offers: {
|
|
148
|
+
'@type': 'Offer',
|
|
149
|
+
price: '0',
|
|
150
|
+
priceCurrency: 'BRL',
|
|
151
|
+
},
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
'@context': 'https://schema.org',
|
|
155
|
+
'@type': 'FAQPage',
|
|
156
|
+
mainEntity: [
|
|
157
|
+
{
|
|
158
|
+
'@type': 'Question',
|
|
159
|
+
name: 'Meus arquivos são enviados para algum servidor?',
|
|
160
|
+
acceptedAnswer: {
|
|
161
|
+
'@type': 'Answer',
|
|
162
|
+
text: 'Não. Todo o processo acontece 100% no seu navegador.',
|
|
163
|
+
},
|
|
164
|
+
},
|
|
165
|
+
],
|
|
166
|
+
},
|
|
167
|
+
{
|
|
168
|
+
'@context': 'https://schema.org',
|
|
169
|
+
'@type': 'HowTo',
|
|
170
|
+
name: 'Como Editar Saves de Jogos',
|
|
171
|
+
step: [
|
|
172
|
+
{
|
|
173
|
+
'@type': 'HowToStep',
|
|
174
|
+
name: 'Carregar Arquivo',
|
|
175
|
+
text: 'Envie seu arquivo de save criptografado.',
|
|
176
|
+
},
|
|
177
|
+
],
|
|
178
|
+
},
|
|
179
|
+
],
|
|
180
|
+
bibliographyTitle: 'Referências e Leituras Adicionais',
|
|
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: 'redaktor-sohraneniy-igr',
|
|
7
|
+
title: 'Редактор и Обфускатор Файлов Сохранений Игр',
|
|
8
|
+
description: 'Расшифровывайте, проверяйте, редактируйте JSON данные и повторно зашифровывайте файлы сохранений игр с помощью Base64, XOR или открытого текста 100% локально в браузере.',
|
|
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 с использованием секретного ключа. Во время внутреннего тестирования и отладки командам разработчиков требуется возможность оперативно проверять структуру данных 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 мс' },
|
|
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
|
+
['Логические Флаги', 'Стандартный Boolean', 'Обучение Завершено, Босс Побежден', '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% внутри вашего веб-браузера.',
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
question: 'Как работает обфускация XOR в игровых движках Unity или Godot?',
|
|
119
|
+
answer: 'Обфускация XOR выполняет побитовую операцию XOR над байтами UTF-8 JSON строки с использованием символов секретного ключа, после чего результат кодируется в 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: 'RUB',
|
|
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
|
+
};
|