[Python-es] Código Python protegido

30 views
Skip to first unread message

Alvaro Manrique

unread,
Feb 23, 2012, 11:23:00 PM2/23/12
to La lista de python en castellano
Buenas Noches;

Existe algún mecanismo para proteger el código python?

Es decir, hay alguna manera de que python interprete código encriptado?

He estado un buen rato buscando información al respecto pero lo único que consigo es que solo distribuya los
archivos .pyc, pero ese método no creo que sea muy confiable.

He pensado en hacer un programa en C++ con el interprete de python embebido y que este se encargue del
(des)cifrado del .py, pero cuando llego al análisis en que se llame un modulo y este importe otros mas,
no se como interceptar esto, ya que esos otros módulos estarán encriptados y python no los va a entender.

Espero me haya podido hacer entender.

Les agradezco cualquier información, como siempre en todas mis dudas no espero la bandeja de plata jeje, pero
si cualquier guía, indicio, etc.


--


Alvaro Manrique
Programador
Caracas - Venezuela
Skype: alvaro_manrique



monoBOT

unread,
Feb 24, 2012, 5:51:48 AM2/24/12
to La lista de python en castellano
en breve: py2exe



--
monoBOT
Visite mi sitio(Visit my site): monobotblog.alvarezalonso.es

Òscar Vilaplana

unread,
Feb 24, 2012, 6:09:03 AM2/24/12
to La lista de python en castellano
2012/2/24 Alvaro Manrique <sanreik...@gmail.com>
No eres el primero en preguntar esto. En Internet hay mucha información al respecto, por ejemplo:


Para más información busca encrypt python source code.

Alvaro Manrique

unread,
Feb 24, 2012, 10:43:54 AM2/24/12
to La lista de python en castellano

MonoBot, la verdad es que py2exe no me sirve por que es sólo para windows

Oscar, la búsqueda en google la he hecho y créeme que de muchas maneras, he visto la gran cantidad de debates que se han abierto sobre el tema pero al final no se llega a una solución o metodo.

Esta inquietud no es nueva tengo mucho tiempo buscando una manera, tanto en google como analizando una solución propia, sin embargo sigo leyendo cualquier foro sobre el tema y voy a leer la información que me indicas

Quice exponer el tema nuevamente aquí ya que hay gente nueva integrando la lista y quizá alguno tiene alguna idea.

Sería interesante que si encontramos un buen metodo lo desarrollemos en conjunto.

_______________________________________________
Python-es mailing list
Pyth...@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/

Angel Claudio Alvarez

unread,
Feb 24, 2012, 4:51:48 PM2/24/12
to pyth...@python.org
Yo quisiera preguntarte, por que queres ocultar tu codigo??
Te da verguenza que otros lo vean?
Sos tan egoista que no queres compartir codigo?
Si alguna de estas respuestas es afirmativa yo te diria que te vuelques
a un lenguaje que si te permita ocultar tu codigo
El codigo abierto es la esencia de python.

> --
>
>
> Alvaro Manrique
> Programador
> Caracas - Venezuela
> Skype: alvaro_manrique
>
>
>

Carlos Zuniga

unread,
Feb 24, 2012, 6:02:28 PM2/24/12
to La lista de python en castellano
2012/2/24 Alvaro Manrique <sanreik...@gmail.com>:

> MonoBot, la verdad es que py2exe no me sirve por que es sólo para windows
>
> Oscar, la búsqueda en google la he hecho y créeme que de muchas maneras, he
> visto la gran cantidad de debates que se han abierto sobre el tema pero al
> final no se llega a una solución o metodo.
>
> Esta inquietud no es nueva tengo mucho tiempo buscando una manera, tanto en
> google como analizando una solución propia, sin embargo sigo leyendo
> cualquier foro sobre el tema y voy a leer la información que me indicas
>
> Quice exponer el tema nuevamente aquí ya que hay gente nueva integrando la
> lista y quizá alguno tiene alguna idea.
>
> Sería interesante que si encontramos un buen metodo lo desarrollemos en
> conjunto.

Una opción podría ser que reescribas la parte del programa que te
interesa proteger en cython [0], un lenguaje basado en python que se
compila y luego puedes importar como modulos desde python. Luego
puedes distribuir solo los .so junto con tu programa.

