Sistemi Anti-Hack?

Hai una curiosità o un problema con Game Maker? Domanda e ti sarà risposto!
Solid Snake
GMI Advanced
Messaggi: 2093
Iscritto il: 19/12/2010, 16:17
Specialità: Programmazione
Uso: GM:Studio 1.4 Standard
Contatta:

Sistemi Anti-Hack?

Messaggio da Solid Snake »

Salve :cappa:

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.
♥♥♥♥♥♥
Immagine
♥♥♥♥♥♥
Spoiler
Immagine

Jak
Admin
Messaggi: 12355
Iscritto il: 19/08/2009, 16:20
Specialità: Programmazione 3D
Uso: GM:Studio 2
Contatta:

Re: Sistemi Anti-Hack?

Messaggio da Jak »

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

Solid Snake
GMI Advanced
Messaggi: 2093
Iscritto il: 19/12/2010, 16:17
Specialità: Programmazione
Uso: GM:Studio 1.4 Standard
Contatta:

Re: Sistemi Anti-Hack?

Messaggio da Solid Snake »

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!
♥♥♥♥♥♥
Immagine
♥♥♥♥♥♥
Spoiler
Immagine

Avatar utente
Breston
Membro
Messaggi: 84
Iscritto il: 21/08/2014, 15:51
Specialità: Nothing
Uso: GM:Studio 2
Contatta:

Re: Sistemi Anti-Hack?

Messaggio da Breston »

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].

Avatar utente
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?

Messaggio da Wolfrost »

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].
Quotone :asd: :asd: Finalmente capisco una sua spiegazione!
Immagine

Immagine

Solid Snake
GMI Advanced
Messaggi: 2093
Iscritto il: 19/12/2010, 16:17
Specialità: Programmazione
Uso: GM:Studio 1.4 Standard
Contatta:

Re: Sistemi Anti-Hack?

Messaggio da Solid Snake »

Stavo appunto creando qualcosa di simile. Vediamo cosa ne viene fuori... :asd: Poi vi faccio sapere!
♥♥♥♥♥♥
Immagine
♥♥♥♥♥♥
Spoiler
Immagine

Avatar utente
doom13
Moderatore
Messaggi: 2093
Iscritto il: 31/08/2012, 15:40
Specialità: Programmazione
Uso: GM:Studio 2
Contatta:

Re: Sistemi Anti-Hack?

Messaggio da doom13 »

Uhm buon sistema, dite che il check ad ogni step è troppo?
Immagine
Spoiler
Maze [sospeso]
Isom (titolo provvisorio) (Windows & Android) [sospeso]
Keep Calm & Jump (Android) [In corso]
The Graywall (Windows) [Completo]
DTB (Windows & Android) [Completo]
The Last Spell (Windows) [Completo]
Dukenstein: Return to the house (Windows) [Completo]
DMSystem (Windows) [Completo]
"Things get hard sometimes guys... But remember, dicks get hard too, but they don't stay hard forever. Don't give up!"

Solid Snake
GMI Advanced
Messaggi: 2093
Iscritto il: 19/12/2010, 16:17
Specialità: Programmazione
Uso: GM:Studio 1.4 Standard
Contatta:

Re: Sistemi Anti-Hack?

Messaggio da Solid Snake »

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. :cappa:
♥♥♥♥♥♥
Immagine
♥♥♥♥♥♥
Spoiler
Immagine

Avatar utente
Tizzio
GMI Honor
Messaggi: 5836
Iscritto il: 29/06/2010, 23:43
Specialità: programmazione
Contatta:

Re: Sistemi Anti-Hack?

Messaggio da Tizzio »

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)

Solid Snake
GMI Advanced
Messaggi: 2093
Iscritto il: 19/12/2010, 16:17
Specialità: Programmazione
Uso: GM:Studio 1.4 Standard
Contatta:

Re: Sistemi Anti-Hack?

Messaggio da Solid Snake »

♥♥♥♥♥♥
Immagine
♥♥♥♥♥♥
Spoiler
Immagine

Avatar utente
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?

Messaggio da Wolfrost »

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
Immagine

Immagine

