Proteja su código Python: Los esquemas de cifrado existentes

Debido a las características dinámicas y características de la fuente abierta Python, lo que resulta en el código Python que es difícil de hacer una buena encriptación. Algunas voces en la comunidad es el hecho de que tales restricciones deben ser a través de medios legales en lugar de código fuente cifrado para lograr el propósito de la protección comercial, y hay algún sonido independientemente quieren tener un medio para cifrar. Desde entonces, la gente viene con todo tipo o programa cifrado, o ofuscado, por lo tanto para lograr el propósito de proteger el código fuente.

medios de fuente común de protección se resumen de la siguiente manera:

  • archivos de liberación .pyc
  • ofuscación de código
  • uso py2exe
  • uso Cython

Hablemos de estas soluciones simples.

1 número de archivos .pyc

1.1 Ideas

Como todos sabemos, Python intérprete primero generar el archivo .pyc durante la ejecución del código, y luego explicar la aplicación de los contenidos del archivo .pyc. Por supuesto, Python intérprete puede ejecutar el archivo .pyc directamente. Los archivos .pyc son archivos binarios y no pueden ver directamente el contenido de la fuente. Si el código es emitido .pyc .py en lugar de archivo en el entorno de cliente, entonces no sería capaz de lograr el propósito de protección de código Python?

1.2 Métodos

Los archivos .py se compilan de archivo .pyc, es una cosa muy fácil, todo el código que no sea necesario ejecutar de nuevo, y luego los archivos generados Qulao .pyc.

De hecho, la biblioteca estándar Python proporciona una biblioteca denominada compileall, y puede ser fácilmente compilado.

Ejecute el siguiente comando será capaz de atravesar Todos los archivos .py en el directorio, que serán compilados en un archivo .pyc:

python -m compileall A continuación, quitar Directorio de todos los archivos .py a ser envasados ​​en libertad:

$ find <src> -name '*.py' -type f -print -exec rm {} \;

1.3 ventaja

  • Fácil de mejorar un poco fuente de barreras de quiebre
  • compatibilidad de la plataforma, donde .py plazo, .pyc donde puede ejecutar

Menos de 1,4

  • Explicar la compatibilidad de diferencia, .pyc sólo puede ejecutarse en una versión específica del intérprete
  • Existen herramientas confeccionadas a descomponer, ruptura de bajo coste

python-uncompyle6 es un decompilador tal, excepcional.

Ejecute los siguientes comandos en el archivo descompilar .pyc como archivos .py:

$ uncompyle6 *compiled-python-file-pyc-or-pyo*

2 ofuscación de código

Si el código es confuso, en cierta medida, incluso el autor parecía en absoluto extenuante, entonces, no es que también se puede lograr el objetivo de proteger la fuente de la misma?

2.1 Ideas

Puesto que nuestro objetivo es confuso, es a través de una serie de conversión, por lo que poco a poco el código no es tan fácil de hacer que la gente entienda que puede comenzar la siguiente manera: - notas y eliminación de documentos. Sin estas instrucciones, de alguna lógica crítica no es tan fácil de entender. - cambiar el guión. Perfecta sangría parecía simplemente cómoda, si de repente hendidura larga corta repentinamente, mirando desde luego chupar. - la adición de un cierto espacio en el medio de fichas. Este cambio y la sangría resultados similares. - la función Cambiar nombre, clase, variable. El nombramiento de un impacto directo sobre la legibilidad del nombre de un desastre, pero un gran obstáculo para la comprensión de lectura. - Insertar un código inválido línea en blanco. Este es el encubrimiento, sin nada que leer el código para interrumpir el ritmo.

2.2 Método

Método uno: Uso oxyry confundirse

http://pyob.oxyry.com/ es un código Python en línea sitio de confusión, el uso que puede ser fácilmente confundida.

Supongamos que tenemos este pedazo de código Python relacionado con los contenidos de clases, funciones, parámetros:

# coding: utf-8class A(object):
    """    Description    """

    def __init__(self, x, y, default=None):
        self.z = x + y
        self.default = default

    def name(self):
        return 'No Name'def always():
    return Truenum = 1a = A(num, 999, 100)a.name()always()

Ofuscado Oxyry obtener el siguiente código:

class A (object ):#line:4
    ""#line:7
    def __init__ (O0O0O0OO00OO000O0 ,OO0O0OOOO0000O0OO ,OO0OO00O00OO00OOO ,OO000OOO0O000OOO0 =None ):#line:9
        O0O0O0OO00OO000O0 .z =OO0O0OOOO0000O0OO +OO0OO00O00OO00OOO #line:10
        O0O0O0OO00OO000O0 .default =OO000OOO0O000OOO0 #line:11
    def name (O000O0O0O00O0O0OO ):#line:13
        return 'No Name'#line:14def always ():#line:17
    return True #line:18num =1 #line:21a =A (num ,999 ,100 )#line:22a .name ()#line:23always ()

Código se ofusca principalmente en los comentarios, hizo algunos ajustes en el nombre del parámetro y el espacio, crea una barrera en un pequeño punto de lectura.

Segundo método: Uso de la biblioteca pyobfuscate confundido

pyobfuscate sea un año de gran librería de código Python ofuscación, pero es "sano y fuerte" hacia arriba.

