Verileri paketlemek / şifrelemek için ne kullanıyorsunuz?


14

Gittikçe daha fazla oyun veri odaklı rotaya gidiyor, bu da kolay manipülasyon etrafında bir güvenlik katmanı olması gerektiği anlamına geliyor. Oyunların varlıklarını (ses, sanat, veri) tamamen topladığı yerde gördüm ve bunu nasıl yönettiklerini merak ediyorum? İçindeki varlıkları yönetmenize yardımcı olacak uygulamalar ve kütüphaneler var mı? Değilse, paketleme / paketleme / şifreleme için işaret edebileceğiniz iyi kaynaklar var mı?

Bu özel soru C ++ etrafında döner, ancak bunun nasıl C # / XNA'da yönetildiğini duymak için açık olurdu.

Sadece net olmak gerekirse - Bilgisayar korsanlığını önlemek için bir çözüm tasarlamaya hazır değilim. Temel düzeyde hepimiz 0'ları ve 1'leri manipüle ediyoruz. Ancak, oyunu oynayan kişilerin% 99'unun, oyun dünyasını oluşturmak için kullanılan XML dosyalarını değiştirmesini önlemek istiyoruz. Kaynaklarının tamamını bir araya getiren birçok oyun gördüm. Sadece kullandıkları yöntemleri merak ediyorum.


İyi bir soru,% 100 korumanın bir yolu olduğuna inanmama rağmen, sıkıştırmanın ve şaşırtmanın düzgün bir yolu olduğuna inanıyorum ve bu konuda daha fazla bilgi edinmek istiyorum ...
Prix

Sanatsal / işitsel öğelerinizin "hassas" olarak kabul edilip edilmeyeceğini sorgulamaya değer. Birçok oyun sağlıklı bir mod topluluğunu desteklemek için varlıklarını oyunculara açık bir şekilde maruz bırakır, bu da oyuna daha fazla değer katabilir (hatta geliştiriciye neredeyse hiçbir ücret ödemeden).
Ian Schreiber

Ben esas olarak veri odaklı bir oyun (örneğin xml dosyaları) sürücüler hassas verilerle ilgileniyorum. Ben sadece oyunların her şeyi bir veya iki dosya halinde topladığını gördüm.
David McGraw

4
Bu verilerle oyun oynayan oyuncuların sorunu nedir?
jsimmons

Yanıtlar:


8

İyi bir strateji, kendi arşiv biçiminizi sıfırdan yapmak ve arşivinizde tüm sıralı dosyaları depolamak yerine veri parçalarına işaret eden bir tabloyla dizine alınmış bir dizin haline getirmek, ardından dizin tablonuzu şifrelemek ve LZMA / bzip2.

Başka bir yaklaşım, burada ve orada prosedürel veri üreteçlerinin bitlerini kullanmaktır (Bu kadar ileri gitmek isterseniz, söz konusu jeneratörler için 'parametreler'i çevrimiçi bir sunucudan ekstra bir önlem olarak alabilirsiniz) Ve işin bir kısmını boşaltarak GPU'ya tam bellek dökülmelerini önleyebilir ve bazı performans kaybını telafi edebilirsiniz.

Yine de, genellikle son kullanıcıya hiçbir şey sunmadan, potansiyel problemler ve gereksiz hatalar dışında performans ve atık geliştirme süresini engelleyen teknikler buluyorum.

Yine de hiçbir şey% 100 güvenli değildir.


Bunun için +1. Sıkıştırma hem gizleme gereksinimini karşılar, hem de yükleme sürelerini ve uygulama ayak izini geliştirir. Verilerin arşivlenmesi / paketlenmesi yine de bir soyutlama katmanı gerektirecektir, bu nedenle onu yükleyebilen / açabilen bir şeyle birleştirmek çok fazla mühendislik olmamalıdır. Sıkıştırma yaparsanız, sıkıştırma / açma mantığını yükleme / arşivleme dosyalarından ayrı tuttuğunuzdan emin olurum. Bu şekilde daha iyi bir algoritmayı daha sonraki bir tarihte değiştirebilirsiniz, gerekli altyapı algoritmalar arasında değişmez.
MrCranky

