Tengo muchos scripts Lua (para el modo multijugador Multi Theft Auto) que se compilan, por muchas razones, incluida la prevención de robos. En realidad, esto es solo un elemento disuasorio de robo, ya que Luadec (http://luadec51.luaforge.net/) puede fácilmente descompilar las secuencias de comandos. ¿Alguien tiene algún consejo sobre cómo puedo hacer que mis scripts no se descompilen?¿Cómo puedo hacer que los guiones Lua no se descompilen?
Respuesta
Encriptación; esa es realmente la única forma en que funcionará. Por supuesto, dado que su programa tendría que descifrarlos, podrían simplemente arrebatar los datos descifrados directamente de la memoria.
Así que no, no hay nada que puedas hacer. Cualquier método va a ser "solo un elemento disuasivo de robo" hasta cierto punto. Incluso compilar para el ensamblaje real es solo un elemento de disuasión, ya que se puede descompilar en algo no muy diferente al código fuente original.
La pregunta es simplemente cuántos problemas le quiere dar al usuario. El cifrado probablemente le brinde el máximo rendimiento por su dinero. Esto les obligará a tener que caminar a través del ejecutable para descubrir cómo sacar los datos de la memoria. La mayoría de los usuarios casuales no querrán hacer eso.
Si quieres ponerte realmente serio, puedes cambiar los códigos de operación generados y utilizados por lua vm, luego no se pueden descompilar con el software listo para usar. Aunque esto podría causarte más problemas de los que vale la pena, deberías apoyar tu propia versión de lua, y probablemente no puedas usar cosas como luajit.
Para descompilar, tendrían que resolver el mapeo de los códigos de operación que se te ocurrirían y traducirían. Probablemente no sería tan difícil de hacer, pero probablemente no lo haría.
[Actualización]
En cuanto a la fuente puede ser bastante fácil, hay dos archivos lopcode.c y lopcode.h tal vez si sólo cambia el orden de los códigos de operación en estos le será hecho. Por favor, publique si termina haciendo esto y funciona o no.
No creo que sea posible. La naturaleza misma de la bestia (un lenguaje muy mínimo que trabaja en una máquina virtual muy pequeña) básicamente lo prohíbe.
Lo mejor que puede esperar es que el código decompilado sea lo más difícil de comprender posible para un ser humano.
Multi Theft Auto ahora admite el cifrado de scripts. Puede compilarlos en línea en http://luac.mtasa.com/ o descargar el compilador independiente.
- 1. ¿Cómo puedo hacer que los elementos HTML no sean resaltables?
- 2. ¿Cómo hacer para que los botones no se concentren?
- 3. Lua - ¿Cómo hacer la internacionalización?
- 4. ¿Cómo hacer coincidir los guiones con la expresión regular?
- 5. Regex - ¿Se deberían escapar los guiones?
- 6. ¿Cómo puedo hacer una matriz 2D en Lua?
- 7. HTML adjunto que contiene javascript no se ejecuta, ¿cómo puedo hacer que se ejecute?
- 8. ¿Cómo compilar los guiones de Lua en un solo ejecutable, mientras se gana el rápido compilador de LuaJIT?
- 9. ¿Cómo hacer espacio de nombres en lua?
- 10. ¿Puedo hacer que @OnApplicationStart no se ejecute en las pruebas?
- 11. ¿Cómo puedo hacer que un área no se pueda hacer clic en CSS?
- 12. ¿Cómo puedo asegurar que los scripts se ejecuten usando javax.scripting?
- 13. ¿Cómo puedo hacer que Inno Setup ignore los directorios vacíos?
- 14. VS2010 - Los guiones se muestran en todos los espacios
- 15. ¿Cómo puedo hacer que los botones de entrada se vean exactamente iguales en todos los navegadores?
- 16. ¿Cómo puedo hacer para que git rechace presionar el código que no se compilará?
- 17. Cómo puedo hacer que se necesite un parámetro de WebMethod
- 18. ¿Cómo puedo hacer que una aplicación Java se actualice automáticamente?
- 19. No se puede hacer que Resque funcione
- 20. ¿Cómo puedo hacer que un ListBoxItem se alargue verticalmente
- 21. ¿Cómo puedo hacer que Ruby libere memoria no referenciada?
- 22. ¿Cómo puedo configurar vim para que los comandos de movimiento incluyan guiones bajos y CamelCase, pero la terminación los ignorará?
- 23. ¿Cómo puedo hacer que mi aplicación .NET se borre sola?
- 24. ¿Cómo puedo hacer que los enlaces sean blancos?
- 25. ¿Cómo puedo hacer que mi objeto de física se calme?
- 26. ¿Cómo puedo hacer que UITextFieldDelegate.shouldChangeCharactersInRange se active con inputView personalizado?
- 27. ¿Cómo puedo hacer que System.Net.Http.HttpClient no siga 302 redirecciones?
- 28. ¿Cómo hacer que el div subyacente no se pueda cliquear?
- 29. Cómo puedo hacer que el instalador se ejecute como administrador
- 30. ¿Cómo puedo hacer que mi Visual Studio se vea así?
Podría hacerlo un poco más difícil cambiando también el orden de los operandos en las instrucciones de VM. – lhf
Tenga en cuenta que este enfoque probablemente no funcione completamente si tiene acceso a un lister de bytecode como el proporcionado por 'luac' porque podría realizar una ingeniería inversa del pedido. Pero sería un dolor y probablemente disuadiría a la mayoría de las personas. O sea un desafío para el pirata informático motivado. :-) – lhf
De hecho, nada detendrá al hacker dedicado con un volcado hexadecimal. Si incluye esto con encriptación como lo sugiere Nicol a continuación y primero lo ejecuta a través de un ofuscador lua, solo quedaría el verdaderamente dedicado. – daven11