Del mismo modo Python sección de código anterior, los siguientes efectos después de confusión pyobfuscate:

# coding: utf-8if 64 - 64: i11iIiiIiiif 65 - 65: O0 / iIii1I11I1II1 % OoooooooOO - i1IIiclass o0OO00 ( object ) :
 if 78 - 78: i11i . oOooOoO0Oo0O
 if 10 - 10: IIiI1I11i11
 if 54 - 54: i11iIi1 - oOo0O0Ooo
 if 2 - 2: o0 * i1 * ii1IiI1i % OOooOOo / I11i / Ii1I
 def __init__ ( self , x , y , default = None ) :
  self . z = x + y
  self . default = default
  if 48 - 48: iII111i % IiII + I1Ii111 / ooOoO0o * Ii1I
 def name ( self ) :
  return 'No Name'
  if 46 - 46: ooOoO0o * I11i - OoooooooOO
  if 30 - 30: o0 - O0 % o0 - OoooooooOO * O0 * OoooooooOOdef Oo0o ( ) :
 return True
 if 60 - 60: i1 + I1Ii111 - I11i / i1IIi
 if 40 - 40: oOooOoO0Oo0O / O0 % ooOoO0o + O0 * i1IIiI1Ii11I1Ii1i = 1Ooo = o0OO00 ( I1Ii11I1Ii1i , 999 , 100 )Ooo . name ( )Oo0o ( ) # dd678faae9ac167bc83abf78e5cb2f3f0688d3a3

En comparación con el efecto de un método, segundo método se ve mejor. Además de las clases y funciones han cambiado de nombre, añadido algunos espacios, código introducido varios segmentos más notablemente independientes, se hace más difícil de leer.

2.3 ventaja

  • Fácil de mejorar un poco fuente de barreras de quiebre
  • La compatibilidad es buena, siempre y cuando la lógica fuente puede ser complaciente, código ofuscado también puede

Menos de 2.4

  • Sólo un único archivo de confusión, no puede vincularse a varios archivos de origen en relación con los demás confundido
  • No cambió la estructura del código, el código de bytes puede ser adquirida, no es difícil de romper

3 Usando py2exe

3.1 Ideas

py2exe es una secuencia de comandos de Python para convertir herramienta de archivos ejecutables en la plataforma Windows. El principio es para compilar el archivo fuente para la .pyc, junto con las dependencias necesarias, envasados ​​juntos en un único archivo ejecutable.

Si el paquete de la versión final de los archivos binarios py2exe, no lograría el propósito de proteger el código fuente?

3.2 Método

Para utilizar py2exe para empaquetar una relativamente simple.

1) la preparación de los documentos de importación. En este ejemplo el nombre hello.py:

print 'Hello World'

2) escrita setup.py:

from distutils.core import setupimport py2exesetup(console=['hello.py'])

3) para generar un archivo ejecutable

python setup.py py2exe

El archivo ejecutable resultante se encuentra en dist \ hello.exe.

3.3 ventaja

  • Se puede envasar directamente en exe, fácil de distribuir y ejecutar

  • Un umbral más alto que la grieta .pyc

  • Menos de 3,4

mala compatibilidad, la disposición de los archivos ejecutables generados sólo se puede ejecutar en un sistema Windows es clara y abierta, se puede encontrar el archivo .pyc código fuente correspondiente, y luego descompilar el código fuente

4 Uso Cython

4.1 Ideas

Aunque el propósito principal es llevar a la mejora del rendimiento Cython, pero se basa en el principio: el archivo .py / .pyx .c se compila, entonces el archivo .c se compila .so (Unix) o .pyd (Windows), que otros beneficios es difícil de descifrar.

4.2 Método

Para utilizar el desarrollo Cython no es complicado.

1) preparación de documentos hello.pyx o hello.py:

def hello():
    print('hello')

2) escrita setup.py:

from distutils.core import setupfrom Cython.Build import cythonizesetup(name='Hello World app',
     ext_modules=cythonize('hello.pyx'))

3) compilado como .c, compilado adicionalmente como .so o .pyd:

python setup.py build_ext --inplace

-C realización de Python "de importación hola hola, hola ()" referencia directa a un archivo binario generado hola () función.

4.3 ventaja

  • El archivo binario resultante .so difícil de roer o .pyd
  • Mientras que las mejoras de rendimiento que ofrece

Menos de 4.4

  • Compatibilidad algo menos, para las diferentes versiones del sistema operativo, es posible que tenga que volver a compilar
  • Si bien el apoyo de la mayoría del código Python, pero si alguna vez parte del código no se encuentra apoyo y mejorar los mayores costos

    Wen red de origen por motivos de estudio, si el contacto infracción eliminado.

    Yo estaré artículos y clases de técnicas de alta calidad aprendidas están reunidos en mi No. pública [] en los círculos de Python como para facilitar el aprendizaje, sino también armar un conjunto de materiales de aprendizaje, libre de amar a los estudiantes de Python! Más aprendiendo grupo de intercambio, y más problemas de comunicación pueden progresar más rápidamente ~

Publicado 38 artículos originales · ganado elogios 1 · vistas 2170

Supongo que te gusta

Origin blog.csdn.net/wulishinian/article/details/105120515
Recomendado
Clasificación