@MrCranky: EA'nın .package (DBPF) arşiv biçimiyle (SPORE ve The Sims oyunlarında kullanılır) bunu nasıl yaptığına bakarsanız, bunu eylemde görürsünüz. Motorları, dizin tablosunda "sıkıştırma türü" için fazladan bir alana, hangi algoritmanın kullanılacağına ilişkin dahili bir koda sahiptir. Öbek türüne bağlı olarak farklı sıkıştırma algoritmaları kullanırlar (örneğin metin parçaları özel bir sıkıştırma kullanır) Kullandıkları sürümleme sistemi de modların ve geriye dönük uyumluluğun entegrasyonuna izin verir. DBPF biçimi hakkında daha fazla bilgi için: simswiki.info/DatabasePackedFile
voodooattack

İlginç şeyler: Sadece #define ile derleme zamanında yaptım, ancak çalışma zamanı bazı güzel olasılıklar açar (örneğin, oyununuz için her dosyayı yeniden oluşturmak zorunda kalmadan sıkıştırma türünüzü değiştirmek gibi).
MrCranky

11

Hassas verileri göndermeyin.

Orada hiçbir şekilde sadece oyun erişebilirsiniz böylece şifreli veriyi gemi. Gerçekten çok deneyebilirsiniz, ancak hızla DRM sorunlarına girersiniz.

Oyun varlıklarınızı meraklı gözlerden uzak tutmak istiyorsanız.

  1. sıkıştırmak
  2. xor dosya
  3. uzantıyı sıkıcı bir şeyle değiştirin (yani my_level.zip.xorkullanmayın my_level.map).

Bu, yaramaz kullanıcıların% 95'ini durduracaktır. Diğer% 5 ise ne yaparsanız yapın onu alacak.
Aslında zip ve gerek yok xor. Bunun yerine lzma kullanabilir ve bilinen bir anahtarla AES kullanabilirsiniz. Mesele, üzerinde çok fazla zaman harcamamaktır.


Çoğu oyundan genelde gördüğüm şey budur ... sizin için çerez.
Prix

2
Gerçekten sadece zip + rename muhtemelen yeterlidir.
coderanger

1
Ben öyle düşünmüyorum, That will stop 95% of mischeivieous users.onu kırmanın dışına çıkmayı seviyorum, hala gerçekten alacak insanlar olduğuna inanırken, hepsi olmasaydı ve her biri yapabiliyorsa takdir edeceğim. Bugünlerde çoğu 10 yaşında çocuklar dosyaları not defterinde açmayı ve yeniden adlandırmayı biliyorlar ...
Prix

1
Nasıl olduğunu biliyorum, evet. Hiç umursamayacak, hayır.
coderanger

zip + yeniden adlandırma yeterli değildir. Linux nadiren dosya türünü belirlemek için dosya uzantılarını kullanır. Bunun yerine ilk birkaç bayta bakar ve bunu türünü belirlemek için kullanır. Yeniden adlandırılmış bir zip hala Linux'ta bir zip olarak görünür. Windows XP bunu yapmaz, yine de uzantılar kullanır. Windows7'nin bunu nasıl yaptığını bilmiyorum, ancak gelecekte Windows'un benzer bir teknik kullanmasını bekliyorum.
deft_code

4

Bunun için büyük miktarda zaman harcamak muhtemelen aptalca. Doku ve model verilerini doğrudan GPU'dan almak için araçlar vardır ve sesler sanal bir geri döngü aygıtına kolayca yönlendirilebilir. Gerçekten güvenli olması gereken her şeyin bir sunucuda yaşaması ve yalnızca meydan okuma / yanıt yoluyla çalışması gerekir. İstemci veri doğrulaması yapmak başka bir hikaye, daha fazla Valve'ın -verify_all gibi. Bu zor, çünkü yerel yürütülebilir dosyayı zorlamak için güvenemezsiniz (ya da en azından son nokta anti-hile sisteminize güvendiğinizden daha fazla güvenemezsiniz, ki bu da aptalca bir fikirdir).


