Python破解ZIP或RAR文件密码

基本原理在于Python标准库zipfile和扩展库unrar提供的解压缩方法extractall()可以指定密码,这样的话首先(手动或用程序)生成一个字典,然后依次尝试其中的密码,如果能够正常解压缩则表示密码正确。

import os

import sys

#zipfile是Python标准库

import zipfile

#尝试导入扩展库unrar,如果没有就临时安装

try:

from unrar import rarfile

except:

path = '"'+os.path.dirname(sys.executable)+'\\scripts\\pip" install --upgrade pip'

os.system(path)

path = '"'+os.path.dirname(sys.executable)+'\\scripts\\pip" install unrar'

os.system(path)

from unrar import rarfile

def decryptRarZipFile(filename):

#根据文件扩展名,使用不同的库

if filename.endswith('.zip'):

fp = zipfile.ZipFile(filename)

elif filename.endswith('.rar'):

fp = rarfile.RarFile(filename)

#解压缩的目标文件夹

desPath = filename[:-4]

if not os.path.exists(desPath):

os.mkdir(desPath)

#先尝试不用密码解压缩,如果成功则表示压缩文件没有密码

try:

fp.extractall(desPath)

fp.close()

print('No password')

return

#使用密码字典进行暴力破解

except:

try:

fpPwd = open('pwddict.txt')

except:

print('No dict file pwddict.txt in current directory.')

return

for pwd in fpPwd:

pwd = pwd.rstrip()

try:

if filename.endswith('.zip'):

for file in fp.namelist():

#对zip文件需要重新编码再解码,避免中文乱码

fp.extract(file, path=desPath, pwd=pwd.encode())

os.rename(desPath+'\\'+file, desPath+'\\'+file.encode('cp437').decode('gbk'))

print('Success! ====>'+pwd)

fp.close()

break

elif filename.endswith('.rar'):

fp.extractall(path=desPath, pwd=pwd)

print('Success! ====>'+pwd)

fp.close()

break

except:

pass

fpPwd.close()

if __name__ == '__main__':

filename = sys.argv[1]

if os.path.isfile(filename) and filename.endswith(('.zip', '.rar')):

decryptRarZipFile(filename)

else:

print('Must be Rar or Zip file')

原文发布于微信公众号 - Python小屋(Python_xiaowu)

原文发表时间:2016-09-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Android 研究

OKHttp源码解析(六)--中阶之缓存基础

1.什么是缓存 2.为什么要用缓存 3.HTTP缓存机制 4.CacheControl类详解 5.CacheStrategy类详解 6.CacheIn...

25250
来自专栏刘望舒

Android系统启动流程(四)Launcher启动过程与系统启动流程

前言 此前的文章我们学习了init进程、Zygote进程和SyetemServer进程的启动过程,这一篇文章我们就来学习Android系统启动流程的最后一步:L...

26580
来自专栏大内老A

ASP.NET MVC集成EntLib实现“自动化”异常处理[实例篇]

个人觉得异常处理对于程序员来说是最为熟悉的同时也是最难掌握的。说它熟悉,因为仅仅就是try/catch/finally而已。说它难以掌握,则是因为很多开发人员却...

228100
来自专栏恒思考

一个人的app后端-parse的安装与使用

mkdir -p ~/mongo ~/mongo/db cd ./mongo/ docker run -p 27017:27017 -v ~/mongo/db:...

29530
来自专栏程序员的碎碎念

JS动态加载以及JavaScript void(0)的爬虫解决方案

对于使用JS动态加载, 或者将下一页地址隐藏为JavaScript void(0)的网站, 如何爬取我们要的信息呢?

18360
来自专栏lzj_learn_note

Volley源码分析学习

2)根据SDK版本来创建HttpStack的实现,如果是2.3以上的,则使用基于HttpUrlConnection实现的HurlStack,反之,则利用Http...

12960
来自专栏坚毅的PHP

jersey处理支付宝异步回调通知的问题:java.lang.IllegalArgumentException: Error parsing media type 'application/x-www

tcpflow以流为单位分析请求内容,非常适合服务器端接口类服务查问题 这次遇到的问题跟支付宝支付后的回调post结果有关 淘宝的代码例子: publi...

63950
来自专栏Java3y

Servlet第五篇【介绍会话技术、Cookie的API、详解、应用】

什么是会话技术 基本概念: 指用户开一个浏览器,访问一个网站,只要不关闭该浏览器,不管该用户点击多少个超链接,访问多少资源,直到用户关闭浏览器,整个这个过程我们...

33750
来自专栏一个爱瞎折腾的程序猿

asp.net core使用Swashbuckle.AspNetCore(swagger)生成接口文档

开局一张图,然后开始编,一些基本的asp.net core东西就不再赘述,本文只对Swashbuckle.AspNetCore的几个使用要点进行描述。

21010
来自专栏有趣的django

python爬虫人门(10)Scrapy框架之Downloader Middlewares

设置下载中间件(Downloader Middlewares)  下载中间件是处于引擎(crawler.engine)和下载器(crawler.engine.d...

38980

扫码关注云+社区

领取腾讯云代金券