Sistemi Anti-Hack?
-
- GMI Advanced
- Messaggi: 2093
- Iscritto il: 19/12/2010, 16:17
- Specialità: Programmazione
- Uso: GM:Studio 1.4 Standard
- Contatta:
Sistemi Anti-Hack?
Salve
Nel mio gioco, si potranno acquistare potenziamenti e oggetti tramite una valuta in-game oltre questo vi è una classifica on-line. Dato che il gioco da la possibilità di giocare sia con la connessione sia senza, ho bisogno di proteggere questi valori durante il gioco (file di salvataggio e varie vengono già criptati). Il gioco è per Android e quindi esistono programmi per modificare la memoria del gioco. La mia domanda è: Quale metodi usare per proteggere il mio gioco da tali programmi?
Considerate che le variabili da proteggere sono anche modificate ogni frame come lo score, e altre invece vengono modificate raramente come i soldi.
Nel mio gioco, si potranno acquistare potenziamenti e oggetti tramite una valuta in-game oltre questo vi è una classifica on-line. Dato che il gioco da la possibilità di giocare sia con la connessione sia senza, ho bisogno di proteggere questi valori durante il gioco (file di salvataggio e varie vengono già criptati). Il gioco è per Android e quindi esistono programmi per modificare la memoria del gioco. La mia domanda è: Quale metodi usare per proteggere il mio gioco da tali programmi?
Considerate che le variabili da proteggere sono anche modificate ogni frame come lo score, e altre invece vengono modificate raramente come i soldi.
♥♥♥♥♥♥
♥♥♥♥♥♥
♥♥♥♥♥♥
Spoiler
-
- Admin
- Messaggi: 12355
- Iscritto il: 19/08/2009, 16:20
- Specialità: Programmazione 3D
- Uso: GM:Studio 2
- Contatta:
Re: Sistemi Anti-Hack?
Il mio consiglio è di non perdere tempo, tanto non ce la fai, chi ci prova ci riuscirà in 2 minuti a prescindere come è sempre successo per tutti i giochi.
Time to feel, time to believe
Dare to see what may come of our future
Lift your head, broaden your gaze
Speak your mind and your thoughts they will follow you
Dare to see what may come of our future
Lift your head, broaden your gaze
Speak your mind and your thoughts they will follow you
-
- GMI Advanced
- Messaggi: 2093
- Iscritto il: 19/12/2010, 16:17
- Specialità: Programmazione
- Uso: GM:Studio 1.4 Standard
- Contatta:
Re: Sistemi Anti-Hack?
Il mio scopo non è fermare l'hacking del tutto, ma fermare il classico "Wanna be hackerz" della situazione, sono al corrente che è impossibile evitare di farmi hackare il gioco. Ma almeno lo vorrei rendere più difficile!
♥♥♥♥♥♥
♥♥♥♥♥♥
♥♥♥♥♥♥
Spoiler
- Breston
- Membro
- Messaggi: 84
- Iscritto il: 21/08/2014, 15:51
- Specialità: Nothing
- Uso: GM:Studio 2
- Contatta:
Re: Sistemi Anti-Hack?
Per ogni variabile A che vuoi proteggere tieni in memoria una seconda variabile B legata alla prima da una relazione matematica [latex]\text B = f(\text A)[/latex], e fai in modo di aggiornare B quando modifichi A.
A questo punto basta un controllo di sicurezza di B a intervalli regolari nel tempo per sapere se A è stata manomessa: deve essere [latex]A = f^{-1}(B)[/latex]. Puoi far crashare il gioco o annullare gli effetti dell'hack reimpostando A.
Puoi anche farti delle funzioni set_value e get_value, la prima aggiorna in automatico B, la seconda fa il controllo di sicurezza oltre a restituire A.
La sicurezza di questo metodo sta nella segretezza e complessità della relazione [latex]f[/latex].
A questo punto basta un controllo di sicurezza di B a intervalli regolari nel tempo per sapere se A è stata manomessa: deve essere [latex]A = f^{-1}(B)[/latex]. Puoi far crashare il gioco o annullare gli effetti dell'hack reimpostando A.
Puoi anche farti delle funzioni set_value e get_value, la prima aggiorna in automatico B, la seconda fa il controllo di sicurezza oltre a restituire A.
La sicurezza di questo metodo sta nella segretezza e complessità della relazione [latex]f[/latex].
- Wolfrost
- Membro super
- Messaggi: 692
- Iscritto il: 03/08/2014, 13:08
- Specialità: Programmazione
- Uso: GM:Studio 1.4 Pro
- Località: Una galassia lontana lontana...
- Contatta:
Re: Sistemi Anti-Hack?
Quotone Finalmente capisco una sua spiegazione!Breston ha scritto:Per ogni variabile A che vuoi proteggere tieni in memoria una seconda variabile B legata alla prima da una relazione matematica [latex]\text B = f(\text A)[/latex], e fai in modo di aggiornare B quando modifichi A.
A questo punto basta un controllo di sicurezza di B a intervalli regolari nel tempo per sapere se A è stata manomessa: deve essere [latex]A = f^{-1}(B)[/latex]. Puoi far crashare il gioco o annullare gli effetti dell'hack reimpostando A.
Puoi anche farti delle funzioni set_value e get_value, la prima aggiorna in automatico B, la seconda fa il controllo di sicurezza oltre a restituire A.
La sicurezza di questo metodo sta nella segretezza e complessità della relazione [latex]f[/latex].
-
- GMI Advanced
- Messaggi: 2093
- Iscritto il: 19/12/2010, 16:17
- Specialità: Programmazione
- Uso: GM:Studio 1.4 Standard
- Contatta:
Re: Sistemi Anti-Hack?
Stavo appunto creando qualcosa di simile. Vediamo cosa ne viene fuori... Poi vi faccio sapere!
♥♥♥♥♥♥
♥♥♥♥♥♥
♥♥♥♥♥♥
Spoiler
- doom13
- Moderatore
- Messaggi: 2093
- Iscritto il: 31/08/2012, 15:40
- Specialità: Programmazione
- Uso: GM:Studio 2
- Contatta:
Re: Sistemi Anti-Hack?
Uhm buon sistema, dite che il check ad ogni step è troppo?
Spoiler
"Things get hard sometimes guys... But remember, dicks get hard too, but they don't stay hard forever. Don't give up!"
-
- GMI Advanced
- Messaggi: 2093
- Iscritto il: 19/12/2010, 16:17
- Specialità: Programmazione
- Uso: GM:Studio 1.4 Standard
- Contatta:
Re: Sistemi Anti-Hack?
Dipende dal tipo di check... Se devi fare molta roba per ricavare la variabile vera allora meglio non farlo... E' comunque raro che sia pensante.
♥♥♥♥♥♥
♥♥♥♥♥♥
♥♥♥♥♥♥
Spoiler
Re: Sistemi Anti-Hack?
avevo fatto questo: http://gmsnippet.altervista.org/index.php?l=1
(clicca su resources per scaricare il gmk, o su GML per scaricare solamente gli script in un unico file)
(clicca su resources per scaricare il gmk, o su GML per scaricare solamente gli script in un unico file)
-
- GMI Advanced
- Messaggi: 2093
- Iscritto il: 19/12/2010, 16:17
- Specialità: Programmazione
- Uso: GM:Studio 1.4 Standard
- Contatta:
- Wolfrost
- Membro super
- Messaggi: 692
- Iscritto il: 03/08/2014, 13:08
- Specialità: Programmazione
- Uso: GM:Studio 1.4 Pro
- Località: Una galassia lontana lontana...
- Contatta:
Re: Sistemi Anti-Hack?
Attenzione al fatto che il sistema AntiHack postato da Tizzio su GMSnippet utilizzi funzioni ormai obsolete su GMS quali variable_local_get e roba varia
-
- GMI Advanced
- Messaggi: 2093
- Iscritto il: 19/12/2010, 16:17
- Specialità: Programmazione
- Uso: GM:Studio 1.4 Standard
- Contatta:
Re: Sistemi Anti-Hack?
Io non sto usando GM, avrei dovuto specificarlo ma ormai l'ho detto così tante volte che mi sembrava superfluo...
♥♥♥♥♥♥
♥♥♥♥♥♥
♥♥♥♥♥♥
Spoiler
-
- GMI Advanced
- Messaggi: 2093
- Iscritto il: 19/12/2010, 16:17
- Specialità: Programmazione
- Uso: GM:Studio 1.4 Standard
- Contatta:
Re: Sistemi Anti-Hack?
Scusate il doppio post!
Ho fatto questa classe, praticamente prende un valore, lo converte in stringa, poi essa viene criptata con un algoritmo. Viene poi fatto il procedimento inverso per prendere il valore. Ora nel mio telefono e negli altri che ho provato non noto nessun rallentamento, sta di fatto che il mio telefono è un S3 e quindi è un po' sopra la media... Ma comunque, secondo voi è troppo pesante?
Ho provato io stesso ad hackerarlo ed non ci sono riuscito. Ho usato GameKiller e non sono riuscito a trovare la variabile ne usando la ricerca per valore ne usando la ricerca per cambiamenti.
Ho fatto questa classe, praticamente prende un valore, lo converte in stringa, poi essa viene criptata con un algoritmo. Viene poi fatto il procedimento inverso per prendere il valore. Ora nel mio telefono e negli altri che ho provato non noto nessun rallentamento, sta di fatto che il mio telefono è un S3 e quindi è un po' sopra la media... Ma comunque, secondo voi è troppo pesante?
Codice: Seleziona tutto
public class SecureValue
{
String secureValue;
public SecureValue(Object value)
{
setValue(value);
}
public void setValue(Object value)
{
try
{
secureValue=MainData.encrypt(String.valueOf(value));
}
catch (Exception e)
{
e.printStackTrace();
}
}
public float getFloat()
{
return Float.parseFloat(getString());
}
public int getInt()
{
return Integer.parseInt(getString());
}
public double getDouble()
{
return Double.parseDouble(getString());
}
public long getLong()
{
return Long.parseLong(getString());
}
public String getString()
{
try
{
return MainData.decrypt(secureValue);
}
catch (Exception e)
{
e.printStackTrace();
return null;
}
}
}
♥♥♥♥♥♥
♥♥♥♥♥♥
♥♥♥♥♥♥
Spoiler
- Breston
- Membro
- Messaggi: 84
- Iscritto il: 21/08/2014, 15:51
- Specialità: Nothing
- Uso: GM:Studio 2
- Contatta:
Re: Sistemi Anti-Hack?
La pesantezza dipende soprattutto dall'algoritmo di crittografia utilizzato. Al limite, per gli algoritmi più semplici, l'interesse potrebbe spostarsi sulla conversione a stringa, che comunque non è un'operazione immediata.
Se vuoi la mia opinione, comunque, questo metodo ha l'aria di essere fin troppo macchinoso. Per cominciare eviterei di convertire a stringa, non ne vedo proprio il bisogno a meno che non sia necessario per usare il metodo encrypt.. nel qual caso suggerirei di implementarne un a mano che lavori direttamente su numeri.
Se vuoi la mia opinione, comunque, questo metodo ha l'aria di essere fin troppo macchinoso. Per cominciare eviterei di convertire a stringa, non ne vedo proprio il bisogno a meno che non sia necessario per usare il metodo encrypt.. nel qual caso suggerirei di implementarne un a mano che lavori direttamente su numeri.
Ultima modifica di Breston il 22/10/2015, 18:11, modificato 2 volte in totale.
-
- GMI Advanced
- Messaggi: 2093
- Iscritto il: 19/12/2010, 16:17
- Specialità: Programmazione
- Uso: GM:Studio 1.4 Standard
- Contatta:
Re: Sistemi Anti-Hack?
Sarebbe meglio utilizzare un algoritmo che utilizza direttamente i numeri, ma non saprei come farlo... Avete qualche link per avere un'idea?
Ultima modifica di Solid Snake il 22/10/2015, 18:36, modificato 1 volta in totale.
♥♥♥♥♥♥
♥♥♥♥♥♥
♥♥♥♥♥♥
Spoiler
- Breston
- Membro
- Messaggi: 84
- Iscritto il: 21/08/2014, 15:51
- Specialità: Nothing
- Uso: GM:Studio 2
- Contatta:
Re: Sistemi Anti-Hack?
Avevo editato ma vedo che hai risposto, ripeto qui:
attenzione perché questo metodo è incapace di accorgersi di manomissioni. Con diversi algoritmi di ricerca nella memoria è possibile trovare solo i valori che sono cambiati rispetto ad una scansione precedente, ignorandone le modalità. In questa maniera è possibile isolare l'indirizzo delle variabili critiche per poi modificarle a tentativi, finché non si raggiunge lo scopo.
Per la crittografia uno dei metodi più semplici (e veloci) è quello dello xor bit a bit.
https://en.wikipedia.org/wiki/XOR_cipher
Potresti avere una costante intero a x bit che fa da password. Per crittare/decrittare un altro numero a x bit basta metterlo in xor con la medesima password.
Ti ho fatto un esempio in java
Se non sbaglio in Java l'operatore xor ^ funge solo tra interi, e per fare una conversione per reinterpretazione purtroppo ho dovuto usare ByteBuffer.
Il risultato dell'esempio:
number: 666.001
encrypted: 1241823612
decrypted: 666.001
Edit: Ho usato i float perché, non so per quale motivo, avevo capito ti servissero quelli. Se usi interi puoi fare direttamente ^ senza ricorrere a conversioni.
Se vuoi un algoritmo generale invece devi convertire l'oggetto di interesse ad array di byte e metterli in xor con i byte della password
attenzione perché questo metodo è incapace di accorgersi di manomissioni. Con diversi algoritmi di ricerca nella memoria è possibile trovare solo i valori che sono cambiati rispetto ad una scansione precedente, ignorandone le modalità. In questa maniera è possibile isolare l'indirizzo delle variabili critiche per poi modificarle a tentativi, finché non si raggiunge lo scopo.
Per la crittografia uno dei metodi più semplici (e veloci) è quello dello xor bit a bit.
https://en.wikipedia.org/wiki/XOR_cipher
Potresti avere una costante intero a x bit che fa da password. Per crittare/decrittare un altro numero a x bit basta metterlo in xor con la medesima password.
Ti ho fatto un esempio in java
Codice: Seleziona tutto
float number = 666.001f; // il numero della bestia
int password = 237123948;
int encrypted = ByteByffer.allocate(4).putFloat(number).getInt(0) ^ password;
float decrypted = ByteBuffer.allocate(4).putInt(encrypted ^ password).getFloat(0);
Il risultato dell'esempio:
number: 666.001
encrypted: 1241823612
decrypted: 666.001
Edit: Ho usato i float perché, non so per quale motivo, avevo capito ti servissero quelli. Se usi interi puoi fare direttamente ^ senza ricorrere a conversioni.
Se vuoi un algoritmo generale invece devi convertire l'oggetto di interesse ad array di byte e metterli in xor con i byte della password
Ultima modifica di Breston il 23/10/2015, 13:36, modificato 1 volta in totale.
-
- GMI Advanced
- Messaggi: 2093
- Iscritto il: 19/12/2010, 16:17
- Specialità: Programmazione
- Uso: GM:Studio 1.4 Standard
- Contatta:
Re: Sistemi Anti-Hack?
Ok, tecnicamente oltre al XOR posso combinare altre operazioni?
♥♥♥♥♥♥
♥♥♥♥♥♥
♥♥♥♥♥♥
Spoiler
- Breston
- Membro
- Messaggi: 84
- Iscritto il: 21/08/2014, 15:51
- Specialità: Nothing
- Uso: GM:Studio 2
- Contatta:
Re: Sistemi Anti-Hack?
Puoi fare quello che vuoi. Chiamalo encrypt, chiamala funzione matematica, non cambia niente.. l'importante è appunto che la funzione sia reversibile.
Conosco altri algoritmi popolari di crittografia simmetrica ma sono decisamente troppo complicati per questo scopo.
Conosco altri algoritmi popolari di crittografia simmetrica ma sono decisamente troppo complicati per questo scopo.
- cp94
- Moderatore
- Messaggi: 2789
- Iscritto il: 04/07/2009, 19:18
- Specialità: ddd
- Località: Brescia
- Contatta:
Re: Sistemi Anti-Hack?
Io per criptare di tutto di solito uso una cosa simile, se può tornare utile:
Codice: Seleziona tutto
using System.Security.Cryptography;
static public string Decrypt (string toDecrypt)
{
byte[] keyArray = UTF8Encoding.UTF8.GetBytes ("32345678901234567890123456789012"); // key
byte[] toEncryptArray = System.Convert.FromBase64String (toDecrypt);
RijndaelManaged rDel = new RijndaelManaged ();
rDel.Key = keyArray;
rDel.Mode = CipherMode.ECB;
rDel.Padding = PaddingMode.PKCS7;
ICryptoTransform cTransform = rDel.CreateDecryptor ();
byte[] resultArray = cTransform.TransformFinalBlock (toEncryptArray, 0, toEncryptArray.Length);
return UTF8Encoding.UTF8.GetString (resultArray);
}
static public string Encrypt (string toEncrypt)
{
byte[] keyArray = UTF8Encoding.UTF8.GetBytes ("32345678901234567890123456789012"); // key
byte[] toEncryptArray = UTF8Encoding.UTF8.GetBytes (toEncrypt);
RijndaelManaged rDel = new RijndaelManaged ();
rDel.Key = keyArray;
rDel.Mode = CipherMode.ECB;
rDel.Padding = PaddingMode.PKCS7;
ICryptoTransform cTransform = rDel.CreateEncryptor ();
byte[] resultArray = cTransform.TransformFinalBlock (toEncryptArray, 0, toEncryptArray.Length);
return Convert.ToBase64String (resultArray, 0, resultArray.Length);
}
- doom13
- Moderatore
- Messaggi: 2093
- Iscritto il: 31/08/2012, 15:40
- Specialità: Programmazione
- Uso: GM:Studio 2
- Contatta:
Re: Sistemi Anti-Hack?
Per criptare il contenuto dei file dite che lo XOR cipher è troppo banale?
Spoiler
"Things get hard sometimes guys... But remember, dicks get hard too, but they don't stay hard forever. Don't give up!"
Chi c’è in linea
Visitano il forum: Bing [Bot] e 30 ospiti