2016年8月7日 星期日

[Excel] 偷看加密的VBA Project Code

因為剛剛放假去了一趟意大利旅遊而沒有更新。回到香港已經兩個星期了,本來打算回來就寫這次的遊記,但才寫到第2天的事,很多都還在整理當中。回港當日一下機就帶著行李直接回Office,不過那星期就在工作上遇到一個特別的發現,值得先記下來充撐充撐⋯⋯話說之前一項專案找了 IT Team寫了一個Excel的工具來做一項數據處理的工序。最近隨著這項目的更新,我們需要另外加入新的運算程序。在同事研究該怎樣做的時候,發現了原來可以輕易破解加密了的Excel VBA Project。就算無意自己去改動IT的出品,對「原來有這辦法」就感到很有趣。日後也是一個好機會去了解下別人的專業角度如何寫Code。

大致上:這方法是用十六進制編輯器-Hex Editor 去打開檔案,找尋並修改檔案中特定的識別字串,就可在打開檔案時除掉加密保護。(這方法是試在辦公室的Window機Office2013。而現在用自家電腦準備以下圖片時知道,Mac機的Office 2011在打開最後那個修改過的檔案時,有不同的處理,所以偷看不到。)

  • 常見帶Macro的Excel 會存成 xls 或 xlsm 副檔名的檔案,而這方法用在xls檔上。因為我手上的是xlsm,所以要做一個另存新檔的步驟,存成xls檔。
  •  用Hex Editor打開檔案,若是自家電腦可以找Notepad++的外掛,工作的電腦可以抓網上的Online Hex Editor (如 https://hexed.it/)。找尋"DBP"並修改為"DBx"。然後匯出檔案。
  • 這時打開剛修改過的檔案,過程中會出現錯誤訊息,可以選擇略過錯誤。然後進入VB Editor,會發現已經可以檢視程式碼(Office 2011只能選擇"開啟並修復",打開後Module部份不見了)。這時最好也重新設定/解除VBA Project的加密,並另行存檔。

後話:在嘗試這方法時,也想起的當年的PC遊戲-三國志曹操傳,就有使用十六進制編輯器的修改法。

沒有留言:

張貼留言