Saludos

[0] cython.org
--
Linux Registered User # 386081
A menudo unas pocas horas de "Prueba y error" podrán ahorrarte minutos
de leer manuales.

Alvaro Manrique

unread,
Feb 24, 2012, 7:16:11 PM2/24/12
to La lista de python en castellano

Gracias Carlos, estoy pensando en una opción similar.

Ángel con respecto a tus preguntas, lamento informarte que no acertaste ninguna y mucho menos que si me da vergüenza mostrar mi código jajajajajaja.

A groso modo lo que puedo decir es que este desarrollo esta hecho para manejar información muy delicada en la cual una fuga de la misma puede ser penada con cárcel.
Este desarrollo va a estar en un servidor donde tengo el control pero se puede presentar el escenario donde tenga que ser instalado en un servidor del cliente localmente, en ese caso es donde aplica proteger ciertas partes del código, el resto orgullosamente puedo mostrarlo y hacer circular el conocimiento, que en mi concepto es la mejor manera de aprender.

Pido disculpas si con esto vuelvo a generar el interminable debate del software libre, con lo cual me siento identificado pero no pienso hablar de eso.

Lamentablemente como veo que se puede desviar demasiado el tema creo que debe quedar hasta aquí.

Como ya explique me veo obligado a buscar una solución a esta situación y quien este buscando algo similar puede unirse al desarrollo.

Como última acotación previniendo que me manden a programar en otro lenguaje,  puedo decir que no es posible, ya que después de haber aprendido algunos lenguajes me quedé con python por obvias razones todos los que están en esta lista conocen.

Muchas gracias por el apoyo.

Sebastián Magrí

unread,
Feb 24, 2012, 7:31:57 PM2/24/12
to La lista de python en castellano

Alvaro Manrique

unread,
Feb 24, 2012, 9:09:18 PM2/24/12
to La lista de python en castellano

Gracias Sebastián voy a revisarlo

Alvaro Manrique

unread,
Feb 24, 2012, 9:32:23 PM2/24/12
to La lista de python en castellano
Oye excelente aporte Sebastián ya logre descargar la revista, vale la pena suscribirse a esa pagina,
si dan esos contenidos Free... me gustaría ver las revistas pagas.

Si no bajaste la revista y si quieres te la paso.

No esta demás decir que todos los demás contenidos están muy interesantes jeje.

Oswaldo

unread,
Feb 25, 2012, 5:01:45 AM2/25/12
to pyth...@python.org
El 25/02/2012 1:16, Alvaro Manrique escribió:
>....

> A groso modo lo que puedo decir es que este desarrollo esta hecho para
> manejar información muy delicada en la cual una fuga de la misma puede
> ser penada con cárcel.


Entonces creo la prioridad debería ser proteger la información mas que
el código de la aplicación.


--
Oswaldo

Andrey Antoukh

unread,
Feb 25, 2012, 6:53:28 AM2/25/12
to La lista de python en castellano
+1

Si el problema es la fuga de información, protege la información no el código en si!

Andrei.

2012/2/25 Oswaldo <lis...@soft-com.es>



--
Andrei Antoukh - <ni...@niwi.be>
http://www.niwi.be/page/about/
http://www.kaleidos.net/A5694F/

"Linux is for people who hate Windows, BSD is for people who love UNIX"
"Social Engineer -> Because there is no patch for human stupidity"

monoBOT

unread,
Feb 25, 2012, 7:03:16 AM2/25/12
to La lista de python en castellano
No se que problema le ves a hacer codigo privativo con Python ... Si fuera como tu dices el lenguaje de programación no podria servir para la vida laboral, que quieras o no estamos en un mundo movido por el dinero. Las empresas si contratan programadores es o para ganar dinero o para ahorrarselo, si es para ganar quieren que el código sea protegido si es para ahorrarselo quieren una ventaja competitiva respecto de la competencia.
Si quitas a Python del mundo del software privativo nos quitas a los que amamos este lenguaje de programación el poder trabajar con una herramienta que nos gusta.

Las razones que él tenga son suyas y los perfectamente razonables.

PD: ya te dio las razones y las veo perfectamente justificadas, si el protegiera la información pero no el código al leer el código podrías sacar la información es así de sencillo.

