激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - python暴力解壓rar加密文件過程詳解

python暴力解壓rar加密文件過程詳解

2021-08-01 01:16_qiufeng Python

這篇文章主要介紹了python解壓rar加密文件過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

第一次使用csdn寫文章,寫得不好還請見諒。(運行環境:python3.6)

下了一個帶密碼的壓縮包文件,作為一個剛學python的新手,想著能不能用python暴力破解它,于是在網上搜了很多資料,看著似乎并不是很麻煩,也想試著自己寫一個可以暴力破解的程序,在寫的過程中卻遇到了各種各樣的問題,希望大手們能帶帶我。遇到的問題如下:

  • zipfile和zipfile2似乎都不支持AES解密(https://bugs.python.org/issue9170)
  • 在用rarfile暴力破解時即使密碼錯誤也不拋出異常,因此無法用try,except捕獲密碼

本來是想寫一個可以同時暴力破解zip和rar的程序,在試了半天解密zip卻一直提示密碼錯誤之后放棄了zip,想著能不能寫一個暴力破解rar的程序。

首先是生成字典:要用到itertools模塊

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import itertools as its
import string
 
def createDict(path,repeats,words):
    dict = its.product(words,repeat=repeats)
    '''這里的words是要迭代的字符串,repeats是生成的密碼長度,生成的dict是一個返回元組的迭代器'''
    f = open(path,'a')
    for cipher in dict:
        f.write(''.join(cipher) + '\n')
    f.close()
 
def main():
    numbers = string.digits #包含0-9的字符串
    path = '輸入你的字典路徑'
    length = 你要迭代的密碼長度
    for i in range(1,length):
        createDict(path,i,numbers)
 
if __name__=="__main__":
    main()

到這里我們的字典已經生成完畢了,接下來開始暴力破解rar

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
from threading import Thread
from unrar import rarfile
import os
 
'''首先我們要讀取字典,字典可能太大因此我們采用迭代器'''
 
def get_pwd(dict_path):
    with open(dict_path,'r') as f:
        for pwd in f:
            yield pwd.strip()
 
def decode_rar(fp,pwd,extract_path):
    try:
        fp.extractall(extract_path,pwd=pwd)
    except:
        pass
    else:
        print('the pwd is>',pwd)
'''
事實上我在嘗試時似乎從來沒有到達過else,這樣可能是得不到解壓密碼的。我的
一種得到密碼的想法如下,但是運行效率可能會降低
 
 
def decode_rar(fp,pwd,check_file,extract_path):
    fp.extractall(extract_path,pwd=pwd)
    if os.path.exists(check_file):
        print('The pwd is:',pwd)
        exit(0)
其中check_file可以設置為fp.namelist()[0]
并且該方法不能使用多線程,因此速度會降低很多
'''
 
def main():
    extract_path = '你要解壓的路徑'
    dict_path = '你的字典路徑'
    filename = '你的rar路徑'
    fp = rarfile.RarFile(filename)
    pwds = get_pwd(dict)
    '''使用多線程可提高速度'''
    for pwd in pwds:
        t = Thread(target=rar_file,args=(fp,pwd,extract_path))
        t.start()

以上是寫程序的思路和遇到的各種坑,代碼是手敲的,可能有一些錯誤,希望能得到諒解和幫助。

下面是一個圖形界面的rar解密源代碼:(圖形只是想練習,運行較慢,建議直接運行上面的函數)

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
import tkinter as tk
import os
from tkinter import messagebox
from unrar import rarfile
from threading import Thread
 
def getPwd(dict):
  with open(dict,'r') as f:
    for pwd in f:
      yield pwd.strip()
def slowerDecode(fp,pwd,check_file,extract_path):
  fp.extractall(extract_path,pwd=pwd)
  if os.path.exists(check_file):
    messagebox.showinfo(message="密碼:"+pwd)
    messagebox.showinfo(message="程序結束")
    messagebox.showinfo(message="密碼:"+pwd)
    exit(0)
    
def quickDecode(fp,pwd,extract_path):
  fp.extractall(extract_path,pwd=pwd)
 
 
def check(obs):
  flag = 1
  for ob in obs:
    if not ob.checkExist():
      flag = 0
      ob.showError() 
 
  if(not flag):
    return 0
  else:
    for ob in obs:
      if not ob.check():
        flag = 0
        ob.showError()
        
  if (not flag):
    return 0
  else:
    for ob in obs:
      ob.right()
    return 1
        
def main(obs):
  extract_path = obs[0].path_input.get()
  rar_path = obs[1].path_input.get()
  txt_path = obs[2].path_input.get()
  pwds = getPwd(txt_path)
  global var1
  global var2
  if(check(obs)):
    if(var1.get() == 0 and var2.get() == 0):
      messagebox.showerror(message="選擇一個選項!!!")
    elif(var1.get() == 0 and var2.get() == 1):
      fp = rarfile.RarFile(rar_path)
      check_file = fp.namelist()[0]
      for pwd in pwds:
        slowerDecode(fp,pwd,check_file,extract_path)
    elif(var1.get() == 1 and var2.get() == 0):
      fp = rarfile.RarFile(rar_path)
      for pwd in pwds:
        t = Thread(target=quickDecode,args=(fp,pwd,extract_path))
        t.start()
      exit(0)
    else:
      messagebox.showerror(message="只選擇一個!!!")
    
 
class FolderPath:
  
  def __init__(self,y=0,error_message="Not exists!",path_input="",text=''):
    self.y = y
    self.error_message = error_message
    self.path_input = path_input
    self.text = text
    
  def createLabel(self):
    label = tk.Label(window,bg="white",font=("楷體",13),width=20,text=self.text)
    cv.create_window(100,self.y,window=label)
  
  def createEntry(self):
    entry = tk.Entry(window,fg="blue",width="40",bg="#ffe1ff",textvariable=self.path_input)
    cv.create_window(330,self.y,window=entry)
  
  def show(self):
    self.createLabel()
    self.createEntry()
    
  def showError(self,color="red"):
    label = tk.Label(window,bg="white",fg=color,font=("楷體",13),width="10",text=self.error_message)
    cv.create_window(530,self.y,window=label)
  
  def checkExist(self):
    self.error_message = 'Not exists!'
    if not os.path.exists(self.path_input.get()):
      return 0
    return 1
  
  def check(self):
    if not os.path.isdir(self.path_input.get()):
      self.error_message = 'Not a dir!'
      return 0
    else:
      return 1
  
  def right(self):
    self.error_message = "right path!"
    self.showError('#00FFFF')
    
  
class FilePath(FolderPath):
  def check(self):
    if (self.path_input.get().split('.')[-1] == self.suffix):
      return 1
    else:
      self.error_message = "Not "+self.suffix + '!'
      return 0
  
 
window = tk.Tk()
window.title('made by qiufeng')
window.geometry('600x300')
cv = tk.Canvas(window,width=600,height=300,bg='white')
cv.pack()
 
folderpath = FolderPath(y=140,path_input=tk.StringVar(),text="請輸入解壓路徑")
folderpath.show()
 
 
rarpath = FilePath(y=60,path_input=tk.StringVar(),text="請輸入rar路徑")
rarpath.suffix = 'rar'
rarpath.show()
 
txtpath = FilePath(y=100,path_input=tk.StringVar(),text="請輸入字典路徑")
txtpath.suffix = 'txt'
txtpath.show()
obs = [folderpath,rarpath,txtpath]
 
#多選框
var1 = tk.IntVar()
var2 = tk.IntVar()
ck1 = tk.Checkbutton(window,text="直接破解(無法獲得密碼)",variable=var1)
cv.create_window(150,200,window=ck1)
ck2 = tk.Checkbutton(window,text="慢速(可獲得密碼)",variable=var2)
cv.create_window(132,230,window=ck2)
button = tk.Button(window,text="確認",command=lambda: main(obs))
cv.create_window(90,260,window=button)
 
window.mainloop()

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:https://blog.csdn.net/weixin_43873887/article/details/87862831

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 日韩精品一二三区 | 精品一区二区三区中文字幕老牛 | 国产午夜精品久久久久婷 | 国产流白浆高潮在线观看 | 国产精品成人一区二区三区电影毛片 | 国产中出视频 | 欧美一级全黄 | 一级电影免费 | 亚洲特黄a级毛片在线播放 久久久入口 | 黄在线观看在线播放720p | 特一级黄色毛片 | 国产一区二区免费看 | 蜜桃视频在线播放 | 精品午夜久久 | 久久久免费观看完整版 | 亚洲一区二区三区视频 | 欧美性受xxxxxx黑人xyx性爽 | 久久99精品国产自在现线 | 免费国产成人高清在线看软件 | 黄网站进入 | 一级黄色毛片a | 一级网站 | 宅男噜噜噜66国产在线观看 | 国产成人免费高清激情视频 | 欧美黄色一级生活片 | 刘亦菲一区二区三区免费看 | 中文字幕在线视频日本 | 久久99国产精品久久99果冻传媒 | 一级片九九 | 成人网在线观看 | 免费观看视频91 | 在线区 | av免费在线播放网址 | 国产高清成人久久 | 斗破苍穹在线观看免费完整观看 | av中文在线观看 | 国产91一区二区三区 | 免费黄色的视频 | 黄色大片在线免费观看 | 涩涩激情网 | 在线播放黄色片 |