¿Cómo evitar la descomstackción o la inspección de código python?

Supongamos que hay un gran proyecto comercial (también conocido como Proyecto), que utiliza Python bajo el capó para administrar complementos para configurar nuevas superficies de control que pueden ser adjuntas y utilizadas por el Proyecto.

Hubo una pequeña fuga de información, parte de la API de Python del Proyecto se filtró a la información pública y la gente pudo escribir scripts de Python que fueron llamados por la implementación de Python subyacente como parte del mecanismo de carga de complementos del Proyecto.

Más adelante, utilizando el módulo de inspect y las lecturas de __dict__ bruto, las personas pudieron descubrir una parte importante de la implementación de Python subyacente del Proyecto.

¿Hay alguna manera de mantener en secreto los códigos secretos de Python?

Un rápido vistazo a la documentación de Python reveló una manera de suprimir una importación del módulo de inspect esta manera:

 import sys sys.modules['inspect'] = None 

¿Resuelve el problema completamente?

No, esto no resuelve el problema. Alguien podría simplemente cambiar el nombre del módulo de inspección a otra cosa e importarlo.

Lo que estás tratando de hacer no es posible. El intérprete de Python debe poder tomar su código de bytes y ejecutarlo. Alguien siempre podrá descomstackr el código de bytes. Siempre podrán producir un AST y ver el flujo del código con nombres de variables y clases.

Tenga en cuenta que este proceso también se puede realizar con código de idioma comstackdo; La diferencia es que obtendrá el assembly. Algunas herramientas pueden inferir la estructura C del ensamblaje, pero no tengo suficiente experiencia con eso para comentar los detalles.

¿Qué información específica estás tratando de ocultar? ¿Podría mantener el lado del servidor de algoritmos y convertir su software en un cliente que toque su servicio web? Mantener el código en una máquina que usted controla es la única manera de mantener realmente el control sobre el código. No puedes darle a alguien una caja cerrada, las llaves de la caja, y evitar que la abran cuando tienen que abrirla para poder ejecutarla. Esta es la misma razón por la que el DRM no funciona.

Dicho todo esto, todavía es posible dificultar la ingeniería inversa, pero nunca será imposible cuando el cliente tenga el ejecutable.

No hay manera de mantener su código de aplicación en secreto absoluto.

Francamente, si un grupo de piratas informáticos dedicados y determinados (en el buen sentido, no en sentido peyorativo) puede descifrar el modelo de seguridad de firma de código de PlayStation, entonces su aplicación no tiene ninguna posibilidad. Una vez que haya puesto su aplicación en manos de alguien que no pertenezca a su empresa, se puede realizar ingeniería inversa.

Ahora, si desea esforzarse en hacerlo más difícil, puede comstackr su propio ejecutable Python incrustado, eliminar módulos innecesarios, ofuscar el código de bytes de Python comstackdo y envolverlo en un rootkit de malware que se niega a iniciar su aplicación si hay un depurador Esta corriendo.

Pero realmente deberías pensar en tu modelo de negocio. Si ve a las personas que sienten pasión por su producto como una amenaza, si ve a las personas que están dispuestas a dedicar tiempo y esfuerzo en personalizar su producto para personalizar su experiencia como un peligro, tal vez necesite volver a pensar su enfoque de seguridad. . Suponiendo que no está en el negocio de DRM, o que tiene un modelo similar que involucra exprimir el dinero de los consumidores reacios, considere desarrollar un enfoque que implique compartir información con sus usuarios y permitirles mejorar su producto en colaboración.

¿Hay alguna manera de mantener en secreto los códigos secretos de Python?

No no hay.

Python es particularmente fácil de usar ingeniería inversa, pero otros lenguajes, incluso los comstackdos, son bastante fáciles de invertir.

No se puede evitar completamente la ingeniería inversa del software: si se trata de ello, siempre se pueden analizar las instrucciones del ensamblador en las que se compone su progtwig.

Sin embargo, puede complicar significativamente el proceso, por ejemplo, jugando con los elementos internos de Python. Sin embargo, antes de saltar a cómo hacerlo, te sugiero que evalúes si hacerlo. Por lo general, es más difícil “robar” su código (después de todo, es necesario entenderlos completamente para poder extenderlos) que codificarlos uno mismo. Sin embargo, una interfaz de plugin Python pura y simple puede ser vital para crear un ecosistema completo alrededor de su progtwig, que supera con creces las posibles desventajas de que alguien pueda echar un vistazo a sus internos de encoding tal vez no perfectamente diseñados.