Skip to content

Instantly share code, notes, and snippets.

@myselfshravan
Created March 28, 2023 02:35
Show Gist options
  • Save myselfshravan/9a724c0271856d94458a212d5e81af59 to your computer and use it in GitHub Desktop.
Save myselfshravan/9a724c0271856d94458a212d5e81af59 to your computer and use it in GitHub Desktop.
pdf cracking tool
import pikepdf
from tqdm import tqdm
letter = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V",
"W", "X", "Y", "Z"]
date = [f"{i:02}" for i in range(1, 32)]
month = [f"{i:02}" for i in range(1, 13)]
##password in formate of "AAAA + date + month"
passwords = [f"{i}{j}{k}{l}{m}{n}" for i in letter for j in letter for k in letter for l in letter for m in date for n
in month]
# iterate over passwords
for password in tqdm(passwords, "Decrypting PDF"):
try:
# open PDF file
with pikepdf.open("statement.pdf", password=password) as pdf:
# Password decrypted successfully, break out of the loop
print("[+] Password found:", password)
break
except pikepdf._qpdf.PasswordError as e:
# wrong password, just continue in the loop
continue
@myselfshravan
Copy link
Author

`import asyncio
from pikepdf import PasswordError
from tqdm import tqdm
import pikepdf

letter = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V",
"W", "X", "Y", "Z"]
date = [f"{i:02}" for i in range(1, 32)]
month = [f"{i:02}" for i in range(1, 13)]
##password in format of "AAAA + date + month"
passwords = [f"{i}{j}{k}{l}{m}{n}" for i in letter for j in letter for k in letter for l in letter for m in date for n
in month]

async def decrypt_pdf(password):
try:
# open PDF file
with pikepdf.open("statement.pdf", password=password) as pdf:
# Password decrypted successfully, return it
return password
except PasswordError as e:
# wrong password, return None
return None

async def main():
tasks = []
for password in passwords:
tasks.append(asyncio.ensure_future(decrypt_pdf(password)))

# iterate over tasks and get the first successful password
for task in tqdm(asyncio.as_completed(tasks), "Decrypting PDF", total=len(tasks)):
    password = await task
    if password:
        print("[+] Password found:", password)
        break

if name == 'main':
asyncio.run(main())
`

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment