Niestandardowy pakiet zawartości dla plików

13

Mam zamiar kupić sporo modeli pakietów ze strony internetowej do prototypowania mojej gry. W umowie stwierdza się, że muszę je chronić, aby uniemożliwić społeczeństwu dostęp do nich.

Pamiętam, że pracowałem z grami Valve. Używały one .gcf (plik zawartości gry), który w zasadzie był archiwum całej zawartości każdej gry. Zapakowali dźwięk / materiały / modele / mapy / itp. Uznałem, że opracowanie czegoś podobnego może nie być złym pomysłem i po prostu napisz małe narzędzie, które pozwoli mi dodawać / usuwać z niego pliki.

Problem w tym, że naprawdę nie mam pojęcia, jak zacząć od czegoś takiego. Wypróbowałem Google, ale nawet nie wiedziałem, czego szukać. Jeśli ktoś ma jakieś pomysły, linki, które mogą być przydatne lub cokolwiek innego, byłbym bardzo wdzięczny.

Aidan Knight
źródło

Odpowiedzi:

9

Przechowuj swoje dane w nieco niejasnym formacie archiwum, takim jak 7-Zip .

Daj im inne rozszerzenie pliku, aby zwykły użytkownik nie mógł ich łatwo otworzyć za pomocą programu zip.

Użyj physfs do odczytu i dostępu do tych plików. Umożliwia także pracę z plikami w katalogu lokalnym, dzięki czemu można łatwo przetestować nowe zasoby bez przebudowywania pakietów. Wysoce polecany.

Rozważ bardzo trywialne szyfrowanie treści, np. Szyfrowanie XOR . Napisz mały plik wsadowy lub skrypt, aby zbudować pakiety, szyfrując dane w miarę ich wchodzenia, i użyj tej samej funkcji do odszyfrowania danych w grze.

To nie powstrzyma zdeterminowanego użytkownika - nic nie będzie. Ale będzie wystarczająco dobry, aby spełnić wymagania zestawów modeli.

Kylotan
źródło
Ktoś polecił mi fizyka tamtej nocy. Ładna mała biblioteka.
greyfade
8

Jeśli tylko tworzysz prototypy, nie martwię się o spakowanie twoich zasobów do pliku GCF / ZIP / PAK; społeczeństwo nie zobaczy twojego prototypu!

Co więcej, GCF firmy Valve zapewnia tyle samo ochrony zawartości, co plik ZIP - czyli zero. Plik nie jest zaszyfrowany; możesz pobrać GCFScape, aby przeglądać i rozpakowywać jego zawartość.

Nie warto oddanie wysiłku w tworzeniu własnego systemu plików pakietu, chyba że mają szczególne potrzeby w tej chwili , że nie są spełniane przez ZIP plików lub własny mechanizm dostępu do plików w systemie operacyjnym; w rzeczywistości jedynymi powodami, o których mogę myśleć, są:

  • Zasłanianie zawartości (zabezpieczanie plików przed majstrowaniem ma swoje zastosowania; nadal sugeruję przesadę w stosunku do twoich bieżących potrzeb),
  • Przechowywanie dodatkowych metadanych dla poszczególnych plików w sposób specyficzny dla gry, aby w jakiś sposób pomóc w kierowaniu treścią,
  • Obejście ograniczeń systemu plików systemu operacyjnego, takich jak konieczność szybkiego dostępu do tysięcy małych plików lub zapewnienie ciągłego dostępu do danych. (Jest to defacto potrzeba podczas pracy na konsolach.)
Blair Holloway
źródło
Zgadzam się całkowicie. Problem w tym, że nie będę w stanie wydać wersji demo bez jakiejkolwiek formy ochrony. ZIP jest zbyt dobrze znany, PAK jest mniej więcej taki sam. Przynajmniej z niestandardowym formatem (Valve wymaga klucza CTX, który jest wbudowany w silnik gry, aby uzyskać dostęp do plików GCF) przeciętny Joe nie będzie w stanie uruchomić na nim narzędzia do ekstrakcji i wejść.
Aidan Knight
Ups, nie zdawałem sobie sprawy, że Enter nie pójdzie w dół. W każdym razie znalazłem tę nemesis.thewavelength.net/index.php?p=35, która wydaje się być biblioteką open source, która zapewnia funkcjonalność GCF niezależną od gier Valve. Problem, który tu widzę, polega na tym, że jest on zbyt solidny i szukałem czegoś nieco prostszego, aby stworzyć podstawową wersję, którą można by później rozwinąć. (Szczerze mówiąc, sposób, w jaki koduje, powoduje ból głowy)
Aidan Knight
4
Z ciekawości, czy ta umowa wspomina, w jaki sposób należy chronić ich zawartość?
Blair Holloway,
2
o to chodzi! Ponieważ tak naprawdę nie możesz go zabezpieczyć, obowiązkowe jest, abyś (jeśli nie jesteś głupi) dokładnie wiedziała, co ci niekompetenci chcą robić. W przeciwnym razie cokolwiek zrobisz, ponieważ to nie zadziała, możesz zostać pociągnięty do odpowiedzialności (nie robienia czegoś, czego nie można zrobić w pierwszej kolejności).
o0 ”.
3

Ten wymóg to bzdury.

Ponieważ gra może uzyskać dostęp do danych, a użytkownik ma dostęp do gry, jeśli jest wystarczająco wykwalifikowany i zdeterminowany, uda mu się przebudować format użyty do przechowywania danych i pobrać ewentualny klucz, jeśli jesteś wystarczająco głupi aby go zaszyfrować.

