Tengo una pregunta sobre cómo proteger un programa de modificaciones si ese programa puede comunicarse con un servidor de validación remoto. Más específicamente, estoy pidiendo un archivo APK de Android, pero también puede ir a cualquier otro programa.
Me imagino el siguiente escenario hipotético:
Hay un archivo de instalación APK que el usuario está descargando e instalando en su dispositivo. La aplicación, después de ser instalada y utilizada, envía " alguna información " sobre su integridad a un servidor remoto. El servidor está validando que el programa está bien o está modificado por hackers.
Dado el escenario y el hecho de que los archivos APK están escritos en Java, ¿cuáles son algunas de las formas que un desarrollador puede usar para generar un valor hash de sus archivos de aplicación, de modo que posteriormente este hash se pueda enviar a un servidor remoto que a su vez ser capaz de validar ese hash - hash sobre el tamaño de los archivos, o algún otro tipo de estructura?
Me interesan algunas formas de generar esa " información " que se envía al servidor de validación.
Por favor, corríjame si la pregunta no está bien hecha ya que este escenario no es tan claro para mí y quizás haya otras maneras en que esto se puede lograr más fácilmente. Muchas gracias!
--- EXTENSIÓN ---
¡Hola y muchas gracias por las respuestas!
Me sorprenden las respuestas un poco, porque no pensé demasiado en el tema y pensé que habría un mecanismo fácil para hacer esto :) Pero ahora escucho que incluso los TPM no pueden garantizar el 100% protección ...
Como experto en el tema, me gustaría preguntar algo más. No quiero proteger el programa de la redistribución, como un mecanismo de protección contra copia. Quiero que el programa se pruebe de vez en cuando a través del servidor de validación, que no esté modificado.
Este es el escenario:
El servidor que distribuye la aplicación (que proporciona la descarga) calcula un hash del programa con algún algoritmo extraño, si lo hay. Más tarde, el programa utiliza el mismo algoritmo extraño para calcular un hash de sí mismo y enviarlo al servidor. El servidor luego compara los dos hashes. Si alguien ha modificado un archivo, por ejemplo, una instrucción JMP, el hash debe ser diferente y la aplicación se considera pirateada. ¿Cuáles son las fallas en este escenario? ¿Alguien podrá disolver el algoritmo para calcular el hash del programa y luego modificar el programa para enviar el mismo valor al servidor?
E incluso si este es el caso, ¿crees que esto todavía es mucho trabajo para que alguien lo haga, y puede que no valga la pena?