Buenas a todos, hace tiempo que he estado adentrándome en el manejo de archivos con python. Lo primero que creé fue una calculadora para hacer cambios de binarios, decimales, octales y hexadecimales (http://indetectables.net/viewtopic.php?f=12&t=52309), bastante simple a decir verdad. Esta vez traigo algo un poco más elaborado. Se trata de un algoritmo para cifrar archivos, pero que además comprime el archivo al cifrarlo. Para comprimirlo reduce la cantidad de bytes 0x00 en el archivo. Podría ilustrarse así si lo vemos como en un editor hexadecimal:
Caso 1: A1 00 00 00 00 B2 01 7C > A1 00 03 B2 01 7C          (aquí nos ahorramos dos bytes)
Caso 2: B1 FB 00 CC A2 72 A1 2D > B1 FB 00 00 CC A2 72 A1 2D (aquí aumentamos en un byte)
Caso 3: B1 FB 00 00 A2 72 A1 2D > B1 FB 00 01 A2 72 A1 2D    (aquí no ganamos ni perdimos )
Teóricamente podría suceder que el archivo aumente su tamaño (si el caso 2 se repite mucho y el caso 1 no), pero en la práctica es sumamente extraño que pase, casi siempre el archivo va a reducir al menos unos miles de bytes. No estoy seguro si esta forma de compresión ya existía pero hago el aporte igualmente.

Luego de realizar la compresión viene el cifrado, que vendría siendo un algoritmo simple que cifra byte a byte con un contraseña. El algoritmo fue una invención mía, no es XOR aunque se parece un poco. Luego para decodificar es el proceso inverso, creo que no es necesario explicarlo.

El código puede ser fácilmente traducido a otros lenguajes (tal vez me animo a pasarlo a VB6) y no vendría mal para quienes hacen crypters. Inicialmente el código resultaba ser un poco lento, por eso no lo había publicado, pero optimicé el código y mejoró muchísimo. Sin más, les dejo el source:

Mostrar/Ocultar

Para quienes quieran estudiar mejor el algoritmo les dejo el source no optimizado, que hace exactamente lo mismo que el código de arriba pero es más fácil de entender.

Mostrar/Ocultar

Espero alguien pueda darle buen uso, saludos a todos.
Hack 'em all
Skype: szudisch
(C) Szudisch 2013
La forma que usas para comprimir sería [Enlace externo eliminado para invitados]. No sé python pero me lo guardo por si algún día me da por aprender.

¡Gracias por compartirlo!
gracias por su aporte
* _*
<\--♥
_/|_ "Para crear enemigos no es necesario declarar la guerra, es sólo decir lo que piensa."
Blau escribió:La forma que usas para comprimir sería [Enlace externo eliminado para invitados]. No sé python pero me lo guardo por si algún día me da por aprender.

¡Gracias por compartirlo!
Claro, es justamente lo que dices, no sabía que tenía un nombre como tal, pero se aplica solamente a los 0x00, si se aplicara a todos los bytes el archivo aumentaría su tamaño. Por cierto, es posible que más adelante lo traduzca a VB6.

Estuve probando varios archivos y hay algunos en que comprime poco y otros en que comprime harto, el mayor porcentaje de compresión la logré en una bolita que tenía (de 12KB a 4,3KB):
Imagen


Aprovecho de aclarar, ya que me preguntaron, que el código que está abajo hace exactamente lo mismo que el de arriba pero es bastante más lento. Lo publiqué igual porque se hace más fácil entender el código ahí por si alguien quería estudiarlo.

¡Saludos y gracias por sus comentarios!
Hack 'em all
Skype: szudisch
(C) Szudisch 2013
En que version de python esta hecha en la 2.x o en la 3.x
olle los metodos de accesos para lectura y escritura de ficheros los "br" y "bw" no los habia mirado tienes alguna info sobre ellos, ya que yo uso la version 2.7 de python y parace que es diferente o funciona igual como el "r" y "w"
Si me da tiempo lo traduzco a Delphi saludos...
Skype:crack8111
crack81 escribió:En que version de python esta hecha en la 2.x o en la 3.x
olle los metodos de accesos para lectura y escritura de ficheros los "br" y "bw" no los habia mirado tienes alguna info sobre ellos, ya que yo uso la version 2.7 de python y parace que es diferente o funciona igual como el "r" y "w"
Si me da tiempo lo traduzco a Delphi saludos...
Supongo que 'br' y 'bw' serán 'r' y 'w' para binario.
crack81 escribió:En que version de python esta hecha en la 2.x o en la 3.x parece ser la ultima
olle los metodos de accesos para lectura y escritura de ficheros los "br" y "bw" no los habia mirado tienes alguna info sobre ellos, ya que yo uso la version 2.7 de python y parace que es diferente o funciona igual como el "r" y "w"
Si me da tiempo lo traduzco a Delphi saludos...
Buenas crack81, está en python 3.4, la forma más fácil de diferenciar entre las versiones 2 y 3 es fijándose en los prints:
En python 2.x es un statement: print "hola"
En python 3.x es una función: print("hola")

Respecto al modo de apertura, me parece que no hay diferencia entre python 3 y python 2. Los modos r, w y a (por defecto r) indican cómo se va a abrir el archivo, para lectura, para escritura truncando el contenido actual o para escritura agregando al final, respectivamente. Los modos t y b (por defecto t) indican cómo se va a leer el archivo, como texto o como binario respectivamente. De ese modo "br" (o "rb") quiere decir abrir archivo como binario para lectura y "bw" (o "wb") quiere decir abrir archivo como binario para escritura. Los modos r+, w+ y a+ sirven para abrir en modo lectura y escritura al mismo tiempo. Espero se haya entendido, hay mucha documentación sobre estas cosas ([Enlace externo eliminado para invitados]).
Blau escribió:Supongo que 'br' y 'bw' serán 'r' y 'w' para binario.
Justamente eso Blau.

A todo esto me acabo de dar cuenta que en la linea 94 del primer código hay un error, debería decir return en vez de print. Estaría bien si un moderador lo arregla.

¡Saludos!
Hack 'em all
Skype: szudisch
(C) Szudisch 2013
azav3 escribió: A todo esto me acabo de dar cuenta que en la linea 94 del primer código hay un error, debería decir return en vez de print. Estaría bien si un moderador lo arregla.

¡Saludos!
Arreglado compañero
Responder

Volver a “Fuentes”