Hallo ihr Lieben,
Eine Frage bezüglich Sound-Implementierung ... ich habe für mein Spiel rund 50 kurze Soundfiles, einige im .wav-Format, andere im .ogg-Format. Einige davon sind auch lizensiert, also man erwartet von mir, daß ich diese irgendwie "verstecke", ob im Programmcode selbst oder in einer externen library, wie auch immer.
Ich bin vertraut mit den IncludeBinary() und CatchSound()-Funktionen, ich nutze diese bereits um die Musikstücke von meinem Komponisten im Code zu verstecken, das klappt sehr gut. Dadurch wird natürlich das .exe-File sehr groß - eigentlich möchte ich nur sicherstellen, daß dies kein längerfristig kein Problem darstellt (ich nutze für die Musikfiles bereits die platzsparende .ogg-Variante), bzw. ob es Alternativen gibt, die eventuell besser geeignet sind für viele kurze Sound-Schnippsel.
Vielen Dank.
.wav/.ogg Files "verstecken"
.wav/.ogg Files "verstecken"
Now these points of data make a beautiful line,
And we're out of Beta, we're releasing on time.
And we're out of Beta, we're releasing on time.
Re: .wav/.ogg Files "verstecken"
Also m.M.n. sollte es reichen die Sound-Files verschlüsselt abzuspeichern auch weil as Aufnehmen über die Soundkarte immer eine (sehr einfache) Angriffsmöglichkeit ist und bleibt.
Mehr Sicherheit (für das Programm selbst) würde z.B. Streaming bieten -> nur kleine Packete entschlüsseln und and den Soundbuffer übergeben.
Hier müsste schon die Streaming Funktion bei einem Angriff gehookt und die Packete als Soundfile neu abgespeichert werden.
Dies wäre schonmal viel aufwändiger als nur den Speicher nach ganzen Soundfiles zu scannen.
Mehr Sicherheit (für das Programm selbst) würde z.B. Streaming bieten -> nur kleine Packete entschlüsseln und and den Soundbuffer übergeben.
Hier müsste schon die Streaming Funktion bei einem Angriff gehookt und die Packete als Soundfile neu abgespeichert werden.
Dies wäre schonmal viel aufwändiger als nur den Speicher nach ganzen Soundfiles zu scannen.
Re: .wav/.ogg Files "verstecken"
Um Gottes Willen, sowas erwartet kein Mensch von mir.
Nein, dann mache ich das so weiter wie bisher, mit CatchSound() und IncludeBinary(). Klappt ja auch zufriedenstellend bisher. Wollte nur mal die Optionen abgeklopft haben, weil das so ein Gebiet ist, mit dem ich mich wenig auskenne.
Danke.
Nein, dann mache ich das so weiter wie bisher, mit CatchSound() und IncludeBinary(). Klappt ja auch zufriedenstellend bisher. Wollte nur mal die Optionen abgeklopft haben, weil das so ein Gebiet ist, mit dem ich mich wenig auskenne.
Danke.
Now these points of data make a beautiful line,
And we're out of Beta, we're releasing on time.
And we're out of Beta, we're releasing on time.
Re: .wav/.ogg Files "verstecken"
per includebinary würde ich es nicht machen, das Zeug ist sonst zweimal in Speicher. Einmal in deiner Datasection und einmal nach "Catch" - das kann einiges summieren.
ich würde die Pack-Routinen benutzen (CreatePack/OpenPack). Alles in eine Datei reinschmeißen und damit laden und mit den Catch* Befehlen zur Verwendung freigeben.
ich würde die Laderoutine so schreiben, das während des Debuggers die Dateien direct aus einen GameData-Folder geladen waren (falls vorhanden), ansonsten immer aus einer Comprimierten datei.
Wenn du noch ein bischen verschlüsseln willst, kannst du den Buffer ja vorher noch mit "xor" bearbeiten. Eine komplizierte AES-Verschlüsselung würde ich nicht nehmen, da sie keine Vorteile bringt (der entschlüsselungscode muss ja in Programm sein).
ich würde die Pack-Routinen benutzen (CreatePack/OpenPack). Alles in eine Datei reinschmeißen und damit laden und mit den Catch* Befehlen zur Verwendung freigeben.
ich würde die Laderoutine so schreiben, das während des Debuggers die Dateien direct aus einen GameData-Folder geladen waren (falls vorhanden), ansonsten immer aus einer Comprimierten datei.
Wenn du noch ein bischen verschlüsseln willst, kannst du den Buffer ja vorher noch mit "xor" bearbeiten. Eine komplizierte AES-Verschlüsselung würde ich nicht nehmen, da sie keine Vorteile bringt (der entschlüsselungscode muss ja in Programm sein).
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!
Re: .wav/.ogg Files "verstecken"
So, danke euch nochmal.
Ich habe eine zufriedenstellende Lösung gefunden, denke ich, und zwar ist es mit der AES-Verschlüsselungs-Bibliothek von PureBasic möglich, Soundfiles zu "crypten", und dann als neue Files speichern. Der folgende Code ist nicht von mir, ich habe ihn hier gefunden, und für meine Zwecke angepasst.
Beim Start werden die entsprechenden Files eingelesen und mit demselben Schlüssel "decrypted" und dann via CatchSound() im Speicher behalten.
Das sollte für so'n kleines Hobbyprojekt reichen, denke ich.
ENCRYPT
DECRYPT
Ich habe eine zufriedenstellende Lösung gefunden, denke ich, und zwar ist es mit der AES-Verschlüsselungs-Bibliothek von PureBasic möglich, Soundfiles zu "crypten", und dann als neue Files speichern. Der folgende Code ist nicht von mir, ich habe ihn hier gefunden, und für meine Zwecke angepasst.
Beim Start werden die entsprechenden Files eingelesen und mit demselben Schlüssel "decrypted" und dann via CatchSound() im Speicher behalten.
Das sollte für so'n kleines Hobbyprojekt reichen, denke ich.
ENCRYPT
Code: Alles auswählen
sFile.s = "mySound.ogg"
;// Read file to encrypt
hFile = ReadFile(#PB_Any, sFile)
lenbuf = Lof(hFile)
*original = AllocateMemory(lenbuf)
ReadData(hFile, *original, lenbuf)
CloseFile(hFile)
;// Encrypt data (from *original to *encrypted buffer)
*encrypted = AllocateMemory(lenbuf)
AESEncoder(*original, *encrypted, lenbuf, ?cipherkey, 128, ?IV, #PB_Cipher_CBC)
;// Save encrypted data
hFile = CreateFile(#PB_Any, sFile+".encrypted")
WriteData(hFile, *encrypted, lenbuf)
CloseFile(hFile)
;// Free resources
FreeMemory(*original)
FreeMemory(*encrypted)
End
DataSection
cipherkey:
Data.a 189,241,42,69,120,149,97,14,243,149,71,57,160,156,179,143 ;16 bytes for 128-bit AES (use 32 for 256)
IV:
Data.a 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ;IV is always 16 bytes regardless of 128/192/256
EndDataSection
DECRYPT
Code: Alles auswählen
InitSound()
UseOGGSoundDecoder()
Define newSound
sFile.s = "mySound.ogg.encrypted"
;// Read file to decrypt
hFile = ReadFile(#PB_Any, sFile)
lenbuf = Lof(hFile)
*original = AllocateMemory(lenbuf)
ReadData(hFile, *original, lenbuf)
CloseFile(hFile)
;// Decrypt encrypted data (from *encrypted to *decrypted buffer)
*decrypted = AllocateMemory(lenbuf)
AESDecoder(*original, *decrypted, lenbuf, ?cipherkey, 128, ?IV, #PB_Cipher_CBC)
newSound = CatchSound(#PB_Any, *decrypted, lenbuf)
PlaySound(newSound)
Delay(5000) ;test if sound plays properly
;// Free resources
FreeMemory(*original)
FreeMemory(*decrypted)
End
DataSection
cipherkey:
Data.a 189,241,42,69,120,149,97,14,243,149,71,57,160,156,179,143 ;16 bytes for 128-bit AES (use 32 for 256)
IV:
Data.a 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ;IV is always 16 bytes regardless of 128/192/256
EndDataSection
Now these points of data make a beautiful line,
And we're out of Beta, we're releasing on time.
And we're out of Beta, we're releasing on time.