kake_fisk Skrevet 15. april 2009 Del Skrevet 15. april 2009 Jeg lager et spill i SDL der man kan save og loade. Men vet noen om en lur måte for at folk ikke kan jukse med å endre save filen? Hvis jeg lagrer informasjonen som plain tekst kan hvem som helst bare skrive om på noen verdier for å jukse i spillet. Går det an å lagre informasjon i executable filen eller kanskje en enkel string kryptering? Lenke til kommentar
DeadManWalking Skrevet 15. april 2009 Del Skrevet 15. april 2009 Du kan ikke skrive til en .exe som er åpen. Ja, hvorfor ikke kjøre en enkel kryptering på filen. Det implementerer du enkelt i en egen klasse. Ikke noe for fancy heller, skal ikke mye til. Lenke til kommentar
GeirGrusom Skrevet 15. april 2009 Del Skrevet 15. april 2009 Ofte er det nok om teksten ikke er i klartekst med en gang, og da kan kanskje en form for xor kryptering være nok. Total Annihilation brukte xor med posisjonen i filen som kryptering på HPI filene. Lenke til kommentar
zotbar1234 Skrevet 16. april 2009 Del Skrevet 16. april 2009 (endret) Jeg lager et spill i SDL der man kan save og loade. Men vet noen om en lur måte for at folk ikke kan jukse med å endre save filen? Hvis jeg lagrer informasjonen som plain tekst kan hvem som helst bare skrive om på noen verdier for å jukse i spillet. Går det an å lagre informasjon i executable filen eller kanskje en enkel string kryptering? Hvordan har du tenkt å støtte flere brukere på samme maskin med å lagre savefilene i den eksekverbare filen? Ikke minst, hvordan har du tenkt å skrive til en eksekverbar fil, når brukeren som utfører spillet ikke har skriverettigheter på den eksekverbare filen? Endret 16. april 2009 av zotbar1234 Lenke til kommentar
kake_fisk Skrevet 16. april 2009 Forfatter Del Skrevet 16. april 2009 @GeirGrusom og Data_Jepp Okay takk, men jeg trenger litt hjelp. Okay, er dette sånn man enkrypter en string med xor? string str = "this is a string"; str^str.size(); Og hvordan dekrypter man? @zotbar Skjønte ikke mye av det du sa der... Hva er en "eksekverbar" fil og hvorfor har jeg ikke skriverettigheter til min egen fil? Lenke til kommentar
GeirGrusom Skrevet 16. april 2009 Del Skrevet 16. april 2009 Jeg er ikke sikker på om operativsystemet nødvendigvis låser programfiler når de er i gang, men det er ikke anbefalt å endre på programfiler, da det er mulig at noen virusprogrammer kan reagere på en slik oppførsel. En dekrypterer xor på samme måte som du krypterer den (data xor nøkkel) xor nøkkel = data Xor er langt ifra en sikker form for kryptering, men den vil demotivere de aller fleste forsøk. Lenke til kommentar
zotbar1234 Skrevet 16. april 2009 Del Skrevet 16. april 2009 (endret) @zotbarSkjønte ikke mye av det du sa der... Hva er en "eksekverbar" fil og hvorfor har jeg ikke skriverettigheter til min egen fil? Jeg har: $ find /usr/bin/ -maxdepth 1 -type f -! -uid $(id -u) | wc -l 2645 $ ... filer under /usr/bin som ikke eies av meg (det er typisk der programmene blir plassert). Av disse har jeg skrivetilgang til eksakt: $ find /usr/bin/ -maxdepth 1 -type f -perm '/o=w' -! -uid $(id -u) | wc -l 0 $ ... ingen. Det er *veldig* uvanlig å la eksekverbare filer (veldig forenklet -- programmer som kan kjøres) være skrivbare for noen andre enn superbrukeren som installerte dem (la oss se bort fra det komplett imbesile oppsettet der folk logger seg inn som en bruker *med* superbrukerrettigheter for å gjøre noe annet enn oppgaver som krever slikt. Spilling skal ikke krever administratorrettigher for noenlunde fornuftige oppsett). Men hvis vi antar at du krever skrivetilgang til den eksekverbare filen for å kunne kjøre spillet (<le dypt inne i meg>), hvordan hindrer du forskjellige brukere på samme maskin fra å overskrive hverandres lagrede spilltilstander? Det aller enkleste er å gi faen i første omgang. La folk mekke på lagrede tilstander så mye de orker. Ja, det er juks. Trist. Variant nummer 2 er å ikke lagre spilltilstand i et menneskevennlig format. Dump datastrukturen rått på filen; har du en komplisert datastruktur som beskriver spilltilstanden, holder det massevis for å hindre de ikke veldig bestemte. Til sist kan du prøve en enkel kryptering, slik som f.eks. xor (med brukernavn -- hei, kjempeenkelt jo). Bruker du IOstreams og C++, kan du jo lage en stream_buffer som gjør enkel xor-kryptering i sine read()/write()-kall og gå over til xor-kryptering uten å forstyrre resten av programmet ditt. Endret 16. april 2009 av zotbar1234 Lenke til kommentar
kake_fisk Skrevet 16. april 2009 Forfatter Del Skrevet 16. april 2009 @GeirGrusom Takk. @zotbar Oki, skjønner at jeg ikke kan skrive informasjon inn i executablen nå. Jeg kunne ha brukt din variant nummer 1, men har alikavell lyst til å lære hvordan xor virker... Kan noen lage ett eksempel der en string blir xor encyrypta? Lenke til kommentar
GeirGrusom Skrevet 16. april 2009 Del Skrevet 16. april 2009 For enkelhstes skyld bruker jeg en fast char* char* msg = "Hello World!"; int len = strlen(msg); char* crypt = (char*)malloc(len + 1); crypt[len] = 0; for(int i = 0; i < len; i++) crypt[i] = msg[i] ^ i; En kan gjøre det bedre ved å kryptere 4 byte av gangen eller lignende, men for eksempelets skyld har jeg skrevet det enkelt. Lenke til kommentar
kake_fisk Skrevet 17. april 2009 Forfatter Del Skrevet 17. april 2009 Okay, krypteringa virker som den skal, takk. Men prøvde meg på dekrypteringa, men fikk bare windows error. console.exe har sluttet å virke... #include <iostream> using namespace std; int main () { char* msg = "Hello World!"; int len = strlen(msg); char* crypt = (char*)malloc(len + 1); crypt[len] = 0; for(int i = 0; i < len; i++) crypt[i] = msg[i] ^ i; cout << crypt << endl; for(int i = 0; i < len; i++) msg[i] = crypt[i] ^ i; cout << msg << endl; return 0; } Lenke til kommentar
Giddion Skrevet 17. april 2009 Del Skrevet 17. april 2009 Kan det være en streng som ikke er null terminert? Hvilke linje stopper programmet på? Lenke til kommentar
kake_fisk Skrevet 17. april 2009 Forfatter Del Skrevet 17. april 2009 Ingen compile error, så vet helt presist hvilken linje den stopper på, men denne linja bler i hvertfall ikke executa: cout << msg << endl; Det må være noe galt der jeg decrypterer... Lenke til kommentar
Giddion Skrevet 17. april 2009 Del Skrevet 17. april 2009 Så du bruker ikke noen debugger.... det kan være lurt å bruke Ja da har jeg fått litt mer tid til å kikke. Koden klikker som du sier under decrypteringen og klikker når den prøver å skrive til msg... msg er en peker til en cost string så derfor går ting galt. Bytt ut: char* msg = "Hello World!"; med : char msg[] = "Hello World!"; så funker det hos meg hvertfall Lenke til kommentar
kake_fisk Skrevet 17. april 2009 Forfatter Del Skrevet 17. april 2009 Takk det virker Tror jeg kan sette denne tråden som løst nå. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå