comment
IRC Chat
play_arrow
Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

Cifrado Compresor [Archivos]

  • 8 Respuestas
  • 1758 Vistas

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Azav

  • *
  • Underc0der
  • Mensajes: 23
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
« en: Enero 29, 2015, 12:33:42 am »
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 (No tienes permisos para ver links. Registrate o Entra con tu cuenta), 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:
Código: Text
  1. Caso 1: A1 00 00 00 00 B2 01 7C > A1 00 03 B2 01 7C          (aquí nos ahorramos dos bytes)
  2. Caso 2: B1 FB 00 CC A2 72 A1 2D > B1 FB 00 00 CC A2 72 A1 2D (aquí aumentamos en un byte)
  3. 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:
Código: Python
  1. def CheckReducement(data, byte):
  2.     amount_list = []
  3.     pos = data.find(byte)
  4.     while pos != -1:
  5.         i = 1
  6.         while True:
  7.             if (pos + i) < len(data):
  8.                 if data[pos + i:pos + i + 1] == byte:
  9.                     i += 1
  10.                 else:
  11.                     amount_list.append(i)
  12.                     pos = data.find(byte, pos + i)
  13.                     break
  14.                 else:
  15.                     amount_list.append(i)
  16.                     pos = -1
  17.                     break
  18.     bytes_reducidos = 0
  19.     for amount in amount_list:
  20.         if amount == 1:
  21.             bytes_reducidos -= 1
  22.         elif amount >= 3 and amount <= 256:
  23.             ahorro = amount - 2
  24.             bytes_reducidos += ahorro
  25.         elif amount > 256:
  26.             ahorro = (((amount // 256) * 254) + ((amount % 256) - 2))
  27.             bytes_reducidos += ahorro
  28.     return bytes_reducidos
  29.  
  30. def DoReducement(inputfile, outputfile, password):
  31.     f = open(inputfile, "br")
  32.     data = f.read()
  33.     f.close()      
  34.     reduccion = CheckReducement(data, b"\x00")
  35.     porcentaje = (reduccion * 100) / len(data)
  36.     byte_list = b"\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0A\x0B\x0C\x0D\x0E\x0F\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1A\x1B\x1C\x1D\x1E\x1F\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2A\x2B\x2C\x2D\x2E\x2F\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3A\x3B\x3C\x3D\x3E\x3F\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4A\x4B\x4C\x4D\x4E\x4F\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5A\x5B\x5C\x5D\x5E\x5F\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6A\x6B\x6C\x6D\x6E\x6F\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7A\x7B\x7C\x7D\x7E\x7F\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\xA1\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\xAA\xAB\xAC\xAD\xAE\xAF\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\xBA\xBB\xBC\xBD\xBE\xBF\xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\xD0\xD1\xD2\xD3\xD4\xD5\xD6\xD7\xD8\xD9\xDA\xDB\xDC\xDD\xDE\xDF\xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF0\xF1\xF2\xF3\xF4\xF5\xF6\xF7\xF8\xF9\xFA\xFB\xFC\xFD\xFE\xFF"
  37.     pos = data.find(b"\x00")
  38.     pos2 = 0
  39.     nueva_data = b""
  40.     while pos != -1:
  41.         i = 1
  42.         while True:
  43.             if (pos + i) < len(data):
  44.                 if data[pos + i:pos + i + 1] == b"\x00":
  45.                     i += 1
  46.                 else:
  47.                     if i <= 256:
  48.                         nueva_data += data[pos2:pos + 1] + byte_list[i - 1:i]
  49.                         pos2 = pos + i
  50.                         pos = data.find(b"\x00", pos2)
  51.                     else:
  52.                         nueva_data += data[pos2:pos + 1] + b"\xFF"
  53.                         pos2 = pos + 256
  54.                         pos = data.find(b"\x00", pos2)
  55.                     break
  56.             else:
  57.                 if i <= 256:
  58.                     nueva_data += data[pos2:pos + 1] + byte_list[i - 1:i]
  59.                     pos2 = pos + i
  60.                     pos = data.find(b"\x00", pos2)
  61.                 else:
  62.                     nueva_data += data[pos2:pos + 1] + b"\xFF"
  63.                     pos2 = pos + 256
  64.                     pos = data.find(b"\x00", pos2)
  65.                 break
  66.     nueva_data += data[pos2:]
  67.     nueva_data = EncodeBytes(nueva_data, password)
  68.     f = open(outputfile, "bw")
  69.     f.write(nueva_data)
  70.     f.close()
  71.     return "El archivo fue cifrado con éxito y su peso se redujo en un " + str(porcentaje)[:4] + "% (" + str(reduccion) + " bytes reducidos)."
  72.  
  73.        
  74. def DoIncrement(inputfile, outputfile, password):
  75.     f = open(inputfile, "br")
  76.     data = f.read()
  77.     f.close()      
  78.     data = DecodeBytes(data, password)
  79.     byte_list = b"\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0A\x0B\x0C\x0D\x0E\x0F\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1A\x1B\x1C\x1D\x1E\x1F\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2A\x2B\x2C\x2D\x2E\x2F\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3A\x3B\x3C\x3D\x3E\x3F\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4A\x4B\x4C\x4D\x4E\x4F\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5A\x5B\x5C\x5D\x5E\x5F\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6A\x6B\x6C\x6D\x6E\x6F\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7A\x7B\x7C\x7D\x7E\x7F\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\xA1\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\xAA\xAB\xAC\xAD\xAE\xAF\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\xBA\xBB\xBC\xBD\xBE\xBF\xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\xD0\xD1\xD2\xD3\xD4\xD5\xD6\xD7\xD8\xD9\xDA\xDB\xDC\xDD\xDE\xDF\xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF0\xF1\xF2\xF3\xF4\xF5\xF6\xF7\xF8\xF9\xFA\xFB\xFC\xFD\xFE\xFF"
  80.     zero_list = b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
  81.     pos = data.find(b"\x00")
  82.     pos2 = 0
  83.     nueva_data = b""
  84.     while pos != -1:
  85.         amount = byte_list.find(data[pos + 1:pos + 2])
  86.         zero_bytes = zero_list[:amount]
  87.         nueva_data += data[pos2:pos + 1] + zero_bytes
  88.         pos2 = pos + 2
  89.         pos = data.find(b"\x00", pos2)
  90.     nueva_data += data[pos2:]
  91.     f = open(outputfile, "bw")
  92.     f.write(nueva_data)
  93.     f.close()      
  94.     return "El archivo fue decifrado con éxito."
  95.  
  96. def EncodeBytes(bytes_data, password):  
  97.     return b''.join(chr((bytes_data[i] + ord(password[i % len(password)])) % 256).encode('iso8859-1') for i in range(len(bytes_data)))
  98.                
  99. def DecodeBytes(bytes_data, password):
  100.     return b''.join(chr((bytes_data[i] - ord(password[i % len(password)])) % 256).encode('iso8859-1') for i in range(len(bytes_data)))
  101.        
  102. print(DoReducement("archivo.exe", "cifrado.exe", "contraseña"))
  103. print(DoIncrement("cifrado.exe", "archivo_original.exe", "contraseña"))
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.

Código: Python
  1. def CheckReducement(data, byte):
  2.     amount_list = []
  3.     pos = data.find(byte)
  4.     while pos != -1:
  5.         i = 1
  6.         while True:
  7.             if (pos + i) < len(data):
  8.                 if data[pos + i:pos + i + 1] == byte:
  9.                     i += 1
  10.                 else:
  11.                     amount_list.append(i)
  12.                     pos = data.find(byte, pos + i)
  13.                     break
  14.             else:
  15.                 amount_list.append(i)
  16.                 pos = -1
  17.                 break
  18.     bytes_reducidos = 0
  19.     for amount in amount_list:
  20.         if amount == 1:
  21.             bytes_reducidos -= 1
  22.         elif amount >= 3 and amount <= 256:
  23.             ahorro = amount - 2
  24.             bytes_reducidos += ahorro
  25.         elif amount > 256:
  26.             ahorro = (((amount // 256) * 254) + ((amount % 256) - 2))
  27.             bytes_reducidos += ahorro
  28.     return bytes_reducidos
  29.  
  30. def DoReducement(inputfile, outputfile, password):
  31.     f = open(inputfile, "br")
  32.     data = f.read()
  33.     f.close()      
  34.     reduccion = CheckReducement(data, b"\x00")
  35.     porcentaje = (reduccion * 100) / len(data)
  36.     byte_list = b"\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0A\x0B\x0C\x0D\x0E\x0F\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1A\x1B\x1C\x1D\x1E\x1F\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2A\x2B\x2C\x2D\x2E\x2F\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3A\x3B\x3C\x3D\x3E\x3F\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4A\x4B\x4C\x4D\x4E\x4F\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5A\x5B\x5C\x5D\x5E\x5F\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6A\x6B\x6C\x6D\x6E\x6F\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7A\x7B\x7C\x7D\x7E\x7F\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\xA1\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\xAA\xAB\xAC\xAD\xAE\xAF\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\xBA\xBB\xBC\xBD\xBE\xBF\xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\xD0\xD1\xD2\xD3\xD4\xD5\xD6\xD7\xD8\xD9\xDA\xDB\xDC\xDD\xDE\xDF\xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF0\xF1\xF2\xF3\xF4\xF5\xF6\xF7\xF8\xF9\xFA\xFB\xFC\xFD\xFE\xFF"
  37.     pos = data.find(b"\x00")
  38.     while pos != -1:
  39.         i = 1
  40.         while True:
  41.             if (pos + i) < len(data):
  42.                 if data[pos + i:pos + i + 1] == b"\x00":
  43.                    i += 1
  44.                 else:
  45.                     if i <= 256:
  46.                         data = data[:pos + 1] + byte_list[i - 1:i] + data[pos + i:]
  47.                     else:
  48.                         data = data[:pos + 1] + byte_list[255:] + data[pos + 256:]
  49.                     pos = data.find(b"\x00", pos + 2)
  50.                     break
  51.             else:
  52.                     if i <= 256:
  53.                         data = data[:pos + 1] + byte_list[i - 1:i] + data[pos + i:]
  54.                     else:
  55.                         data = data[:pos + 1] + byte_list[255:] + data[pos + 256:]
  56.                     pos = data.find(b"\x00", pos + 2)
  57.                     break
  58.     data = EncodeBytes(data, password)
  59.     f = open(outputfile, "bw")
  60.     f.write(data)
  61.     f.close()      
  62.     return "El archivo fue cifrado con éxito y su peso se redujo en un " + str(porcentaje)[:4] + "% (" + str(reduccion) + " bytes reducidos)."
  63.  
  64.        
  65. def DoIncrement(inputfile, outputfile, password):
  66.     f = open(inputfile, "br")
  67.     data = f.read()
  68.     f.close()      
  69.     data = DecodeBytes(data, password)
  70.     byte_list = b"\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0A\x0B\x0C\x0D\x0E\x0F\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1A\x1B\x1C\x1D\x1E\x1F\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2A\x2B\x2C\x2D\x2E\x2F\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3A\x3B\x3C\x3D\x3E\x3F\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4A\x4B\x4C\x4D\x4E\x4F\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5A\x5B\x5C\x5D\x5E\x5F\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6A\x6B\x6C\x6D\x6E\x6F\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7A\x7B\x7C\x7D\x7E\x7F\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\xA1\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\xAA\xAB\xAC\xAD\xAE\xAF\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\xBA\xBB\xBC\xBD\xBE\xBF\xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\xD0\xD1\xD2\xD3\xD4\xD5\xD6\xD7\xD8\xD9\xDA\xDB\xDC\xDD\xDE\xDF\xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF0\xF1\xF2\xF3\xF4\xF5\xF6\xF7\xF8\xF9\xFA\xFB\xFC\xFD\xFE\xFF"
  71.     zero_list = b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
  72.     pos = data.find(b"\x00")
  73.     while pos != -1:
  74.         amount = byte_list.find(data[pos + 1:pos + 2])
  75.         zero_bytes = zero_list[:amount]
  76.         data = data[:pos + 1] + zero_bytes + data[pos + 2:]
  77.         pos = data.find(b"\x00", pos + len(zero_bytes) + 1)
  78.     f = open(outputfile, "bw")
  79.     f.write(data)
  80.     f.close()      
  81.     return "El archivo fue decifrado con éxito."
  82.  
  83. def EncodeBytes(bytes_data, password):
  84.     byte_list = b"\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0A\x0B\x0C\x0D\x0E\x0F\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1A\x1B\x1C\x1D\x1E\x1F\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2A\x2B\x2C\x2D\x2E\x2F\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3A\x3B\x3C\x3D\x3E\x3F\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4A\x4B\x4C\x4D\x4E\x4F\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5A\x5B\x5C\x5D\x5E\x5F\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6A\x6B\x6C\x6D\x6E\x6F\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7A\x7B\x7C\x7D\x7E\x7F\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\xA1\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\xAA\xAB\xAC\xAD\xAE\xAF\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\xBA\xBB\xBC\xBD\xBE\xBF\xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\xD0\xD1\xD2\xD3\xD4\xD5\xD6\xD7\xD8\xD9\xDA\xDB\xDC\xDD\xDE\xDF\xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF0\xF1\xF2\xF3\xF4\xF5\xF6\xF7\xF8\xF9\xFA\xFB\xFC\xFD\xFE\xFF"
  85.     i = 0
  86.     nueva_data = b''
  87.     while i < len(bytes_data):
  88.         j = i % len(password)
  89.         suma = bytes_data[i] + ord(password[j])
  90.         if suma > 255:
  91.             suma = suma % 256
  92.         nueva_data += byte_list[suma:suma + 1]  
  93.         i += 1
  94.     return nueva_data
  95.                
  96. def DecodeBytes(bytes_data, password):
  97.     byte_list = b"\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0A\x0B\x0C\x0D\x0E\x0F\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1A\x1B\x1C\x1D\x1E\x1F\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2A\x2B\x2C\x2D\x2E\x2F\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3A\x3B\x3C\x3D\x3E\x3F\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4A\x4B\x4C\x4D\x4E\x4F\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5A\x5B\x5C\x5D\x5E\x5F\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6A\x6B\x6C\x6D\x6E\x6F\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7A\x7B\x7C\x7D\x7E\x7F\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\xA1\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\xAA\xAB\xAC\xAD\xAE\xAF\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\xBA\xBB\xBC\xBD\xBE\xBF\xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\xD0\xD1\xD2\xD3\xD4\xD5\xD6\xD7\xD8\xD9\xDA\xDB\xDC\xDD\xDE\xDF\xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF0\xF1\xF2\xF3\xF4\xF5\xF6\xF7\xF8\xF9\xFA\xFB\xFC\xFD\xFE\xFF"
  98.     nueva_data = b''
  99.     i = 0
  100.     while i < len(bytes_data):
  101.         j = i % len(password)
  102.         resta = bytes_data[i] - ord(password[j])
  103.         if resta < 0:
  104.             resta = resta % 256
  105.         nueva_data += byte_list[resta:resta + 1]        
  106.         i += 1
  107.     return nueva_data
  108.        
  109. print(DoReducement("archivo.exe", "cifrado.exe", "contraseña"))
  110. print(DoIncrement("cifrado.exe", "archivo_original.exe", "contraseña"))

Espero alguien pueda darle buen uso, saludos a todos.
« Última modificación: Enero 29, 2015, 08:40:48 pm por Azav »

Desconectado WhiZ

  • *
  • Underc0der
  • Mensajes: 395
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
« Respuesta #1 en: Enero 29, 2015, 02:20:00 am »
Excelente aporte Azav! Qué bueno ver material de esta calidad por esta sección.

Espero que sigas así! Gracias por compartir!

Saludos!
WhiZ

P.D.: De ahora en más, intenta indentar con 4 espacios, por favor ;)


Desconectado 79137913

  • *
  • Co Admin
  • Mensajes: 631
  • Actividad:
    5%
  • Reputación 11
  • 4 Esquinas
    • Ver Perfil
    • Doors.Party
    • Email
  • Skype: fg_mdq@hotmail.com
« Respuesta #2 en: Enero 29, 2015, 08:10:48 am »
HOLA!!!

Osea, en definitiva quita los 00 del archivo original los cuenta y los coloca como 00 [cantidad de 00].

Esta interesante :D

GRACIAS POR LEER!!!
"Algunos creen que soy un bot, puede que tengan razon"
"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!"
"La peor de las ignorancias es no saber corregirlas"

*Shadow Scout Team*                                                   No tienes permisos para ver links. Registrate o Entra con tu cuenta

Conectado Gabriela

  • *
  • Co Admin
  • Mensajes: 874
  • Actividad:
    13.33%
  • Reputación 15
    • Ver Perfil
    • Email
« Respuesta #3 en: Enero 29, 2015, 03:19:24 pm »

Siempre es bueno (y necesario), leer aportes de esta entidad.
El ejercicio de compartir, despierta doblemente el interés por su lectura.

Gracias-

Gabi.

Desconectado Once

  • *
  • Underc0der
  • Mensajes: 391
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
    • El blog de Once
  • Twitter: @don_once
« Respuesta #4 en: Enero 29, 2015, 05:00:39 pm »
Excelente brother, gracias por traerlo. Esto es Python 3 verdad?

PD: No quiero sonar muy pesado, pero intenta usar cuatro espacios para identar; sino a veces se vuelve un poco tedioso seguir el código.

Saludos!






No tienes permisos para ver links. Registrate o Entra con tu cuenta

Desconectado Azav

  • *
  • Underc0der
  • Mensajes: 23
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
« Respuesta #5 en: Enero 29, 2015, 08:43:23 pm »
Muchas gracias a todos por sus comentarios.
No tienes permisos para ver links. Registrate o Entra con tu cuenta
HOLA!!!

Osea, en definitiva quita los 00 del archivo original los cuenta y los coloca como 00 [cantidad de 00].

Esta interesante :D

GRACIAS POR LEER!!!
Exactamente eso 79137913.

No tienes permisos para ver links. Registrate o Entra con tu cuenta
Excelente brother, gracias por traerlo. Esto es Python 3 verdad?

PD: No quiero sonar muy pesado, pero intenta usar cuatro espacios para identar; sino a veces se vuelve un poco tedioso seguir el código.

Saludos!
Sí, es python 3.4. Con respecto a la indentación, puedo cambiarlo pero.. no entiendo el problema de hacerlo con TAB. ¿Qué ventaja tiene usar los 4 espacios?¿Porqué se hace tedioso seguir el código?

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. Lo otro es que en la linea 94 del primer código había un error (salía print en vez de return) pero ya lo arreglé.

¡Saludos!

Desconectado Once

  • *
  • Underc0der
  • Mensajes: 391
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
    • El blog de Once
  • Twitter: @don_once
« Respuesta #6 en: Enero 29, 2015, 10:28:12 pm »
Hola brother,

El interprete de Python es muy permisivo en ciertos aspectos, por eso está la PEP8 (No tienes permisos para ver links. Registrate o Entra con tu cuenta) no digo que hay que seguirla al pie de la letra, pero está hecha para intentar estandarizar todos los códigos y así no hayan problemas en especial cuando se programa en equipo (lo digo por experiencia propia). El tema con las identaciones es que todos los IDES las pueden tomar distinto, lo que ves en tu IDE configurado para usar tabuladores no es lo mismo que ve alguien con el IDE configurado para usar espacios. Así veo yo parte de un método de tu código de un post anterior.


Pero el verdadero problema empieza cuando quieres editar el código porque a veces las identaciones no coinciden y tienes que eliminarlas por completo y arreglarlas a mano (imagínate el trabajo para un script de 500 líneas).

Identar con cuatro espacios no cuesta mucho y creéme que los que leémos los códigos y a veces los editamos agradecemos infinitamente que lo hagan.

Si todos identaran con cuatro espacios el mundo sería un lugar mejor.

Saludos!
« Última modificación: Enero 29, 2015, 10:30:16 pm por Once »






No tienes permisos para ver links. Registrate o Entra con tu cuenta

Desconectado Azav

  • *
  • Underc0der
  • Mensajes: 23
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
« Respuesta #7 en: Enero 30, 2015, 03:32:54 am »
No tienes permisos para ver links. Registrate o Entra con tu cuenta
Hola brother,

El interprete de Python es muy permisivo en ciertos aspectos, por eso está la PEP8 (No tienes permisos para ver links. Registrate o Entra con tu cuenta) no digo que hay que seguirla al pie de la letra, pero está hecha para intentar estandarizar todos los códigos y así no hayan problemas en especial cuando se programa en equipo (lo digo por experiencia propia). El tema con las identaciones es que todos los IDES las pueden tomar distinto, lo que ves en tu IDE configurado para usar tabuladores no es lo mismo que ve alguien con el IDE configurado para usar espacios. Así veo yo parte de un método de tu código de un post anterior.


Pero el verdadero problema empieza cuando quieres editar el código porque a veces las identaciones no coinciden y tienes que eliminarlas por completo y arreglarlas a mano (imagínate el trabajo para un script de 500 líneas).

Identar con cuatro espacios no cuesta mucho y creéme que los que leémos los códigos y a veces los editamos agradecemos infinitamente que lo hagan.

Si todos identaran con cuatro espacios el mundo sería un lugar mejor.

Saludos!

Vale, la verdad es que había escuchado harto lo de indentar con cuatro espacios, pero en los IDE que uso (son dos distintos) siempre se me ha visto bien así. Python 3 no permite que el código esté indentado de las dos formas, o TAB's o espacios, con ambos lanza error. Cuando partí programando y supe de las dos opciones me quedé con los TAB's pues se me hacía más cómodo pero tienes tu punto. De ahora en más haré el esfuerzo de cambiarme  :).

Desconectado Once

  • *
  • Underc0der
  • Mensajes: 391
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
    • El blog de Once
  • Twitter: @don_once
« Respuesta #8 en: Enero 30, 2015, 04:00:56 am »
No tienes permisos para ver links. Registrate o Entra con tu cuenta
Vale, la verdad es que había escuchado harto lo de indentar con cuatro espacios, pero en los IDE que uso (son dos distintos) siempre se me ha visto bien así. Python 3 no permite que el código esté indentado de las dos formas, o TAB's o espacios, con ambos lanza error. Cuando partí programando y supe de las dos opciones me quedé con los TAB's pues se me hacía más cómodo pero tienes tu punto. De ahora en más haré el esfuerzo de cambiarme  :).

Tampoco es que tengas que poner los cuatro espacios a mano, si es lo que estás pensando, NO. Simplemente busca bien que por lo general todos los IDE permiten configurar el editor para que cuando pulses la tecla TAB se escriban los cuatro espacios y no el tabulador \t. Por eso digo que tabular con cuatro espacios no cuesta mucho, sólo es configurar bien el IDE.

Saludos!






No tienes permisos para ver links. Registrate o Entra con tu cuenta

 

¿Te gustó el post? COMPARTILO!



Tutorial envio de archivos usando sockets

Iniciado por Once

Respuestas: 10
Vistas: 6774
Último mensaje Julio 27, 2018, 07:53:10 pm
por Once
[Codigo + Introduccion] Manejo de archivos csv en python

Iniciado por blozzter

Respuestas: 2
Vistas: 7282
Último mensaje Abril 01, 2012, 05:43:38 pm
por pab mac
Moviendonos entre archivos con python

Iniciado por Once

Respuestas: 6
Vistas: 3784
Último mensaje Enero 23, 2015, 12:30:11 am
por Azav
[Python] Descargar Archivos - by NiKo

Iniciado por ProcessKill

Respuestas: 3
Vistas: 3396
Último mensaje Noviembre 03, 2012, 11:50:45 am
por BigBear
inRar.py buscador de archivos rar en imágenes

Iniciado por Once

Respuestas: 1
Vistas: 1348
Último mensaje Noviembre 30, 2013, 11:06:26 pm
por WhiZ