2012-08-14 61 views
0

我正在創建一個程序,用於幫助我的客戶恢復放置在Word和Excel等辦公文檔上的密碼。該程序工作得很好,但它比你可以免費下載的類似產品慢很多。我想使用我自己的程序,因爲我覺得很多免費下載的程序都不完全安全,並且缺少一些我想要的控件。破解密碼的最佳循環

更重要的是......我需要幫助弄清楚爲什麼我的程序太慢了。我用一個簡單的3字母密碼「TFX」創建了一個excel文檔。我下載的程序發現密碼的速度幾乎與點擊'開始'後放開鼠標按鈕一樣快。我的節目需要10分鐘。這裏的3字符循環:

private string ThreeCharPass(string file, Microsoft.Office.Interop.Excel.Application exApp, char[] combarr) 
    { 
     for (int three = 0; three < combarr.Length; three++) 
     { 
      for (int two = 0; two < combarr.Length; two++) 
      { 
       for (int one = 0; one < combarr.Length; one++) 
       { 
        try 
        { 
         string pass = combarr[three].ToString() + combarr[two].ToString() + combarr[one].ToString(); 
         exApp.Workbooks.Open(file, false, true, Type.Missing, pass, Type.Missing, true, Type.Missing, Type.Missing, false, false, Type.Missing, Type.Missing, Type.Missing, Type.Missing); 
         return pass; 
        } 
        catch 
        { 
        } 
       } 
      } 
     } 
     return string.Empty; 
    } 

陣列「combarr」是包含在所述密碼的所有可能的字符字符數組。它是根據用戶選擇的選項在程序中較早生成的。我認爲這個問題必須以我通過數組循環來創建密碼組合的方式,因爲在這種3字符密碼方法中,花費了5分鐘以上的時間,其他「專業」程序花費了幾秒鐘的時間。任何反饋將不勝感激!

+11

您正在創建一個程序來幫助您的客戶暴露潛在的私人數據嗎? – 2012-08-14 18:40:40

+1

我的猜測是專有系統將他們的方法建立在使用密碼存儲方法/加密算法的一些知識的基礎上,而你正在使用 - 不可避免的慢得多的蠻力方法。 – 2012-08-14 18:41:02

+0

您正在使用非常高的抽象(從Exel interop,將IO,異常文件)進行數字運算。這是錯誤的方法。 – Gleno 2012-08-14 18:41:26

回答

5

你可以在你的代碼上做一些小的優化,但最可能的罪魁禍首是exApp.Workbooks.Open調用。我認爲這個調用非常緩慢,但你可以用一個分析器來測試。

其他工具所做的其他工具是讀取實際的文檔結構(DOC,DOCX格式),並找出密碼是否正確,這與Word試圖找出它的方式完全相同。我不知道確切的細節,但Word很可能知道密碼是正確的。一個例子可以是一個唯一的字符串,當正確解密時,它具有期望值;或者加起來的校驗和。當你知道格式的規格時,你可以自己做測試,爲你節省昂貴的interop通話。

This page有許多Microsoft Office格式的詳細信息。實施這些規範的一部分是很多工作,但它肯定會加快速度。只有在您刪除互操作調用後,纔可以查看更高效的循環,多線程和其他策略。

請注意,Office格式是專有的,因此並非所有信息都可用,完整,最新或可靠。

+0

對我有意義,謝謝。任何想法如何/在哪裏我可以找到這種類型的規範?我會想象它在某處可用。有許多許多可下載的程序可以執行此操作。 – DarkShadow 2012-08-14 18:53:27

+0

我在我的答案中添加了一個指向Microsoft Office規範列表的鏈接。 – Virtlink 2012-08-14 19:05:03

+0

謝謝!我會仔細看看併發布我想出來的結果 – DarkShadow 2012-08-14 19:13:25

0

完全錯誤的做法。

  1. 多線程
  2. 除非你知道具體的密碼長度,它是隨機的/安全(少數用戶選擇真正的隨機密碼),你很可能與字典攻擊和/或彩虹表做的更好
  3. 像Excel一樣普遍,我首先會查找有關算法/弱點的已知信息,以便確定密碼長度以及Excel實際解密/解鎖文件的方式。
  4. 直接使用API​​來測試您的密碼可能會很慢。在某個位置找到一個已知的價值並在其上進行工作會更好。如果使用#3,您可以確定Excel如何解密/解鎖文件,那麼如果您要調用Excel方法,則可以將其複製到自己的代碼中,以便像互操作開銷一樣快地運行。

這就是說,你真的應該這樣做嗎?

+0

開裂的循環是在它自己的線程上。如果我要創建另一個線程,我會認爲我最終會碰到試圖從多個線程訪問相同文件的衝突。我不知道具體的長度和密碼很少安全,但我已經使用下載工具的字典功能,並沒有很好的運氣恢復密碼。彩虹桌是一個想法,但我不知道在這種情況下我會真正擺脫它的速度。我希望我不必這樣做,但不幸的是,被遺忘的密碼是一個現實,數據重新創建是昂貴的 – DarkShadow 2012-08-14 18:58:57

1

在.docx文件的情況下,有一種更簡單的方法。

  1. 擴展重命名爲一個.zip,
  2. 將進入文件中,你會發現文件夾「字」
  3. 在這裏,您刪除「的settings.xml」
  4. 現在關閉的文件夾,將文件重命名爲.docx。

完成。發現http://www.nextofwindows.com/how-to-remove-password-from-protected-word-file-in-word-2007-and-2010

對於Excel有一個非常類似的方法,但它涉及更多的工作

  1. 重命名擴展一個.zip,
  2. 將進入文件中,你會發現文件夾「xl」,然後在文件夾「工作表」
  3. 應該有一個或多個文件命名爲:sheet1.xml(sheet2.xml等)。其中一個文件的內部是一個XML標籤:< sheetProtection password = ... />。刪除整個XML標籤。
  4. 現在關閉該文件夾,如果該文件是支持宏的工作簿,則將該文件重命名爲.xlsx或.xlsm。

上找到http://blog.bitcollectors.com/adam/2011/10/how-to-unprotect-a-password-protected-xlsx-file/

或者下面的方法工作得很好,我.. http://www.instructables.com/id/VBA-Code-To-Unlock-A-Locked-Excel-Sheet/

祝你好運!