Andrey Antoukh

unread,
Feb 25, 2012, 7:45:01 AM2/25/12
to La lista de python en castellano
Creo que discrepo en 2 cosas:

Quitar python de uso en software privativo no quita el hecho de que puedes trabajar con el. 
Se ha dicho es fuga de información y no del código, la información es independiente del código. Si lo que quieres es proteger un procedimiento,  es una cosa pero información? que tiene que ver el código con la información! Lo dices como si una aplicación de código libre no pueda servir para trabajar con información protegida. Haciendo ver que cualquiera que vea el código de ese programa libre ya puede leer la información protegida. Es absurdo.

En mi opinión el segundo punto es bastante amplio y muy discutible, pero por la simple interpretación sobre "fuga de información" el hecho de proteger el código en vez de la información no tiene ningún significado.

Andrei.

2012/2/25 monoBOT <monobo...@gmail.com>
_______________________________________________
Python-es mailing list
Pyth...@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/

lasizoillo

unread,
Feb 25, 2012, 9:31:57 AM2/25/12
to La lista de python en castellano
Buenas,

Resumen ejecutivo:
1.- Antes de discutir nada hay que centrar conceptos.
2.- Cerrar el códido que maneja una información no implica asegurar la
información manejada (falsa sensación de seguridad).
3.- Cerrar código puede impedir el acceso a cierta información
(formatos cerrados vs abiertos).
4.- Hay que analizar los costes/beneficios de cerrar el código (en mi
opinión es despilfarro).

El que este cansado del temita puede dejarlo ahi. No voy a hablar de
python en el resto del correo.

El día 25 de febrero de 2012 13:03, monoBOT <monobo...@gmail.com> escribió:
> No se que problema le ves a hacer codigo privativo con Python ... Si fuera
> como tu dices el lenguaje de programación no podria servir para la vida
> laboral, que quieras o no estamos en un mundo movido por el dinero. Las
> empresas si contratan programadores es o para ganar dinero o para
> ahorrarselo, si es para ganar quieren que el código sea protegido si es para
> ahorrarselo quieren una ventaja competitiva respecto de la competencia.

Esa argumentación es falaz. Yo he ganado dinero haciendo software a
medida con licencia libre. Lo cual me ha impedido tener secuestrado al
cliente y chantagearle con actualizaciones y bombas de tiempo. Pero
fijate tu que iban y les daba por repetir y llamarte a tí en vez de a
la competencia (tenian el código y esa es una opcción legítima),
solian pagar un mantenimiento y te recomendaban a otra gente porque
habían quedado satisfechos.

> Si quitas a Python del mundo del software privativo nos quitas a los que
> amamos este lenguaje de programación el poder trabajar con una herramienta
> que nos gusta.

La verdad que aquí tambien veo una seríe de conceptos que habría que definir:

Software libre != open source != software privativo

El software libre es el que cumple con las 4 libertades del software,
el privativo el que no. El acceder al codigo fuente (open source) es
solo una de las libertades y no es necesario infringirla para hacer
código privativo.

El debate iba de cerrar un código, derivo en una pregunta sobre la
utilidad de cerrarlo y se está convirtiendo en un sentido (conceptos
mezclados) de defensa falaz (razonamientos lógicos con premisas
incorrectas) del software propietario. Para seguir por ahí habría que
irse a otro hilo o incluso a otro foro. No tiene nada que ver con
python.

>
> Las razones que él tenga son suyas y los perfectamente razonables.
>
> PD: ya te dio las razones y las veo perfectamente justificadas, si el
> protegiera la información pero no el código al leer el código podrías sacar
> la información es así de sencillo.
>

Si es así de sencillo te doy permiso para que me limpies la cuenta bancaria:
http://www.openssl.org/source/

Basar la seguridad de una información en la ocultación del programa
que lo codifica solo puede producir una falsa sensación de seguridad.
De hecho me ha tocado modificar código ofuscado y darme tiempo a
mostrarle los resultados al que los había ofuscado porque se iba de la
empresa. Muchos ofuscadores son muy debiles, lo mismo que muchos
sistemas de encriptación inventados por gente que piensa que la
seguridad está en el código. No suele hacer falta ser demasiado listo
para criptoanalizar y romper ese tipo de "protecciones". Con
conocimientos matemáticos de secundaria y un par de trucos sobra.

