Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中的Excel密码恢复_Python_Excel - Fatal编程技术网

Python中的Excel密码恢复

Python中的Excel密码恢复,python,excel,Python,Excel,下面我一直在为工作使用Excel密码恢复工具,因为我们有过几次项目经理使用密码保护的Excel,然后忘记了密码,他们因此失去了数周的工作 下面的代码似乎正在运行,但没有通过单词列表中的第一个单词,然后粘贴到密码已找到 输出示例: 在cmd中 C:\Users\eldri\OneDrive\Desktop>python xlcrka.py [+] Excel to attack: C:\Users\eldri\OneDrive\Desktop\target.xlsx [+] Wordlist

下面我一直在为工作使用Excel密码恢复工具,因为我们有过几次项目经理使用密码保护的Excel,然后忘记了密码,他们因此失去了数周的工作

下面的代码似乎正在运行,但没有通过单词列表中的第一个单词,然后粘贴到密码已找到

输出示例:

在cmd中

C:\Users\eldri\OneDrive\Desktop>python xlcrka.py
[+] Excel to attack: C:\Users\eldri\OneDrive\Desktop\target.xlsx
[+] Wordlist: C:\Users\eldri\OneDrive\Desktop\Wordlists\rockyou.txt
[-] Password attempt: 123456
[+] Password Found: 123456
在Pycharm终端

C:\Users\eldri\PycharmProjects\CAPTCHA\venv\Scripts\python.exe "C:/Users/eldri/PycharmProjects/Bad codes/xlcrka.py"
[+] Excel to attack: C:\Users\eldri\OneDrive\Desktop\target.xlsx
[+] Wordlist: C:\Users\eldri\OneDrive\Desktop\Wordlists\rockyou.txt
[-] Password attempt: 123456
[+] Password Found: 123456
以下是我目前掌握的代码:

from pip._vendor.distlib.compat import raw_input
from win32com.client import Dispatch

file = raw_input('[+] Excel to attack: ')
wordlist = raw_input('[+] Wordlist: ')

word = open(wordlist, 'r', encoding='utf8', errors='ignore')
allpass = word.readlines()
word.close()

for password in allpass:
    password = password.strip()
    print ("[-] Password attempt: "+password)
    instance = Dispatch('Excel.Application')

    try:
        instance.Workbooks.Open(file, False, True, None, password)
        print ("[+] Password Found: "+password)
        break

    except:
        pass
我想要达到的结果: 了解为什么这不起作用。 看看是否有人对如何改进有任何想法

代码的输出:
要在
print(“[+]password Found:”+password)
之后查看单词列表并找到正确的密码并打印密码,请在
print(“[+]password Found:”+password)
结束循环。因此,只要
工作簿.Open
没有提示,您就永远不会尝试任何其他密码

我不知道
工作簿是如何工作的。Open
可以工作,但您可能需要检查它的返回值,以知道是否找到了正确的密码

此外,类似的尝试/例外操作将使任何错误静音,因此您无法知道是否发生了任何错误,至少将其替换为:

import traceback

...

except Exception as ecx:
    traceback.print_exc()
    # or
    print(exc)

为了找出发生了什么,请从代码中删除try块

您的代码的结构方式如下:

instance.workbook.Open(文件、假、真、无、密码)

应该会引发一些您未指定的常规错误。在您的示例案例中,它没有,因此它继续并结束


删除“try块”并尝试访问打开的工作簿上的任何方法,看看会发生什么。

我找到了您缺少的内容,您需要在try-except语句中添加一个
else:break
,这样一旦找到密码,循环就会中断,并且不会继续打印不正确的password-found语句。您还需要
instance.Quit()
,以防止程序在重新运行代码时继续打印错误的密码查找语句。我从循环中移动了
instance
,因为您不需要每次都打开一个新实例(这可能会导致一些问题)


我还从
pywintypes
中导入了
com\u error
,对于异常处理,您应该尽量避免使用裸露的
except
语句,因为这可能会导致问题,并且不是好的做法。

您希望
instance.Workbooks.Open(file,False,True,None,password)
密码无效时引发异常。在第一个密码上,它不会引发异常,代码完成。这就是它打印具有相同值的密码的原因吗?rockyou.txt的格式是什么?@Davidsherriff rockyou是记事本中的txt格式。再次非常感谢。@Ooo我的意思是文件由一个单词后跟一个新行或单词组成,例如单词谢谢,我尝试了你的建议,没有出现错误,只是显示了与上面相同的输出。很遗憾,谢谢,我删除了try块并使用了另一种方法,它似乎正在打印整个rockyou.txt列表:[-]密码尝试:happyglocky。这意味着我尝试了所有密码?你能用新的代码编辑你的问题吗?非常感谢,我离你很近,但无法完成代码。您会在所有代码中添加com_错误吗?我刚刚运行了代码,发现了这个错误?:回溯(最近一次调用):文件“xlcrka.py”,第9行,在allpass=word.readlines()文件“C:\Users\uk20071143\AppData\Local\Programs\Python\Python38-32\lib\encodings\cp1252.py”中,第23行,在解码返回codecs.charmap\u解码(输入,self.errors,解码表)[0]UnicodeDecodeError:“charmap”编解码器无法解码位置3149处的字节0x8f:字符映射到什么意思?您不需要向所有代码中添加
com_错误
,它只作为
instanceWordkbooks出现在代码中。当密码不正确时,Open
会引发
com_错误
异常。至于可能是我的错误,我删除了你的解码和错误忽略,而我在我的电脑上测试它,我会添加这些回来,看看它现在是否工作好,谢谢你,我会接受的。您是如何绕过解码并忽略错误的?我什么都试过了,但都做不到?非常感谢你的帮助,非常感谢。多年来,我一直在研究如何完成密码工具。你有什么好的网站可以学习python吗?或者你有没有去uni学习过它?我制作了一个简单的文本文件,它可能与你用来测试代码的文本文件不同,因此我不需要解码和忽略它。我在uni开始学习python,但我学到的最多的是用python解决工作中的问题。我推荐OpenEDG,他们有基本的和itermediate的python课程,遵循python学院的教学大纲,这些课程是免费的,因此值得与python学院一起查看,以免再次打扰您,但即使有正确的密码,它似乎也找不到密码?它只是尝试并继续下一个?
from win32com.client import Dispatch
from pywintypes import com_error

file = input('[+] Excel to attack: ')
wordlist = input('[+] Wordlist: ')
instance = Dispatch('Excel.Application')

word = open(wordlist, 'r', encoding='utf8', errors='ignore')
allpass = word.readlines()
word.close()

for password in allpass:
    password = password.rstrip()
    print("[-] Password attempt: " + password)
    try:
        instance.Workbooks.Open(file, False, True, None, password)
        print("[+] Password Found: " + password)
    except com_error:
        instance.Workbooks.Close()
    else:
        instance.Workbooks.Close()
        instance.Quit()
        break