4

Benim işim antitamper yazılımında. Eski bir okul oyunu krakeri olan birini tanıyorum. Nefes almak gibi oyunları çatlatıyor. Onun gibi insanları durduramazsın. Oyununuz yeterince popülerse, oyununuzun birden fazla kırık sürümü, ne yaparsanız yapın, yayınlandıktan sadece birkaç gün sonra torrent sitelerine çarpar. Benim tavsiyem, bu ters mühendislik şeyi bıçaklama yapmak isteyebileceğini düşünen ortalama joe'yi dışarıda tutmak için çıplak asgari yapmaktır.


1
Amaç bu. Kesinlikle bilgisayar korsanlarıyla savaşma arzum yok.
David McGraw

1

Güzel soru ama bu cevaplaması kolay bir soru değil.
Veri güvenliği konusundaki deneyimlerime dayanarak aşağıdakileri düşünmeniz gerekir:

1) Bu veriler güvensiz ise neyi, kime ve etkisine güveniyorsunuz - güvenlik, risk değerlendirmesiyle ilgili sistematik teknik çözümlerden çok daha fazladır
2) Bu durumda platformunuzun masaüstü (örneğin Windows / OSX) olduğunu varsayıyorum. çekirdek düzeyinde güvenlik konusunda kendi girişimleri olan PS3 / Xenon gibi özel donanımlardan farklı bir sorun alanı (bunun geçerli bir çözüm olup olmadığı tartışmaya açıktır)
3) Şifreleme! = güvenlik. Şifreleme yalnızca verilerinizin okunamayacağını garanti eder, verilerinizin yazılamayacağını veya tekrar oynatılamayacağını / proxy yapılamayacağını garanti etmez .

Gereksinimleriniz kurcalamaya dayanıklı hale getirilecekse, verilerinizi hash etmeyi düşünmelisiniz (tercihen SHA-256 veya SHA-512 ile) Yine de tekrarlamak için bunun neden önemli olduğunu ve bilgisayarınıza güvenlik eklemekten ne kazandığınızı düşünün. sistemi.
Ayrıca, ürününüze şifreleme teknolojisi eklemenin ihracat kısıtlamaları (şifreleme teknolojisinin kısıtlı silah sınıfı teknolojisi inanıyor ya da inanmıyor olarak sınıflandırılmış) nedeniyle yasal etkileri olabileceğini bilmeye değerdir , bu nedenle bu yasal sorunların üstesinden gelen kütüphanelerin kullanılması tavsiye edilir.
Son olarak - asla, asla kendi şifreleme teknolojinizi kullanmayın - AES, Blowfish, RSA vb.Gibi iyi bilinen, belgelenmiş, araştırılmış algoritmaları kullanmayın

ps Ortak / Özel Anahtar, büyük miktarda veriyi şifrelemek için uygun veya pratik değildir, bu nedenle DRM / PGP vb. hibrit bir RSA + simetrik sistem kullanır, yani simetrik anahtarı RSA ile sabitleyin, ardından bu anahtarı kullanarak standart simetrik şifreleme yapın

Bu çok karmaşık bir konu ve kesinlikle adalet yapmadım

umarım yardımcı olur


1

Küçük (sıkıştırılabilir), gülünç derecede güvenli ve esnek olması için tasarlanmış ve oluşturulmuş (muhtemelen yapılandırılmış) bir format örneği istiyorsanız, Blizzard'ın MPQ formatına bakmalısınız.

http://wiki.devklog.net/index.php?title=The_MoPaQ_Archive_Format

Genel arşiv düzeni aşağıdaki gibidir:

Arşiv Üstbilgi Dosya Veri Dosya Verileri - Özel Dosyalar Karma Tablo Blok Tablosu Genişletilmiş Blok Tablosu Güçlü Dijital imza

Bu biçim HER ŞEYE sahiptir. Engellenebilir, genişletilmiş engellenebilir, sektörlere bölünmüş veriler (kolay akış için), keyfi olarak birleştirilebilen 7 (!) Sıkıştırma algoritması (ses sıkıştırması sayarsanız) desteği, zayıf dijital imza, güçlü dijital imza vb.

API'yı dosya mimarisiyle ilgilenen Blizzard'dan satın alsaydınız, ihtiyacınız olan her şeyi ve daha fazlasını elde edersiniz.


Bağlantı için teşekkürler, MPQ'nun ayrıntılarına daha fazla bakmayı hiç düşünmemiştim (ve genellikle kullanılamayacaklarını varsaydım)
Bill

Eğer bu kadar güvenliyse, neden bu dereceye kadar tersine değiştirildi ve hatta üçüncü parti kütüphaneler onunla etkileşime girsin mi? ;-)
coderanger

* .Mpq dosyalarıyla etkileşim için kullanılan çoğu (okuma: tümü) araç, bir adam tarafından yazılmış ve korunan Stormlib'e bağlıdır.

Bildiğim kadarıyla Stormlib, şifre çözme anahtarları yürütülebilir dosyada saklandığı için arşivin kaynaklandığı orijinal oyuna sahip olmanızı gerektirir. Bununla birlikte, bu kadar güvenli olmasının en büyük nedeni, içine girmenin imkansız olması değil. Ancak, net üzerinden gönderilen anında veriler için hiçbiri ikinci değildir. Veriler o kadar yoğun bir şekilde şifrelenir ki, üçüncü bir tarafın anında şifresini çözmesi boşuna olacaktır.

Aslında 'World of Warcraft' ile, Blizzard akış teknolojisine öncülük etti ve oyunu sabit sürücünüze indirilen tüm verilerin sadece yüzde birkaçıyla oynamanıza izin verdi. * .Mpq biçimi bu tür bir işte mükemmeldir. Oyunun resmi yayınlanmasından birkaç gün önce Starcraft 2 yükleyicisi Blizzard tarafından piyasaya sürüldüğünde, arşivlerinin oyunun piyasaya sürülmesinden sonraya kadar açılamayacak kadar şifreli olduklarından bahsetmiyoruz. : P

0

Bu son zamanlarda yeniden dirildiğinden, sorunuz (ve bu nedenle şu ana kadar tüm yanıtlar) yalnızca dosya yüklemeyle ilgileniyor gibi görünüyor, bu da yalnızca yüklemek isteyen yürütülebilir dosya kadar güvenli. PC'de gerçekten güvenli bir şey yoktur (sadece insanları geciktirirsiniz), sunuculardaki şeylere karşı kontrol edebilirsiniz, ancak bu kontrol bile çıkarılabilir, böylece ne olursa olsun modifiye exe çalıştırılabilir. Konsollar hala "güzel" güvenceler, bu yüzden çoğu durumda orada önemli dosyaların bir karma oluşturmak, daha sonra özel bir anahtar ile karma imzalamak, ortak anahtar kodu gömmek ve dosyaya karşı güvenli karma doğrulamak.

Konuşmaya başka bir saldırı atacağımı sanıyordum, sadece geçen yıl karşılaştığım bir şeydi, çünkü PC'ye çok fazla gönderme yapma eğiliminde değilim. Cheat Engine neredeyse kendi korsanlıklarınızı otomatik hale getiren çok düzenli bir programdır (yani herkes bunu kullanabilir). Yapabileceği şey oldukça gelişmiş, insanların sattığını gördüğüm birçok hack / hile bu veya gördüğümden çok benzer bir şeyle (tüm kitlesel pazarlarda) yapılır. Yine böyle bir şeye karşı koruyabileceğiniz bazı çalışmalarla, her şey oyunun ne kadar popüler olduğuna ve birinin rahatsız edecek kadar umurunda olduğuna bağlıdır.

Opps, şifreleme için iyi bir lib'den bahsetmeyi unuttu (C ++ 'da) LibTomCrypt .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.