Crackear contraseñas de PDF con script en Python y borrar metadatos.

Iniciado por jordigil92, Enero 22, 2017, 12:33:02 PM

Tema anterior - Siguiente tema

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

Enero 22, 2017, 12:33:02 PM Ultima modificación: Enero 22, 2017, 09:20:34 PM por Nobody
Hola a todos, estoy realizando un pequeño script en python que consiste en sacar los metadatos de los archivos pdf de una carpeta especifica y también que crackee la contraseña en caso de estar el pdf encriptado a través de un diccionario que el mismo script crea añadiéndole los caracteres y la longitud de la contraseña.
El problema esta en que a la hora de crackear un pdf que tengo con una contraseña simple como 123456 el programa parece que la prueba pero sin embargo no la detecta como la contraseña del archivo.
Supongo que me abre equivocado en alguna parte del script y no consigo hacerlo funcionar. Si alguien me sabe decir cual puede ser el error le estaría agradecido, os adjunto el código del script a continuación:

Código: python
# -*- encoding: utf-8 -*-

from PyPDF2 import PdfFileReader, PdfFileWriter
import os
import sys
import optparse
import itertools
import PyPDF2

def crackPass():
        c=raw_input("\nIntroduce caracteres como 12abcjfi@ que se van a usar en el diccionario :")
        e=raw_input("\nIntroduce la longitud maxima de la contraseña= ")
        for dirpath, dirnames, files in os.walk("meta"):
                for name in files:
                        ext = name.lower().rsplit('.', 1)[-1]
                if ext in ['pdf']:
                        pdf = PyPDF2.PdfFileReader(file(dirpath+os.path.sep+name, 'rb'))
        if not pdf.isEncrypted:
                print'No hay contraseña'
        else:
                b = 1 + int(e)
                r=range(int(b))
                for x in r:
                        res = itertools.product(c, repeat=int(x))
                for i in res:
                        print'[+] Intentando contraseña',i
                password =""+''.join(i)
                if pdf.decrypt(password):
                        print '[+] password :',i
                        sys.exit()
                print '[-] Contraseña no encontrada'
crackPass()

def printMeta():
    for dirpath, dirnames, files in os.walk("meta"):
        for name in files:
            ext = name.lower().rsplit('.', 1)[-1]
            if ext in ['pdf']:
                print "[+] Metadata for file: %s " %(dirpath+os.path.sep+name)
                pdfFile = PdfFileReader(file(dirpath+os.path.sep+name, 'rb'))
                docInfo = pdfFile.getDocumentInfo()
                for metaItem in docInfo:
                    print '[+] ' + metaItem + ':' + docInfo[metaItem]
                print "\n"
printMeta()


Gracias de antemano, saludos

Proba corriendo solo el pdf.decrypt con la clave correcta, saca todo lo que no sea necesario


Hola, no puedo probar tu código ahora mismo porque no tengo ni Python 2 ni las librarías instaladas, pero parece que tu error está en los niveles de indentación.

Si estoy pensando bien en lo que quieres hacer, entonces tu función crackPass debería quedar indentada de la siguiente manera:
Código: python

def crackPass():
    c=raw_input("\nIntroduce caracteres como 12abcjfi@ que se van a usar en el diccionario :")
    e=raw_input("\nIntroduce la longitud maxima de la contraseña= ")
    for dirpath, dirnames, files in os.walk("meta"):
        for name in files:
            ext = name.lower().rsplit('.', 1)[-1]
            if ext in ['pdf']:
                pdf = PyPDF2.PdfFileReader(file(dirpath+os.path.sep+name, 'rb'))
                if not pdf.isEncrypted:
                    print'No hay contraseña'
                else:
                    b = 1 + int(e)
                    r=range(int(b))
                    for x in r:
                        res = itertools.product(c, repeat=int(x))
                        for i in res:
                            print'[+] Intentando contraseña',i
                            password =""+''.join(i)
                            if pdf.decrypt(password):
                                print '[+] password :',i
                                sys.exit()
                            print '[-] Contraseña no encontrada'


El código que estabas usando tenías varios problemas. Primero no revisabas todos los archivos de la carpeta meta, sino que iterabas sobre todos los archivos pero al final solo revisabas el último. Lo mismo con las combinaciones de contraseñas, iterabas sobre todas ellas pero al final solo verificabas la última.

El código tiene varios detalles que podrían mejorarse pero no afectan la funcionalidad.

Saludos y cuéntanos cómo te va.