Por contra, he topado con gente que ahora quiere rescatar información
que está en una aplicación a medida de las que desconoce el formato y
las ha pasado putas. Pero esto no es un tema de apertura de código
sino de formatos libres. Supongo que cuando el código se quiere cerrar
es porque el formato de la información tampoco es libre.

Un saludo,

Javi

Alvaro Manrique

unread,
Feb 25, 2012, 9:51:37 AM2/25/12
to La lista de python en castellano
lasizoillo,

Totalmente de acuerdo contigo, sobre todo la parte en la de chantajear al cliente, no no no Sres. eso no se hace,
pero te invito a leer completo el debate sobre todo la parte donde dije que el código va a estar en un servidor bajo
mi control (es una aplicación web) pero se puede presentar el escenario donde se tenga que instalar en un servidor 
de alguno de los clientes en ese caso es que aplica protejer ciertas partes del código
lo dije desde un principio Ciertas Partes del Código

Lo de falsa seguridad mmmm, no lo creo, esta es solo una de las medidas de seguridad.


El sábado 25 de febrero de 2012, Alvaro Manrique escribió:


El sábado 25 de febrero de 2012, Alvaro Manrique escribió:
Lo explicaste excelentemente monoBot y gracias al aporte del amigo Sebastián se puede ver que existe
el mecanismo para que python trabaje con código encriptado (por lo menos fue lo que pude entender del articulo
hay que llevarlo a la practica para ver como se comporta)

Ahora si es tan absurdo lo que necesito hacer, porque esta alli la posibilidad desde python sin tener que tocar el
interprete o la maquina virtual??

Yo creo que mas absurdo es creer que se va a estar en un proyecto de gran envergadura, donde tienes que responderle
a una empresa que invierte en el proyecto y tienes que garantizar que el software es robusto a nivel de seguridad y pensar
en que el código va a estar allí perfectamente visible a cualquiera.

Quizá me digas que hay maneras de evitar que lleguen al código, te ahorro la escritura, se que las hay, pero créeme que
voy a implementar todas las posibles maneras para proteger el código

Si protejo la información? me sugieres encriptar toda la base de datos?? gran parte de ella??

Y cuando se procesen miles de registros??

Sacrifico la rapidez??

Yo pienso que la esencia del SL esta en lo que aportemos a la comunidad, no en que nos pasemos de "buenos" y dejemos 
códigos por allí así como así.

Que pasaría si los interesados en el tema desarrollamos el mecanismo, los módulos, etc, para trabajar con código encriptado?
Eso no seria un gran aporte a la comunidad??

Créeme hay grandes razones por la que muchos buscamos proteger el código pero siempre pienso en retribuir lo que la comunidad
me aporte, en mi concepto es lo verdaderamente importante, así ganamos todos.



Jhony ya te paso la revista, no esta completo el articulo de python por ser free, pero con lo que dice basta para que los
curiosos partamos de ahí y hacer la respectiva investigación ;)
--


Alvaro Manrique
Programador
Caracas - Venezuela
Skype: alvaro_manrique



Alvaro Manrique

unread,
Feb 25, 2012, 9:52:13 AM2/25/12
to La lista de python en castellano
lasizoillo,

Totalmente de acuerdo contigo, sobre todo la parte en la de chantajear al cliente, no no no Sres. eso no se hace,
pero te invito a leer completo el debate sobre todo la parte donde dije que el código va a estar en un servidor bajo
mi control (es una aplicación web) pero se puede presentar el escenario donde se tenga que instalar en un servidor 
de alguno de los clientes en ese caso es que aplica protejer ciertas partes del código
lo dije desde un principio Ciertas Partes del Código

Lo de falsa seguridad mmmm, no lo creo, esta es solo una de las medidas de seguridad



El sábado 25 de febrero de 2012, Alvaro Manrique escribió:


El sábado 25 de febrero de 2012, Alvaro Manrique escribió:
Lo explicaste excelentemente monoBot y gracias al aporte del amigo Sebastián se puede ver que existe
el mecanismo para que python trabaje con código encriptado (por lo menos fue lo que pude entender del articulo
hay que llevarlo a la practica para ver como se comporta)

