【问题标题】:Python on windows subprocess don´t workWindows子进程上的Python不起作用
【发布时间】:2014-01-10 08:50:08
【问题描述】:

我想测试打开一个winrar密码保护的文件,用单词字典测试。 这是我的代码,但它不起作用可以帮助我吗?谢谢

import subprocess
def extractFile(rFile, password):
try:
    subprocess.call(['c:\\mio\\unrar\\unrar.exe -p'+password+'x C:\\mio\\unrar\\'+rFile,'shell=True'])
    return password
except:
    return
def main():    
rFile = "c:\\mio\\unrar\msploit.rar"
passFile = open("C:\\mio\\unrar\\dic.txt")
for line in passFile.readlines():
    password = line.strip('\n')

    guess = extractFile(rFile, password)
    print(password)
    if guess:
       print '[+] Password = ' + password + '\n'
       break
if __name__ == '__main__':
main()

【问题讨论】:

  • 你必须缩进main()行(最后一行)
  • 你能解释一下doesn't work是什么意思吗?当询问您的代码问题时,请更加具体。
  • @CharlesB 和其他行也是如此。
  • 你想通过将, 'shell=True' 放入数组而不是正确地作为函数的参数来实现什么?
  • 在我的回复中,您会看到call() 的参数错误,但我认为即使call() 成功,您也可能无法正确猜出密码,然后unrar 可能会显示一些错误并且会不创建输出文件。

标签: python subprocess password-protection unrar


【解决方案1】:

call() 的第一个参数是一个数组,但您使用的是完整命令。尝试类似:

subprocess.call(['unrar.exe', 'x', '-p'+password, rarfn], shell=True)

编辑:

我认为您还必须检查是否创建了输出文件。密码错误的unrar 可能不会创建输出文件。检查它是否被创建(例如使用os.path.isfile())。您还可以检查unrar 输出以查看问题出在哪里。

EDIT2:

似乎没有 x rar 命令来提取具有完整路径的文件

这是我用密码文件Order.htm rar 到Order.rar 然后删除Order.htm 的工作示例:

rarfn = 'Order.rar'
outfn = 'Order.htm'
if os.path.isfile(outfn):
    print('%s already exists!!!' % (outfn))
else:
    for password in ('ala', 'ma', 'kota', 'zorro', 'rudy'):
        print('testing %s...' % (password))
        subprocess.call(['unrar.exe', 'x', '-p'+password, rarfn], shell=True)
        if os.path.isfile(outfn):
            print('guessed: [%s]' % (password))
            break

【讨论】:

  • 谢谢,在 dos 模式下 unrar 可以与 unrar -ppassword xfile.rar 一起使用,但是在子进程调用中,将这个:subprocess.call(['c:\\mio\\unrar\\unrar. exe ', '-p',password,' xC:\\mio\\unrar\\',rFile]) 打开一个dos窗口但手动等待密码
猜你喜欢
  • 1970-01-01
  • 2019-02-20
  • 2014-10-14
  • 2018-12-06
  • 2013-10-15
  • 2011-12-14
  • 2018-11-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多