乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      python小課堂17

       只怕想不到 2019-08-30

      前言

      今天來點實戰(zhàn)干貨,想必之前的小課堂中一直在講基礎(chǔ)也會顯得非??菰?,有了前面的相關(guān)知識,即可以實現(xiàn)本章內(nèi)容。若有不懂得的地方,請回顧python小課堂1-16。

      在多數(shù)人眼中一直覺得黑客很神秘,實際上當(dāng)初我學(xué)python入門時正是因為那會在學(xué)安全相關(guān)的東西,機緣巧合得以在360和愛春秋聯(lián)合組織的網(wǎng)課中學(xué)到了不少安全相關(guān)的知識。很早以前,python就被公認(rèn)為黑客屆的編程語言之一,自身有著強大的第三方庫(也就是包和模塊的統(tǒng)稱)來使用,并且語言上手度非常容易。廢話不多說,今天就來演示下如何手寫一段python程序來實現(xiàn)暴力破解壓縮文件的密碼!重點在于編程的思路!

      聲明:本章內(nèi)容僅供學(xué)習(xí)記錄使用,請勿用于商業(yè)以及非法用途!

      暴力破解的實現(xiàn)思路

      利用python內(nèi)置模塊zipfile來實現(xiàn)破解文件,zipfile模塊有一種函數(shù),其可以實現(xiàn)將壓縮文件路徑傳入,通過函數(shù)返回值去調(diào)用提取文件的方法,若文件是加密的且密碼傳入的不正確,程序則會發(fā)生異常(也就是程序報錯)。通過這樣的思想,我們可以通過讀取一個字典文件(字典文件就是包含各種弱密碼的一個txt文本文件),用for循環(huán)讀取此文件來實現(xiàn)循環(huán)嘗試。但是python單線程跑比較大的字典文本會非常耗時,所以此程序采用多線程來實現(xiàn)調(diào)用。

      PS:線程是計算機中的專有概念,舉個例子來說吧,比如咱們平時用到的360殺毒軟件,它整體作為一個軟件被大家使用,而這樣的一個獨立軟件可以稱之為進程,當(dāng)我們使用360殺毒時,在它正在運行殺毒的過程中,我們還可以用它對電腦進行卸載軟件,或者清理垃圾等操作,這樣在同一時刻,可以干很多事情,就利用到了多線程。一個進程軟件下可以同時干好多事情,而線程就是可以干好多事情的“人”。多線程使得計算機程序的運行效率大大提高,減少了我們平時使用時候的耗時。

      破解密碼效果演示

      1. 自己建立一個加密的zip文件,密碼自主設(shè)定。

      我們將一個文本文件進行加密,將其壓縮成zip文件。

      2. 打開命令行,執(zhí)行py腳本。

      我這里命令行用的是git bash shell,這是一種windows下的類linux命令行,非常好用,兼容所有l(wèi)inux命令,裝了git的同學(xué)用了都說好??!~

      可以看到有個進度條,進度條前面走的數(shù)字就是每個行密碼都去開一個線程,字典一共200W行,在讀取到2W多行時將密碼破解出來,接下來手動停止程序即可。

      3. 關(guān)于zip加密若不正確

      這里要說下,正常情況下,一個加密的zip文件,即使你輸入錯誤的密碼也是能用壓縮文件打開的,只不過相應(yīng)的文本文件是被加密的。所以,通過手動方式去解壓加密zip文件,即使是錯誤密碼也可以提取到原文本文件,只不過是亂碼罷了,如下圖:

      代碼的實現(xiàn)講解

      1. 命令行函數(shù)代碼

      # 第一行通過調(diào)用optparse的函數(shù)創(chuàng)建一個parser的實例化對象

      parser = optparse.OptionParser(' %prog -z <zipfile> -d <dictionary>')

      # 第二行添加一個參數(shù),在命令行上輸入-z xxxx 可將命令行上的zip路徑作為字符串傳入到變量zname中

      parser.add_option('-z', dest='zname', type='string', help='specify zip file')

      # 第三行添加一個參數(shù),在命令行上輸入-d xxxx 可將命令行上的字典文件作為字符串傳入到變量dname中

      parser.add_option('-d', dest='dname', type='string', help='specify dictionary file')

      # 第四行進行解析,得到相關(guān)參數(shù),得到options。

      options, args = parser.parse_args()

      # 第五行,通過zname和dname判斷是否傳入的參數(shù)為空

      if options.zname and options.dname:

      zip_name = options.zname

      dict_name = options.dname

      else:

      print(parser.usage)

      exit(0)

      2. 多線程函數(shù)代碼

      # 通過try-except來抓取運行程序時的異常,若報錯,說明傳入的文件不存在

      try:

      # 調(diào)用zipfile模塊的實例對象方法,將zip路徑傳入

      zip_file = zipfile.ZipFile(zip_name)

      # 打開字典文件,用python自帶的with關(guān)鍵詞來打開,可以交由python自主關(guān)閉文件的資源

      with open(dict_name, 'r', encoding='utf-8') as f:

      # 讀取每一行,并且將密碼后的 清空,也就是清空換行符

      for line in tqdm(f.readlines()):

      password = line.strip('')

      # 對每個密碼開啟線程去處理,調(diào)用extract_file函數(shù),傳入的參數(shù)為元組(zip_file, password)

      thread = Thread(target=extract_file, args=(zip_file, password))

      # 調(diào)用線程開始的方法

      thread.start()

      except Exception as e:

      print(f'發(fā)生異常!請檢查文件是否存在!異常信息為:{e}')

      假設(shè)我輸入了錯誤的文件名稱,可以看到報錯!

      3. 調(diào)用zipfile模塊的核心代碼

      這里的核心代碼便是多線程調(diào)用時觸發(fā)的函數(shù)。

      def extract_file(zip_file, password):

      ''' 提取壓縮文件,通過密碼不斷嘗試 '''

      try:

      zip_file.extractall(pwd=bytes(password,'utf-8'))

      print(f' 發(fā)現(xiàn)密碼,正確密碼為:{password}')

      except:

      pass

      代碼中額外的知識點

      1. 安裝python第三方庫(python的強大之處,就是很多好用的第三方庫,人為封裝寫好的包和模塊,直接拿來用即可!)

      為了我們方便讀取文件是看到相關(guān)進度,所以這里額外安裝了第三方庫tqdm,一個非常好用的進度條庫。tqdm在阿拉伯語中表示“progress”,而在西班牙語中則是“I love you so much”的縮寫。

      介紹一個python第三方庫的官方網(wǎng)站:https:///

      這個網(wǎng)站有各個模塊官方的安裝命令以及文檔,比如下圖:

      在之前的小課堂中,如果你配置好python的環(huán)境變量,打開命令行是可以直接進行安裝的,只需執(zhí)行命令pip install modal name即可,如下圖:

      因為我已經(jīng)安裝過了,所以會這樣提示。若沒安裝過,可以看到有下載的進度條,最后安裝完會顯示success。

      2. optparse、zipfile、tqdm模塊的簡介

      optarse:這是一個python自帶的庫,通過上面介紹的代碼可以和linux命令似的,帶參數(shù)執(zhí)行。舉個例子,如下圖:

      zipfile: python自帶的庫,可以對zip文件進行解壓縮,本章實現(xiàn)的重點模塊,需要注意的是,在用extractall時,傳入的字符串密碼進行字節(jié)編碼的轉(zhuǎn)化。zip_file.extractall(pwd=bytes(password,'utf-8'))

      關(guān)于解壓出來的文件名字會有亂碼的情況,請看文章: https://www.cnblogs.com/limengjie0104/archive/2018/06/17/9192449.html

      tqdm:需要安裝的第三方庫,在可以循環(huán)迭代的對象上使用即可。如: for line in tqdm(f.readlines()):

      爆破字典的項目

      爆破字典的開源項目,其中收錄了不少相關(guān)的密碼,可以star 或者 fork到自己的倉庫記錄使用。地址如下:https://github.com/rootphantomer/Blasting_dictionary

      本篇文章的完整代碼地址如下: https://github.com/unlimitbladeworks/python-tools/blob/master/hack/zip/zip_hack.py至此完!

      著作權(quán)歸作者所有

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多