Ahora si es tan absurdo lo que necesito hacer, porque esta alli la posibilidad desde python sin tener que tocar el
interprete o la maquina virtual??

Yo creo que mas absurdo es creer que se va a estar en un proyecto de gran envergadura, donde tienes que responderle
a una empresa que invierte en el proyecto y tienes que garantizar que el software es robusto a nivel de seguridad y pensar
en que el código va a estar allí perfectamente visible a cualquiera.

Quizá me digas que hay maneras de evitar que lleguen al código, te ahorro la escritura, se que las hay, pero créeme que
voy a implementar todas las posibles maneras para proteger el código

Si protejo la información? me sugieres encriptar toda la base de datos?? gran parte de ella??

Y cuando se procesen miles de registros??

Sacrifico la rapidez??

Yo pienso que la esencia del SL esta en lo que aportemos a la comunidad, no en que nos pasemos de "buenos" y dejemos 
códigos por allí así como así.

Que pasaría si los interesados en el tema desarrollamos el mecanismo, los módulos, etc, para trabajar con código encriptado?
Eso no seria un gran aporte a la comunidad??

Créeme hay grandes razones por la que muchos buscamos proteger el código pero siempre pienso en retribuir lo que la comunidad
me aporte, en mi concepto es lo verdaderamente importante, así ganamos todos.



Jhony ya te paso la revista, no esta completo el articulo de python por ser free, pero con lo que dice basta para que los
curiosos partamos de ahí y hacer la respectiva investigación ;)


El sábado 25 de febrero de 2012, Andrey Antoukh escribió:
--


Alvaro Manrique
Programador
Caracas - Venezuela
Skype: alvaro_manrique



Alvaro Manrique

unread,
Feb 25, 2012, 9:53:10 AM2/25/12
to La lista de python en castellano
Perdón por el doble envío.
--


Alvaro Manrique
Programador
Caracas - Venezuela
Skype: alvaro_manrique



Alvaro Manrique

unread,
Feb 25, 2012, 9:39:39 AM2/25/12
to La lista de python en castellano
Lo explicaste excelentemente monoBot y gracias al aporte del amigo Sebastián se puede ver que existe
el mecanismo para que python trabaje con código encriptado (por lo menos fue lo que pude entender del articulo
hay que llevarlo a la practica para ver como se comporta)

Ahora si es tan absurdo lo que necesito hacer, porque esta alli la posibilidad desde python sin tener que tocar el
interprete o la maquina virtual??

Yo creo que mas absurdo es creer que se va a estar en un proyecto de gran envergadura, donde tienes que responderle
a una empresa que invierte en el proyecto y tienes que garantizar que el software es robusto a nivel de seguridad y pensar
en que el código va a estar allí perfectamente visible a cualquiera.

Quizá me digas que hay maneras de evitar que lleguen al código, te ahorro la escritura, se que las hay, pero créeme que
voy a implementar todas las posibles maneras para proteger el código

Si protejo la información? me sugieres encriptar toda la base de datos?? gran parte de ella??

Y cuando se procesen miles de registros??

Sacrifico la rapidez??

Yo pienso que la esencia del SL esta en lo que aportemos a la comunidad, no en que nos pasemos de "buenos" y dejemos 
códigos por allí así como así.

Que pasaría si los interesados en el tema desarrollamos el mecanismo, los módulos, etc, para trabajar con código encriptado?
Eso no seria un gran aporte a la comunidad??

Créeme hay grandes razones por la que muchos buscamos proteger el código pero siempre pienso en retribuir lo que la comunidad
me aporte, en mi concepto es lo verdaderamente importante, así ganamos todos.



Jhony ya te paso la revista, no esta completo el articulo de python por ser free, pero con lo que dice basta para que los
curiosos partamos de ahí y hacer la respectiva investigación ;)


El sábado 25 de febrero de 2012, Andrey Antoukh escribió:

lasizoillo

unread,
Feb 25, 2012, 11:48:47 AM2/25/12
to La lista de python en castellano
El día 25 de febrero de 2012 15:51, Alvaro Manrique
<sanreik...@gmail.com> escribió:

> lasizoillo,
>
> Totalmente de acuerdo contigo, sobre todo la parte en la de chantajear al
> cliente, no no no Sres. eso no se hace,
> pero te invito a leer completo el debate sobre todo la parte donde dije que
> el código va a estar en un servidor bajo
> mi control (es una aplicación web) pero se puede presentar el escenario
> donde se tenga que instalar en un servidor
> de alguno de los clientes en ese caso es que aplica protejer ciertas partes
> del código,
> lo dije desde un principio Ciertas Partes del Código
>
> Lo de falsa seguridad mmmm, no lo creo, esta es solo una de las medidas de
> seguridad.
>

1.- Antes de discutir nada hay que centrar conceptos.


2.- Cerrar el códido que maneja una información no implica asegurar la
información manejada (falsa sensación de seguridad).
3.- Cerrar código puede impedir el acceso a cierta información
(formatos cerrados vs abiertos).
4.- Hay que analizar los costes/beneficios de cerrar el código (en mi
opinión es despilfarro).

El punto 1 parece realizado. El punto 2 parece aclarado si dices que
es solo una medida más. El punto 3 parece no ser relevante. Vayamos al
punto 4:

Los empaquetadores como py2exe o similares para otros sistemas
operativos hacen lo siguiente: crean un ejecutable con un interprete
de python e introducen los programas de python que son interpretados.
La ingeniería inversa de estos métodos son sencillos. Aun cuando
ejecuten los bytecodes de python y no el fuente de python, conseguir
los segundos a partir de los primeros es inmediato. Py2exe por si solo
carece de utilidad.

Se puede encriptar código python mediante el encoder:
https://breakingcode.wordpress.com/2010/07/23/quickpost-hiding-your-python-source-with-rot13/
Como te imaginaras el encoder es un código python que es utilizado
para desencriptar el propio programa antes de ser pasado al
intérprete. Da igual si lo que haces es crearte y registrar tu propio
encoding que no sufre de los problemas debilidad del rot13 (se ve
claramente si encriptas dos veces un mensaje para hacerlo más seguro),
porque será fácil usar trozos de tu propio código para desproteger tu
código. El encoder se encuentra en la zona de código no "asegurada".

Se puede usar cosas como cython, shedskin, ... para compilar tu código
fuente en un binario que sea más dificil de analizar. La diferencia es
que se hará ingenieria inversa leyendo código máquina en vez de
python. Es una molestia, pero no una barrera insalvable. A parte de
eso, ninguno de los compiladores de python que hay tienen soporte
total de python a día de hoy, por lo que te complicará el ciclo de
desarrollo limitándote las funcionalidades de python que puedes
utilizar en tu desarrollo.

Puedes mantener el código que quieres que permanezca oculto mediante
procedimientos remotos (xml-rpc por ejemplo). Eso garantiza que el
usuario del código no tiene acceso al mismo y no puede realizar una
ingeniería inversa de el (solo puede hacer análisis de caja negra). La
contrapartida es que el programa no funcionara en modo offline.

Puedes hacerte un paquete que incluya un binario capaz de ejecutar
código python cifrado con un secreto que es solicitado a un servicio
remoto o a un dongle conectado al ordenador y que descifre el código
python antes de ser ejecutado. Ese código lo puedes meter en zonas de
memoria marcadas para no ser swapeadas y al código base binario
ponerle varias medidas de seguridad: antidebugging, enpaquetado de
binarios, ... Todo esto solo sirve para hacer más dificil (no
inviable) el acceso al código, es técnicamente posible de hacer, pero
jamás lo he realizado porque la inversión en desarrollo nunca me ha
parecido rentable. Aparte de eso, siempre me ha parecido más divertido
saltarme las medidas de seguridad que implementarlas. El tiempo que se
pierde en impedir el acceso al código es tiempo que no estás empleando
en quitar a tu código de problemas de seguridad que puedan ser
detectados por un fuzzer y explotados sin aceso al código fuente.

Un saludo,

Javi

Alvaro Manrique

unread,
Feb 25, 2012, 12:41:54 PM2/25/12
to La lista de python en castellano
La verdad no he pensado en los empaquetadores como py2exe, no aplican para mi.
 
