我想测试打开一个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()
答案 0 :(得分:1)
call()
的第一个参数是一个数组但你使用完整命令。尝试类似:
subprocess.call(['unrar.exe', 'x', '-p'+password, rarfn], shell=True)
修改强>
我认为您还必须检查输出文件是否已创建。使用密码错误的unrar
可能无法创建输出文件。检查是否已创建(例如使用os.path.isfile()
)。您还可以检查unrar
输出以查看问题所在。
<强> EDIT2:强>
似乎没有 x rar
命令使用完整路径提取文件。
这是一个工作示例,我将密码文件Order.htm
与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