Sto lavorando a un gioco multiplayer (mix di RPG e strategia) per Windows usando C ++, che verrà rilasciato su Steam.
Voglio rendere l'applicazione client .exe il più sicura possibile. Per favore, non cercare di creare post riguardo l'oblio del client e basta fare tutti i calcoli sul lato server, perché voglio concentrarmi sul client.
Ho scoperto che è molto facile manipolare qualsiasi applicazione aperta nel sistema usando le seguenti funzioni C ++: OpenProcess, WriteProcessMemory, CreateRemoteThread, ecc.
Q1) Come prevenirlo in modo semplice?
Non voglio che nessuna altra applicazione (cheat / trainer) possa accedere al mio processo e modificarne la memoria. Quindi, se posso bloccare altre app dalla creazione di handle al mio processo per la modalità di scrittura, allora dovrei essere più sicuro. Come prevenirlo in modo semplice?
Ho effettuato alcune ricerche e ho trovato ObRegisterCallbacks 'che può impedire la creazione di handle per determinati processi. Lo userei per prevenire la creazione di un handle per il mio processo client .
Tuttavia sembra che ciò richieda la creazione di un file * .sys che sia un driver Windows e che il file debba essere firmato digitalmente. Ho acquistato un certificato di programmazione alcuni anni fa, e costava qualche centinaio di dollari all'anno, da quando ho dovuto cancellarlo perché è troppo costoso.
Q2) Posso pubblicare un gioco che utilizza il driver * .sys senza dover acquistare la costosa firma del codice?
Q3) Posso saltare a creare il driver * .sys e utilizzare semplicemente gli 'ObRegisterCallbacks' direttamente dal file client * .exe? (Preferito)
Q4) Se non è possibile utilizzare "ObRegisterCallbacks" senza il costoso processo di firma del codice, quali altre opzioni sono disponibili?
Q5) Perché Microsoft non si limita a correggere Windows e impedisce ad altre app di essere in grado di manipolare la memoria di altri processi, perché si tratta di un grave problema di sicurezza. Questo dovrebbe essere gestito automaticamente dal sistema operativo, e non tutte le applicazioni dovrebbero lottare per proteggersi. Se MS risolvesse semplicemente Windows, il 99% dei cheat / trainer / virus sarebbe reso inutilizzabile.
So che potrei potenzialmente periodicamente iterare tutti i processi e agganciare le loro funzioni per l'apertura degli handle di processo (per impedire l'accesso al mio handle del processo client), o anche solo rilevare eventuali handle aperti, tuttavia non è perfetto, perché: deve essere fatto periodicamente, consumerà CPU, e perderà i programmi cheat che girano, modificano la memoria e si chiudono all'istante che è troppo veloce per essere rilevato dalla mia app. Inoltre, se desidero collegare altre chiamate di funzioni di processo, la mia app sarebbe più simile a un virus, cercando di modificare altri processi / funzioni. Preferirei che la mia app non modificasse altri processi, ma impedisse loro di accedere al mio processo client di gioco.