¿Proteger la aplicación cliente en un juego en línea de hacer trampa?

0

Estoy trabajando en un juego multijugador (combinación de RPG y estrategia) para Windows con C ++, que se lanzará en Steam.

Quiero hacer que la aplicación .exe del cliente sea lo más segura posible. Por favor, no intente hacer publicaciones sobre el olvido del cliente y simplemente haga todos los cálculos del lado del servidor, ya que quiero centrarme en el cliente.

Descubrí que es muy fácil manipular cualquier aplicación abierta en el sistema usando las siguientes funciones de C ++: OpenProcess, WriteProcessMemory, CreateRemoteThread, etc.

Q1) ¿Cómo prevenir eso de una manera fácil?

No quiero que ninguna otra aplicación (cheat / trainer) pueda acceder a mi proceso y modificar su memoria. Entonces, si puedo evitar que otras aplicaciones creen identificadores en mi proceso para el modo de escritura, debería estar más seguro. ¿Cómo prevenir eso de una manera fácil?

He investigado un poco y he encontrado ' ObRegisterCallbacks 'que puede evitar la creación de manejadores para ciertos procesos. Lo usaría para evitar la creación de un identificador para el proceso de mi cliente .

Sin embargo, parece que esto requiere crear un archivo * .sys que sea un controlador de Windows, y ese archivo debe estar firmado digitalmente con un código. Compré un certificado de firma de códigos hace unos años, y tenía un costo de unos pocos cientos de dólares por año, desde ese momento tuve que cancelarlo, porque es demasiado caro.

P2) ¿Puedo publicar un juego que use el controlador * .sys sin tener que comprar el costoso código de firma?

Q3) ¿Puedo omitir la creación del controlador * .sys y simplemente usar 'ObRegisterCallbacks' directamente desde el archivo cliente * .exe? (preferido)

Q4) Si 'ObRegisterCallbacks' no puede usarse sin el costoso proceso de firma de código, ¿qué otras opciones tengo?

P5) ¿Por qué Microsoft no solo parchea Windows y evita que otras aplicaciones puedan manipular la memoria de otros procesos, porque esto es un grave agujero de seguridad? Esto debe ser manejado por el sistema operativo automáticamente, y no todas las aplicaciones deben luchar para protegerse. Si MS solo arreglara Windows, entonces el 99% de los trucos / entrenadores / virus serían inútiles.

Sé que potencialmente podría iterar periódicamente todos los procesos, y enganchar sus funciones para abrir los manejadores de procesos (para evitar el acceso a los manejadores de procesos de mis clientes), o incluso simplemente detectar los manejadores abiertos, sin embargo eso no es perfecto, porque: tiene que ser se realiza periódicamente, consumirá CPU y perderá los programas de trucos que se ejecutan, modifican la memoria y se cierran al instante, lo cual es demasiado rápido para que mi aplicación lo detecte. Además, si quisiera conectar otras llamadas a la función de proceso, entonces mi aplicación sería más como un virus, intentando modificar otros procesos / funciones. Preferiría que mi aplicación no tenga que modificar otros procesos, sino que simplemente evite que accedan al proceso de mi cliente de juego.

    
pregunta Esenthel 11.05.2018 - 02:06
fuente

0 respuestas

Lea otras preguntas en las etiquetas