Caso di hacking standard. Hack inietta in un processo di gioco avviato e scrive sulla memoria del processo utilizzando WriteProcessMemory
call.
La situazione è la seguente:
- stiamo ospitando un server di gioco I client
- si uniscono al server con i loro giochi, possono corrompere i loro giochi usando vari hack
- non abbiamo alcuna possibilità di cambiare la fonte del gioco, è così com'è. Tuttavia, abbiamo la possibilità di far applicare il nostro programma prima che il client possa accedere al server.
Quindi, per dirla chiaramente: non possiamo offuscare la memoria di gioco, ma abbiamo la possibilità di eseguire un programma separato allo stesso tempo. Ho già provato a utilizzare una chiamata EnumProcessModules
che elenca tutte le DLL di processo senza esito positivo. Mi sembra che gli hack si iniettino direttamente nella memoria del processo, quindi non viene rilevato. Dopo aver fatto un sacco di "ricerche di Google", ho trovato alcune opzioni:
-
scansione per l'esecuzione di nomi di processi, file nella directory di gioco, modelli di byte di file, modelli di byte di processi in esecuzione ... questo compito richiede molto tempo poiché dovrei ottenere campioni di tutti gli hack disponibili e aggiornare il nostro programma ogni volta che ne esce uno nuovo. Tutte le informazioni di hacking devono essere memorizzate all'interno della fonte che può rendere il programma molto grande.
-
Uso di
ReadProcessMemory
per monitorare le modifiche in offset di memoria ben noti (gli hack di solito usano gli stessi offset per ottenere qualcosa). Avrei bisogno di eseguire alcuni hack, monitorare il comportamento e ottenere campioni di comportamento di hacking quando si confronta con la corsa normale. Il programma farebbe fondamentalmente la stessa cosa che gli hack fanno ma al contrario. -
rileva
WriteProcessMemory
chiamata all'interno della memoria. Non sono sicuro se questo porterebbe alcuni falsi positivi dalle DLL legittime, ma l'idea sembra interessante. Come faccio a scansionare la memoria di processo per questa chiamata? Come ottenere il valore in byte di esso?
Questo è un esempio di una chiamata di hacking:
WriteProcessMemory(phandler,0xsomeoffset,&datatowrite,...);
L'offset è effettivamente corretto almeno in hack di basso livello. Se potessimo in qualche modo riorganizzare la pila o spingerla in qualche modo, potrebbe già incasinare l'hack per mandare in crash il gioco.
Alcuni altri fatti:
- i nuovi hack vengono pubblicati raramente e c'è un numero fisso di quelli che sono pubblicamente disponibili e funzionano effettivamente. Molti di questi funzionano anche in modo simile. L'obiettivo
- è di rilevare l'hack o di confonderlo con il funzionamento
La mia domanda qui è, quali sarebbero alcuni buoni modi per raggiungere i miei obiettivi qui? È gradita qualsiasi idea che possa confondere l'hack o aiutare a rilevare l'hack che viene iniettato o che la memoria sia cambiata.
So che non c'è modo di avere un sistema anti-hacking sicuro al 100% ma se prendiamo solo chi usa gli hack disponibili al pubblico è già il 95% degli hacker, non ci importa della minoranza di hacker intelligenti.