Se puede encriptar código python mediante el encoder:
https://breakingcode.wordpress.com/2010/07/23/quickpost-hiding-your-python-source-with-rot13/
Como te imaginaras el encoder es un código python que es utilizado
para desencriptar el propio programa antes de ser pasado al
intérprete. Da igual si lo que haces es crearte y registrar tu propio
encoding que no sufre de los problemas debilidad del rot13 (se ve
claramente si encriptas dos veces un mensaje para hacerlo más seguro),
porque será fácil usar trozos de tu propio código para desproteger tu
código. El encoder se encuentra en la zona de código no "asegurada".

Tienes toda la razón pero quizá pueda llegarse a algo mas complejo.
 
Se puede usar cosas como cython, shedskin, ... para compilar tu código
fuente en un binario que sea más dificil de analizar. La diferencia es
que se hará ingenieria inversa leyendo código máquina en vez de
python. Es una molestia, pero no una barrera insalvable. A parte de
eso, ninguno de los compiladores de python que hay tienen soporte
total de python a día de hoy, por lo que te complicará el ciclo de
desarrollo limitándote las funcionalidades de python que puedes
utilizar en tu desarrollo.

Me inclino mas por encriptarlo que pasarlo a binario.
 
Puedes mantener el código que quieres que permanezca oculto mediante
procedimientos remotos (xml-rpc por ejemplo). Eso garantiza que el
usuario del código no tiene acceso al mismo y no puede realizar una
ingeniería inversa de el (solo puede hacer análisis de caja negra). La
contrapartida es que el programa no funcionara en modo offline.

Eso es correcto y llegando al caso que deba ser offline, seria una debilidad.
 
Puedes hacerte un paquete que incluya un binario capaz de ejecutar
código python cifrado con un secreto que es solicitado a un servicio
remoto o a un dongle conectado al ordenador y que descifre el código
python antes de ser ejecutado. Ese código lo puedes meter en zonas de
memoria marcadas para no ser swapeadas y al código base binario
ponerle varias medidas de seguridad: antidebugging, enpaquetado de
binarios, ... Todo esto solo sirve para hacer más dificil (no
inviable) el acceso al código, es técnicamente posible de hacer, pero
jamás lo he realizado porque la inversión en desarrollo nunca me ha
parecido rentable. Aparte de eso, siempre me ha parecido más divertido
saltarme las medidas de seguridad que implementarlas. El tiempo que se
pierde en impedir el acceso al código es tiempo que no estás empleando
en quitar a tu código de problemas de seguridad que puedan ser
detectados por un fuzzer y explotados sin aceso al código fuente.

Nuevamente de acuerdo contigo, seria mas difícil mas no imposible y esa es la
idea.


Gracias por la critica constructiva aquí me estas dando datos bien interesantes 
que voy a investigar.


 
Un saludo,

Javi
_______________________________________________
Python-es mailing list
Pyth...@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/

Angel Claudio Alvarez

unread,
Feb 26, 2012, 6:33:42 PM2/26/12
to pyth...@python.org
El vie, 24-02-2012 a las 19:46 -0430, Alvaro Manrique escribió:
> Gracias Carlos, estoy pensando en una opción similar.
>
> Ángel con respecto a tus preguntas, lamento informarte que no
> acertaste ninguna y mucho menos que si me da vergüenza mostrar mi
> código jajajajajaja.
>
> A groso modo lo que puedo decir es que este desarrollo esta hecho para
> manejar información muy delicada en la cual una fuga de la misma puede
> ser penada con cárcel.
> Este desarrollo va a estar en un servidor donde tengo el control pero
> se puede presentar el escenario donde tenga que ser instalado en un
> servidor del cliente localmente, en ese caso es donde aplica proteger
> ciertas partes del código, el resto orgullosamente puedo mostrarlo y
> hacer circular el conocimiento, que en mi concepto es la mejor manera
> de aprender.
>
Si tiene esos requisitos, insisto, debes utilizar un lenguaje con C o C
++
Yo, personalmente si la fuga de codigo es una variable, no tilizaria
ningun lenguaje que pueda ser decompilado tan facilmente como python o
java