Solid Snake
GMI Advanced
Messaggi: 2093
Iscritto il: 19/12/2010, 16:17
Specialità: Programmazione
Uso: GM:Studio 1.4 Standard
Contatta:

Re: Sistemi Anti-Hack?

Messaggio da Solid Snake »

Io non sto usando GM, avrei dovuto specificarlo ma ormai l'ho detto così tante volte che mi sembrava superfluo...
♥♥♥♥♥♥
Immagine
♥♥♥♥♥♥
Spoiler
Immagine

Solid Snake
GMI Advanced
Messaggi: 2093
Iscritto il: 19/12/2010, 16:17
Specialità: Programmazione
Uso: GM:Studio 1.4 Standard
Contatta:

Re: Sistemi Anti-Hack?

Messaggio da Solid Snake »

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?

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;
		}
	}

}

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.
♥♥♥♥♥♥
Immagine
♥♥♥♥♥♥
Spoiler
Immagine

Avatar utente
Breston
Membro
Messaggi: 84
Iscritto il: 21/08/2014, 15:51
Specialità: Nothing
Uso: GM:Studio 2
Contatta:

Re: Sistemi Anti-Hack?

Messaggio da Breston »

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.
Ultima modifica di Breston il 22/10/2015, 18:11, modificato 2 volte in totale.

Solid Snake
GMI Advanced
Messaggi: 2093
Iscritto il: 19/12/2010, 16:17
Specialità: Programmazione
Uso: GM:Studio 1.4 Standard
Contatta:

Re: Sistemi Anti-Hack?

Messaggio da Solid Snake »

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.
♥♥♥♥♥♥
Immagine
♥♥♥♥♥♥
Spoiler
Immagine

Avatar utente
Breston
Membro
Messaggi: 84
Iscritto il: 21/08/2014, 15:51
Specialità: Nothing
Uso: GM:Studio 2
Contatta:

Re: Sistemi Anti-Hack?

Messaggio da Breston »

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

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);
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
Ultima modifica di Breston il 23/10/2015, 13:36, modificato 1 volta in totale.

Solid Snake
GMI Advanced
Messaggi: 2093
Iscritto il: 19/12/2010, 16:17
Specialità: Programmazione
Uso: GM:Studio 1.4 Standard
Contatta:

Re: Sistemi Anti-Hack?

Messaggio da Solid Snake »

Ok, tecnicamente oltre al XOR posso combinare altre operazioni?
♥♥♥♥♥♥
Immagine
♥♥♥♥♥♥
Spoiler
Immagine

Avatar utente
Breston
Membro
Messaggi: 84
Iscritto il: 21/08/2014, 15:51
Specialità: Nothing
Uso: GM:Studio 2
Contatta:

Re: Sistemi Anti-Hack?

Messaggio da Breston »

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.

Avatar utente
cp94
Moderatore
Messaggi: 2789
Iscritto il: 04/07/2009, 19:18
Specialità: ddd
Località: Brescia
Contatta:

Re: Sistemi Anti-Hack?

Messaggio da cp94 »

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);
    }
 
Games you should check out
Naemo
E T U S
Overgravity
Inside the Code

Immagine

Avatar utente
doom13
Moderatore
Messaggi: 2093
Iscritto il: 31/08/2012, 15:40
Specialità: Programmazione
Uso: GM:Studio 2
Contatta:

Re: Sistemi Anti-Hack?

Messaggio da doom13 »

Per criptare il contenuto dei file dite che lo XOR cipher è troppo banale?
Immagine
Spoiler
Maze [sospeso]
Isom (titolo provvisorio) (Windows & Android) [sospeso]
Keep Calm & Jump (Android) [In corso]
The Graywall (Windows) [Completo]
DTB (Windows & Android) [Completo]
The Last Spell (Windows) [Completo]
Dukenstein: Return to the house (Windows) [Completo]
DMSystem (Windows) [Completo]
"Things get hard sometimes guys... But remember, dicks get hard too, but they don't stay hard forever. Don't give up!"

Rispondi

Chi c’è in linea

Visitano il forum: Bing [Bot] e 30 ospiti