Generalmente questo è fatto dal reverse engineering del gioco per scoprire dove nella memoria corrente queste variabili vivono all'interno del programma. Ci sono due modi per modificare queste variabili.
Patch del programma
Un utente malintenzionato può eseguire il patch dell'eseguibile o della DLL stessa se non sono presenti protezioni di integrità. Fondamentalmente i byte effettivi del programma sono modificati per essere / fare qualcosa di diverso. Finché il programma non verifica che nessun dato sia stato modificato, questa è un'opzione molto valida.
Questo può essere mitigato eseguendo qualche tipo di checksum sull'intero eseguibile. Farebbe un hash crittograficamente strong. Non si vorrebbe usare qualcosa come CRC32 perché con abbastanza modifiche al binario un utente malintenzionato potrebbe far corrispondere i checksum.
Potresti anche firmare il tuo programma. Prima di eseguire il programma verifica la firma del programma. Se ciò non riesce, il programma non viene eseguito.
In memoria patch
Questa tecnica è generalmente un po 'più fastidiosa. Mentre il programma è in esecuzione, un utente malintenzionato inserisce il codice in esso o trova dove si trova nella RAM e applica le patch al programma. L'iniezione di codice è molto più difficile da fare, ma il patching della memoria è quasi lo stesso delle patch regolari. L'utente malintenzionato deve eseguire questa operazione ogni volta che viene eseguito il programma, poiché la RAM verrà cancellata. Questo è molto più difficile da mitigare poiché il programma è già in esecuzione.
Esistono tecniche che è possibile utilizzare per impedire il reverse engineering in generale. Durante le parti del programma che si desidera proteggere è possibile rilevare la presenza di un debugger. Gli ingegneri inversi avranno quasi sicuramente bisogno di usare un debugger per capire esattamente quali piruzioni della memoria influenzano ciò che il programma fa durante l'esecuzione. Manipolare la memoria in un debugger per vedere come è interessato il programma.
Puoi anche usare l'offuscamento del codice per rendere il disassemblaggio o la decompilazione del tuo codice molto più difficile.
Ecco un link divertente in quella direzione generale .