Nie możesz dodać zabezpieczeń. Powtarzam: po prostu NIE MOŻNA dodać bezpieczeństwa . Możesz jedynie dodać zaciemnienie, a zaciemnienie jest całkowicie bezcelowe, ponieważ - jak powiedziałem - użytkownik o wystarczających umiejętnościach i determinacji po prostu go złamie.

Nie podpisuj niczego, co prosi o coś, czego nie można zrobić.

o0 ”.
źródło
1
Nieprzejrzystość nie jest bezcelowa, ponieważ większość użytkowników nie ma „wystarczających umiejętności i determinacji”. To samo dotyczy zabezpieczenia twojego domu: każdy, kto naprawdę chce się do niego dostać, może to zrobić, ale nadal uważa się, że warto sprawiać, że jest to dla nich niewygodne.
Kylotan
Kontrapunkt: Niepewność jest bezcelowa, ponieważ w przeciwieństwie do włamania się do twojego domu, gdy ktoś włamie się do twojej gry, może to uczynić trywialnym dla każdego innego. (Z drugiej strony - Obscurity nie jest bezcelowe, ponieważ Brett potrzebuje modeli. Po prostu nie sądzę, że ta analogia się dobrze trzyma.)
Jeśli ktoś ukradnie kawałek złota z twojego domu, ma on twój kawałek złota. Jeśli ktoś pobierze Twój cenny model z pliku danych, może wykonać dowolną liczbę kopii. Więc nie, ten przykład nie działa, ponieważ tutaj nie ma znaczenia, ilu ludzi przebije twoją bezwartościową ochronę: jedna wystarczy.
o0 ”.
Jeden wystarczy, zakładając, że inni dbają wystarczająco, aby przestać patrzeć na swoje lokalne pliki i przejść do trybu online, aby przejrzeć, i pod warunkiem, że ktoś zadał sobie trud opublikowania rzeczy w Internecie (co jest nielegalne, podczas gdy przeglądanie lokalnej kopii nie jest), lub opublikowania instrukcje, które zakładają, że masz cierpliwość, aby z nimi przejść. Każda mała pomoc.
Kylotan
1
Każda mała pomoc w czym ? Uniemożliwianie użytkownikom oglądania twoich danych i nie robienie z tym nic nie jest tak bezcelowe, że zasmuca mnie to. Ten idiotyczny wymóg z pewnością istnieje, aby uniemożliwić innym osobom ponowne wykorzystanie tych danych, więc musisz dbać tylko o zdeterminowanych ludzi, którzy będą się starać i odniosą sukces (ponieważ, jak powiedziałem, na dłuższą metę po prostu nie mogą zawieść) .
o0 ”.
1

Wiele razy zauważam, że niestandardowe pakiety treści są zwykle archiwami .zip lub .rar z innym rozszerzeniem. Oczywiście nie jest to dobre, jeśli strona internetowa chce pewnego rodzaju niestandardowe szyfrowanie.

Christopher Horenstein
źródło
Tak, Ogre już obsługuje ładowanie zasobów poprzez plik zip. Ktoś wspomniany w pokoju czatowym tylko hasło do pliku zip, ale z dużą ilością narzędzi do ich złamania, to naprawdę nie jest mój pierwszy wybór. Naprawdę chciałbym zrobić coś podobnego do plików .gcf, z których korzysta Valve, ale nawet nie wiem, czego szukać, dopóki nie zaczynam.
Aidan Knight
Jeśli ktoś złamie plik zip, jaki jest twój problem? Naprawdę. Mogą złamać wszystko, co możesz na nich rzucić. Próbowałeś. Gdzie wyznaczasz granice tego, za co ci licencjodawcy mogą cię pociągać do odpowiedzialności?
Neverender
1

Kilka pomysłów:

1] Czy używałeś standardowego formatu modelu (np. .Obj lub .x), czy używasz niestandardowego formatu modelu podczas ładowania bezpośrednio do gry? Jeśli masz format niestandardowy i trzeba by było przebudować format modelu, aby uzyskać użyteczną formę, oznacza to, że masz już pewien poziom ochrony przed oportunistycznym programem do usuwania zasobów.

2] Punkt Kylotana na temat szyfrowania XOR jest doskonały, z wyjątkiem tego, że można szyfrować za pomocą pseudolosowej sekwencji generowanej przez liczbę (być może zaszczepioną przez skrót w nazwie pliku), aby uniknąć długich sekwencji zer w danych źródłowych pokazujących łańcuch szyfrowania. Oczywiście będziesz musiał odszyfrować swoje pliki natychmiast po ich załadowaniu, ale rozbicie zaszyfrowanego pliku na bloki, które można zrestartować, umożliwi rozpoczęcie odszyfrowywania w miejscu wielu wątków, jeśli naprawdę stanie się to obciążeniem w czasie ładowania . Ale poważnie wątpię, aby ten poziom „ochrony” był wymagany - szczególnie, jak powiedzieli inni, zdeterminowany rozpruwacz obejdzie go. na przykład. przechwytując wywołania losowania za pomocą biblioteki objazdów DLL i bezpośrednio odczytując bufory wierzchołków / bufory indeksów.

3] Będziesz musiał zapytać pierwotnego dostawcę zasobów o ich wymagania dotyczące ochrony, ale może to być tylko kwestia dodania informacji o prawach autorskich do zasobów na ekranie powitalnym programu i / lub do umowy EULA.

jpaver
źródło