La situación: Estoy desarrollando un script que se ejecuta en un popular juego de sandbox como un servicio de pago para otros desarrolladores. El problema es que el juego no implementa una forma de hacerlo. El idioma es Lua y el juego ha desactivado la carga de bytecode. Esto significa que cualquier script que entregue a los otros desarrolladores tendría que ser un código ejecutable.
El modelo de amenaza: los desarrolladores pueden acceder y modificar el código fuente del script. Pueden configurar servidores para ejecutar scripts en su propia computadora o en el servidor del propietario del juego. Todos los scripts se ejecutan en un servidor, y nunca en la computadora del jugador.
Solución actual: mi código puede cargar código fuente de cadena y contactar a un servidor externo a través de HTTP. Creo que lo mejor que puedo hacer es contactar con el servidor externo para verificar qué tipo de servidor estoy ejecutando y denegar el acceso si la solicitud no proviene de un servidor oficial del juego. Confío en los servidores oficiales del juego. Una vez hecho esto, mi script puede ejecutar el servicio que se le transmite.
Si los desarrolladores pueden editar mi código fuente y para ejecutar el servicio necesito una cadena para cargar, ¿qué es lo que impide que el desarrollador imprima la cadena justo antes de ejecutarla? Podría usar toda la criptografía de caja blanca que quiera, pero el punto final de la carga de una cadena aún es vulnerable. ¿Alguno de ustedes, expertos en seguridad, tiene una respuesta o experiencia en proyectos como este?