He programado un juego de Android con Unity Engine. Como usted sabe en Unity, los scripts compilados en un archivo llamado "Assembly-CSharp.dll". Escribí mis scripts en C #.
Después de compilar todo el juego en .apk, lo cambié de nombre a .zip y arrastré el Assembly-CSharp.dll a herramientas como ILSpy, mientras que el programa completo fue completamente descompilado con todos los detalles como mi clave pública RSA o AES contraseña, IV, sal ...
La lógica de mi aplicación es cliente (Android) y servidor (Java).
Cuando el jugador terminó un nivel, con esta URL: enlace , le damos puntuación. Los parámetros reales son nombre de usuario, puntuación, marca de tiempo. Nuestro algoritmo de cifrado es RSA 1024 bit.
Cuando el tramposo / atacante rastrea el tráfico HTTP para usar el ataque de reproducción, verificamos el hash descifrado con RSA y con el parámetro de marca de tiempo lo echamos.
Pero cuando descompiló el código a la perfección con herramientas (ILSpy), simplemente encuentra mi clave pública y descubre que cifro la puntuación de usuario y la marca de tiempo con esa publicación. Luego, escribirá un programa Unity o C # para simplemente cifrar su mensaje manipulado con una nueva marca de tiempo y se confiará en mi aplicación del lado del servidor porque todo es cierto.
Incrementará su puntuación con la publicación de solicitudes HTTP al servidor sin jugar el juego. Él simplemente puede engañar.
¿Qué puedo hacer?
- No puedo usar SSL.
- Con la ofuscación, solo aumentará el tiempo de crack.
- Al proporcionar una clave pública en tiempo de ejecución desde el servidor al cliente, los verificadores de memoria o rastreadores de tráfico pueden simplemente ver la clave pública.