> Pido disculpas si con esto vuelvo a generar el interminable debate del
> software libre, con lo cual me siento identificado pero no pienso
> hablar de eso.
>
> Lamentablemente como veo que se puede desviar demasiado el tema creo
> que debe quedar hasta aquí.
>
ok

> Como ya explique me veo obligado a buscar una solución a esta
> situación y quien este buscando algo similar puede unirse al
> desarrollo.
>
insisto, utiliza C

> Como última acotación previniendo que me manden a programar en otro
> lenguaje, puedo decir que no es posible, ya que después de haber
> aprendido algunos lenguajes me quedé con python por obvias razones
> todos los que están en esta lista conocen.
>
aca estas equivocado, no vas a ser un buen programador si no dominas 3 o
4 lenguajes y uno que deberia ser requerido es C ( y C++)

Alvaro Manrique

unread,
Feb 26, 2012, 7:02:03 PM2/26/12
to La lista de python en castellano

Ángel debes leer bien el último párrafo, dije que después de aprender algunos lenguajes, no vi necesidad de dar detalles en ese punto, la verdad no viene al caso, pero lo que te puedo responder que si dominó c++

Chema Cortes

unread,
Feb 27, 2012, 9:28:46 AM2/27/12
to La lista de python en castellano
El 2012/2/25 Alvaro Manrique <sanreik...@gmail.com>:

> Yo creo que mas absurdo es creer que se va a estar en un proyecto de gran
> envergadura, donde tienes que responderle
> a una empresa que invierte en el proyecto y tienes que garantizar que el
> software es robusto a nivel de seguridad y pensar
> en que el código va a estar allí perfectamente visible a cualquiera.

Personalmente, trabajo también con datos "muy sensibles" y nunca he
pensado que la robustez de una aplicación consista en impedir que se
sepa cómo funciona, si no más bien todo lo contrario. Por lo general,
la seguridad de mis aplicaciones se establece a través de librerías
externas bien probadas (y sobre todo bien mantenidas), con métodos
criptográficos hardware (tarjetas con chip) y comunicaciones seguras
(ssl).


> Si protejo la información? me sugieres encriptar toda la base de datos??
> gran parte de ella??
>
> Y cuando se procesen miles de registros??
>
> Sacrifico la rapidez??

¡Por supuesto! No es concebible que por un lado pretendas esconder el
código y que, por otro lado, los datos estén accesibles en claro.


> Yo pienso que la esencia del SL esta en lo que aportemos a la comunidad, no
> en que nos pasemos de "buenos" y dejemos
> códigos por allí así como así.

Pues te tengo que contradecir. La esencia del SL es dar libertad al
usuario para saber qué hace el software que utiliza, estudiarlo,
modificarlo y redistribuirlo libremente. Si impides cualquiera de
estas "libertades", llámalo como quieras, pero no "Software Libre".
Tanta fuga de seguridad se podría considerar el ofrecer el código al
usuario, como venir a un foro de "desconocidos" a comentar cómo
resolver un problema determinado. De hecho, muchas empresas prohiben a
sus trabajadores participar en foros públicos.


> Que pasaría si los interesados en el tema desarrollamos el mecanismo,
> los módulos, etc, para trabajar con código encriptado?
> Eso no seria un gran aporte a la comunidad??

Sí, pero no a cualquier precio.


> Créeme hay grandes razones por la que muchos buscamos proteger el código
> pero siempre pienso en retribuir lo que la comunidad
> me aporte, en mi concepto es lo verdaderamente importante, así ganamos
> todos.

Tampoco pretendemos que cambies de opinión. Siempre que hemos tratado
este tema hemos aconsejado no ocultar el código y probar con otras
cosas, dedicar todo ese esfuerzo en donde realmente se puede mejorar
la aplicación.

De todos modos, y recuperando el tema, hace tiempo creé un script para
empaquetar un programa python y todos sus módulos en un sólo fichero.
No es una maravilla, pero al menos te dará alguna pista, además de
desconcertar a más de uno:

http://ch3m4.org/pystore/zippack.py

Para usarlo:

$ python zippack.py zipped.py main.py mod1.py mod2.py


--
Hyperreals *R: http://ch3m4.org/blog
Quarks, bits y otras criaturas infinitesimales

Reply all
Reply to author
Forward
0 new messages