Windows子流程上的Python不起作用

时间:2014-01-10 08:50:09

标签: python subprocess password-protection unrar

我想测试打开一个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()

1 个答案:

答案 0 :(得分:1)

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

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

修改

我认为您还必须检查输出文件是否已创建。使用密码错误的unrar可能无法创建输出文件。检查是否已创建(例如使用os.path.isfile())。您还可以检查unrar输出以查看问题所在。

<强> EDIT2:

似乎没有 x rar命令使用完整路径提取文件

这是一个工作示例,我将密码文件Order.htmOrder.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